From 960cdf29197bc3f5922110cf26627aa9709ac79b Mon Sep 17 00:00:00 2001 From: cvs2svn Date: Fri, 10 Jun 2005 10:29:11 +0000 Subject: This commit was manufactured by cvs2svn to create branch 'bogue40'. --- sandbox/Controls.pm | 224 --------- sandbox/alledges.pl | 47 -- sandbox/allgradients.pl | 64 --- sandbox/allgradients.tcl | 48 -- sandbox/alllineshapes.pl | 47 -- sandbox/allreliefs.pl | 54 --- sandbox/allreliefs.tcl | 30 -- sandbox/bouton-down.xpm | 342 -------------- sandbox/bouton.xpm | 329 -------------- sandbox/conical.tcl | 18 - sandbox/contours.tcl | 45 -- sandbox/controls.tcl | 158 ------- sandbox/defs.tcl | 1097 --------------------------------------------- sandbox/fvwm.xbm | 21 - sandbox/lines.pl | 35 -- sandbox/logo.gif | Bin 402 -> 0 bytes sandbox/smooth.tcl | 34 -- sandbox/testarc.tcl | 44 -- sandbox/testbezier.pl | 190 -------- sandbox/testbezier.tcl | 131 ------ sandbox/testbitmaps.tcl | 86 ---- sandbox/testicon.tcl | 102 ----- sandbox/testplug.pl | 51 --- sandbox/testpoly.tcl | 157 ------- sandbox/testrect.pl | 99 ---- sandbox/testrelief.pl | 73 --- sandbox/testrelief.tcl | 45 -- sandbox/testshape.pl | 132 ------ sandbox/testshape.tcl | 18 - sandbox/testtext.tcl | 138 ------ sandbox/testwind.tcl | 19 - sandbox/testzinc.pl | 503 --------------------- sandbox/textexpand.tcl | 6 - sandbox/texture-bois1.xpm | 320 ------------- sandbox/texture-paper.xpm | 87 ---- sandbox/trash.xbm | 6 - sandbox/triangles.pl | 69 --- sandbox/xpenguin.png | Bin 10148 -> 0 bytes sandbox/zinc.tcl | 284 ------------ sandbox/zinc.test | 154 ------- 40 files changed, 5307 deletions(-) delete mode 100644 sandbox/Controls.pm delete mode 100644 sandbox/alledges.pl delete mode 100644 sandbox/allgradients.pl delete mode 100644 sandbox/allgradients.tcl delete mode 100644 sandbox/alllineshapes.pl delete mode 100644 sandbox/allreliefs.pl delete mode 100644 sandbox/allreliefs.tcl delete mode 100644 sandbox/bouton-down.xpm delete mode 100644 sandbox/bouton.xpm delete mode 100644 sandbox/conical.tcl delete mode 100644 sandbox/contours.tcl delete mode 100644 sandbox/controls.tcl delete mode 100644 sandbox/defs.tcl delete mode 100644 sandbox/fvwm.xbm delete mode 100644 sandbox/lines.pl delete mode 100644 sandbox/logo.gif delete mode 100644 sandbox/smooth.tcl delete mode 100644 sandbox/testarc.tcl delete mode 100644 sandbox/testbezier.pl delete mode 100644 sandbox/testbezier.tcl delete mode 100644 sandbox/testbitmaps.tcl delete mode 100644 sandbox/testicon.tcl delete mode 100644 sandbox/testplug.pl delete mode 100644 sandbox/testpoly.tcl delete mode 100644 sandbox/testrect.pl delete mode 100644 sandbox/testrelief.pl delete mode 100644 sandbox/testrelief.tcl delete mode 100644 sandbox/testshape.pl delete mode 100644 sandbox/testshape.tcl delete mode 100644 sandbox/testtext.tcl delete mode 100644 sandbox/testwind.tcl delete mode 100644 sandbox/testzinc.pl delete mode 100644 sandbox/textexpand.tcl delete mode 100644 sandbox/texture-bois1.xpm delete mode 100644 sandbox/texture-paper.xpm delete mode 100644 sandbox/trash.xbm delete mode 100644 sandbox/triangles.pl delete mode 100644 sandbox/xpenguin.png delete mode 100644 sandbox/zinc.tcl delete mode 100644 sandbox/zinc.test (limited to 'sandbox') diff --git a/sandbox/Controls.pm b/sandbox/Controls.pm deleted file mode 100644 index 55f6b6a..0000000 --- a/sandbox/Controls.pm +++ /dev/null @@ -1,224 +0,0 @@ - -package Controls; - -$top = 1; - -sub new { - my $proto = shift; - my $type = ref($proto) || $proto; - my ($zinc) = @_; - my $self = {}; - - $self{'zinc'} = $zinc; - $self{'cur_x'} = 0; - $self{'cur_y'} = 0; - $self{'cur_angle'} = 0; - $self{'corner_x'} = 0; - $self{'corner_y'} = 0; - - $self{'tlbbox'} = $zinc->add('group', $top, - -sensitive => 0, -visible => 0, - -tags => 'currentbbox'); - $zinc->add('rectangle', $self{'tlbbox'}, [-3, -3, +3, +3]); - $self{'trbbox'} = $zinc->add('group', $top, - -sensitive => 0, -visible => 0, - -tags => 'currentbbox'); - $zinc->add('rectangle', $self{'trbbox'}, [-3, -3, +3, +3]); - $self{'blbbox'} = $zinc->add('group', $top, - -sensitive => 0, -visible => 0, - -tags => 'currentbbox'); - $zinc->add('rectangle', $self{'blbbox'}, [-3, -3, +3, +3]); - $self{'brbbox'} = $zinc->add('group', $top, - -sensitive => 0, -visible => 0, - -tags => 'currentbbox'); - $zinc->add('rectangle', $self{'brbbox'}, [-3, -3, +3, +3]); - $zinc->add('rectangle', $top, [0, 0, 1, 1], - -linecolor => 'red', -tags => 'lasso', - -visible => 0, -sensitive => 0); - - $zinc->Tk::bind('', [\&start_lasso, $self]); - $zinc->Tk::bind('', [\&fin_lasso, $self]); - - $zinc->Tk::bind('', sub { my $ev = $zinc->XEvent(); - my @closest = $zinc->find('closest', - $ev->x, $ev->y); - print "at point=$closest[0]\n" }); - - $zinc->Tk::bind('', [\&press, $self, \&motion]); - $zinc->Tk::bind('', [\&release, $self]); - - $zinc->Tk::bind('', [\&press, $self, \&zoom]); - $zinc->Tk::bind('', [\&release, $self]); - - $zinc->Tk::bind('', [\&press, $self, \&rotate]); - $zinc->Tk::bind('', [\&release, $self]); - - $zinc->Tk::bind('current', '', [\&showbox, $self]); - $zinc->Tk::bind('current', '', [\&hidebox, $self]); - - bless ($self, $type); - return $self; -} - -# -# Controls for the window transform. -# -sub press { - my ($zinc, $self, $action) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - - $self->{'cur_x'} = $lx; - $self->{'cur_y'} = $ly; - $self->{'cur_angle'} = atan2($ly, $lx); - $zinc->Tk::bind('', [$action, $self]); -} - -sub motion { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my @it; - my @res; - - @it = $zinc->find('withtag', 'controls'); - if (scalar(@it) == 0) { - return; - } - @res = $zinc->transform($it[0], [$lx, $ly, $self->{'cur_x'}, $self->{'cur_y'}]); - $zinc->translate('controls', $res[0] - $res[2], $res[1] - $res[3]); - $self->{'cur_x'} = $lx; - $self->{'cur_y'} = $ly; -} - -sub zoom { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my $maxx; - my $maxy; - my $sx; - my $sy; - - if ($lx > $self->{'cur_x'}) { - $maxx = $lx; - } else { - $maxx = $self->{'cur_x'}; - } - if ($ly > $self->{'cur_y'}) { - $maxy = $ly - } else { - $maxy = $self->{'cur_y'}; - } - $sx = 1.0 + ($lx - $self->{'cur_x'})/$maxx; - $sy = 1.0 + ($ly - $self->{'cur_y'})/$maxy; - $self->{'cur_x'} = $lx; - $self->{'cur_y'} = $ly; - $zinc->scale('controls', $sx, $sy); -# $main::scale *= $sx; -# main::update_transform($zinc); -} - -sub rotate { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my $langle; - - $langle = atan2($ly, $lx); - $zinc->rotate('controls', -($langle - $self->{'cur_angle'})); - $self->{'cur_angle'} = $langle; -} - -sub release { - my ($zinc, $self) = @_; - $zinc->Tk::bind('', ''); -} - -sub start_lasso { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my @coords; - - $self->{'cur_x'} = $lx; - $self->{'cur_y'} = $ly; - $self->{'corner_x'} = $lx; - $self->{'corner_y'} = $ly; - @coords = $zinc->transform($top, [$lx, $ly]); - $zinc->coords('lasso', [$coords[0], $coords[1], $coords[0], $coords[1]]); - $zinc->itemconfigure('lasso', -visible => 1); - $zinc->raise('lasso'); - $zinc->Tk::bind('', [\&lasso, $self]); -} - -sub lasso { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my @coords; - - $self->{'corner_x'} = $lx; - $self->{'corner_y'} = $ly; - @coords = $zinc->transform($top, [$self->{'cur_x'}, $self->{'cur_y'}, $lx, $ly]); - $zinc->coords('lasso', [$coords[0], $coords[1], $coords[2], $coords[3]]); -} - -sub fin_lasso { - my ($zinc, $self) = @_; - my $enclosed; - my $overlapping; - - $zinc->Tk::bind('', ''); - $zinc->itemconfigure('lasso', -visible => 0); - $enclosed = join(', ', $zinc->find('enclosed', - $self->{'cur_x'}, $self->{'cur_y'}, - $self->{'corner_x'}, $self->{'corner_y'})); - $overlapping = join(', ', $zinc->find('overlapping', - $self->{'cur_x'}, $self->{'cur_y'}, - $self->{'corner_x'}, $self->{'corner_y'})); - print "enclosed=$enclosed, overlapping=$overlapping\n"; -} - -sub showbox { - my ($zinc, $self) = @_; - my @coords; - my @it; - - if (! $zinc->hastag('current', 'currentbbox')) { - @it = $zinc->find('withtag', 'current'); - if (scalar(@it) == 0) { - return; - } - @coords = $zinc->transform($top, $zinc->bbox('current')); - - $zinc->coords($self->{'tlbbox'}, [$coords[0], $coords[1]]); - $zinc->coords($self->{'trbbox'}, [$coords[2], $coords[1]]); - $zinc->coords($self->{'brbbox'}, [$coords[2], $coords[3]]); - $zinc->coords($self->{'blbbox'}, [$coords[0], $coords[3]]); - $zinc->itemconfigure('currentbbox', -visible => 1); - } -} - -sub hidebox { - my ($zinc, $self) = @_; - my $ev = $zinc->XEvent(); - my $lx = $ev->x; - my $ly = $ev->y; - my @next; - - @next = $zinc->find('closest', $lx, $ly); - if ((scalar(@next) == 0) || - ! $zinc->hastag($next[0], 'currentbbox') || - $zinc->hastag('current', 'currentbbox')) { - $zinc->itemconfigure('currentbbox', -visible => 0); - } -} - - diff --git a/sandbox/alledges.pl b/sandbox/alledges.pl deleted file mode 100644 index e8893a9..0000000 --- a/sandbox/alledges.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -# $Id$ -# these simple samples have been developped by C. Mertz mertz@cena.fr - -use Tk; -use Tk::Zinc; -use strict; - -my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1'; -my $mw = MainWindow->new(); -my $zinc = $mw->Zinc(-width => 700, -height => 300, -# -render => 1, - -backcolor => "grey50", # this will be transparent in the doc - )->pack(); - - -my $i = 1; -my $x = 40; -my $y = 40; -foreach my $contour ( (['left'], ['right'], ['top'], ['bottom'], - ['top', 'bottom'], ['left','right'], ['left','top'], ['contour'], - ['oblique'], ['counteroblique'],['oblique','counteroblique']) ) { - my $tab = $zinc->add('tabular', 1, 1, -position => [$x, $y], - -labelformat => "a5a5+0+0", - ); - my $contour_text = "['" . join ("','",@{$contour}) . "']"; - $zinc->itemconfigure($tab, 0, - -text => $contour_text, - -border => $contour, - -alignment => "center", - -filled => 1, - -backcolor => "gray95", -); - $i++; - if ($i == 5) { - $x = 40; - $y = $y + 50; - $i = 1; - } - else { - $x = $x + 160; - } -} - - - -MainLoop(); diff --git a/sandbox/allgradients.pl b/sandbox/allgradients.pl deleted file mode 100644 index bd7a4d6..0000000 --- a/sandbox/allgradients.pl +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl -# $Id$ -# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr - -use Tk; -use Tk::Zinc; -use strict; - -my ($grp,, $s, $i); -my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1'; -my $mw = MainWindow->new(); -my $zinc = $mw->Zinc(-width => 700, -height => 300, - -render => 1, - -backcolor => "red", # this will be transparent in the doc - )->pack(); - - -$zinc->gname('black|white', 'axial 1'); -$zinc->gname('black|white/90', 'axial 2'); -$zinc->gname('black|white/30', 'axial 3'); -$zinc->gname('black|black:0/30', 'axial 4'); -$zinc->gname('white|black(-14 -20', 'radial 1'); -$zinc->gname('white:50 0 70|black 50|white 100(0 0', 'radial 2'); -$zinc->gname('white|black:80[-14 -20', 'path 1'); -$zinc->gname('white|white 30|black:80[-14 -20', 'path 2'); - -$grp = $zinc->add('group', 1); -$zinc->add('rectangle', $grp, [0, 0, 70, 50], - -filled => 1, - -fillcolor => 'white', - ); -$zinc->add('rectangle', $grp, [0, 0, 70, 50], - -filled => 1, - -linewidth => 1, # to help making the background transparent with gimp! - - -fillcolor => 'axial 1', - -tags => ['rect']); -$zinc->add('text', $grp, - -text => 'axial 1', - -anchor => 'center', - -position => [35, -10], - -tags => ['txt']); -$zinc->translate($grp, 20, 30); -$i = 1; -foreach $s (('axial 2', 'axial 3', 'axial 4', 'radial 1', - 'radial 2', 'path 1', 'path 2')) { - $grp = $zinc->clone($grp); - $zinc->addtag("g$grp", 'withtag', "$grp*attrs"); #, $grp, 0); - $zinc->itemconfigure(".$grp.txt", - -text => $s); - $zinc->itemconfigure(".$grp.rect", - -fillcolor => $s); - $i++; - if ($i == 5) { - $zinc->translate($grp, -3*100, 80); - $i = 1; - } - else { - $zinc->translate($grp, 100, 0); - } -} - - -MainLoop(); diff --git a/sandbox/allgradients.tcl b/sandbox/allgradients.tcl deleted file mode 100644 index eaab25b..0000000 --- a/sandbox/allgradients.tcl +++ /dev/null @@ -1,48 +0,0 @@ - -lappend auto_path .. -package require Tkzinc - -set defaultfont -b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1 -zinc .zinc -width 700 -height 300 -render 1 -backcolor red -pack .zinc - - -puts start -.zinc gname black|white {axial 1} -#.zinc gname {=conical 70 |white|gray20 50|white} {axial 2} -.zinc gname {=conical 70 |red|yellow 50|red} {axial 2} -.zinc gname {=axial -50 -50 50 50|black|white} {axial 3} -.zinc gname {=axial 30|black|black;0} {axial 4} -.zinc gname {=radial -50 -50 50 50|white|black} {radial 1} -.zinc gname {=radial 0 0|white;50 0 70|black 50|white 100} {radial 2} -.zinc gname {=path -14 -20|white|black;80} {path 1} -.zinc gname {=path -14 -20|white|white 30|black;80} {path 2} -puts end - -set grp [.zinc add group 1] -#.zinc add rectangle $grp {0 0 70 50} -filled 1 -fillcolor white -.zinc add rectangle $grp {0 0 200 300} -filled 1 -linewidth 1 \ - -fillcolor {axial 1} -tags rect -.zinc add text $grp -text {axial 1} -anchor center -position {35 -10} \ - -tags txt - -.zinc translate $grp 20 30 - -set i 1 -foreach s {{axial 2} {axial 3} {axial 4} {radial 1} - {radial 2} {path 1} {path 2}} { - - set grp [.zinc clone $grp] - .zinc addtag "g$grp" withtag "$grp*attrs" - .zinc itemconfigure ".$grp.txt" -text $s - .zinc itemconfigure ".$grp.rect" -fillcolor $s - incr i - - if {$i == 5} { - .zinc translate $grp [expr -3*100] 80 - set i 1 - } else { - .zinc translate $grp 100 0 - } -} - diff --git a/sandbox/alllineshapes.pl b/sandbox/alllineshapes.pl deleted file mode 100644 index c2bafc3..0000000 --- a/sandbox/alllineshapes.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -# $Id$ -# these simple samples have been developped by C. Mertz mertz@cena.fr - -use Tk; -use Tk::Zinc; -use strict; - -my $defaultfont = '-b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1'; -my $mw = MainWindow->new(); -my $zinc = $mw->Zinc(-width => 700, -height => 420, -# -render => 1, -# -backcolor => "red", # this will be transparent in the doc - )->pack(); - - -my $i = 1; -my $x = 20; -my $y = 20; -foreach my $lineshape ( qw(straight rightlightning leftlightning - rightcorner leftcorner doublerightcorner - doubleleftcorner) ) { - my $wpt = $zinc->add('waypoint', 1, 1, - -position => [$x, $y], - -labelformat => "a5a5+0+0", - -leaderanchors => '% 100x100', - -leadershape => $lineshape, - -labeldistance => 120, - ); - $zinc->itemconfigure($wpt, 0, - -text => $lineshape, - -alignment => "center", - ); - $i++; - if ($i == 4) { - $x = 20; - $y = $y + 150; - $i = 1; - } - else { - $x = $x + 210; - } -} - - - -MainLoop(); diff --git a/sandbox/allreliefs.pl b/sandbox/allreliefs.pl deleted file mode 100644 index 891a16f..0000000 --- a/sandbox/allreliefs.pl +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl -# $Id$ -# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr - -use Tk; -use Tk::Photo; -use Tk::Zinc; -use strict; - -my ($grp,, $s, $i); -my $defaultfont = '-adobe-helvetica-bold-r-normal-*-100-*-*-*-*-*-*'; -my $mw = MainWindow->new(); -my $zinc = $mw->Zinc(-width => 700, -height => 300, - -render => 1, - -backcolor => "red", # this will be transparent in the doc - )->pack(); - - -$grp = $zinc->add('group', 1); -$zinc->add('rectangle', $grp, [0, 0, 70, 50], - -filled => 1, - -fillcolor => 'tan', - -linecolor => 'tan', - -linewidth => 6, - -relief => 'raised', - -tags => ['attrs']); -$zinc->add('text', $grp, - -text => 'raised', - -anchor => 'center', - -font => $defaultfont, - -position => [35, -10], - -tags => ['attrs']); -$zinc->translate($grp, 20, 30); -$i = 1; -foreach $s (('sunken', 'ridge', 'groove', - 'roundraised', 'roundsunken', 'roundridge', 'roundgroove', - 'raisedrule', 'sunkenrule')) { - $grp = $zinc->clone($grp); - $zinc->addtag("g$grp", 'withtag', 'attrs', $grp, 0); - $zinc->itemconfigure("attrs && g$grp", - -text => $s, - -relief => $s); - $i++; - if ($i == 5) { - $zinc->translate($grp, -3*100, 80); - $i = 1; - } - else { - $zinc->translate($grp, 100, 0); - } -} - - -MainLoop(); diff --git a/sandbox/allreliefs.tcl b/sandbox/allreliefs.tcl deleted file mode 100644 index 291a02b..0000000 --- a/sandbox/allreliefs.tcl +++ /dev/null @@ -1,30 +0,0 @@ -# $Id$ -# these simple samples have been developped by C. Mertz mertz@cena.fr and N. Banoun banoun@cena.fr - -lappend auto_path [file join [file dirname [info script]] ..] -package require Tkzinc - -set defaultfont "-adobe-helvetica-bold-r-normal-*-100-*-*-*-*-*-*" -zinc .z -width 700 -height 300 -render 1 -backcolor gray -pack .z - -set grp [.z add group 1] -.z add rectangle $grp {0 0 70 50} -filled 1 -fillcolor tan -linecolor tan \ - -linewidth 6 -relief raised -tags attrs -.z add text $grp -text raised -anchor center -font $defaultfont \ - -position {35 -10} -tags texts -.z translate $grp 20 30 - -set i 1 -foreach s {sunken ridge groove roundraised roundsunken roundridge roundgroove raisedrule sunkenrule} { - set grp [.z clone $grp] - .z itemconfigure "$grp.texts" -text $s - .z itemconfigure "$grp.attrs" -relief $s - incr i - if {$i == 5} { - .z translate $grp [expr -3*100] 80 - set i 1 - } else { - .z translate $grp 100 0 - } -} diff --git a/sandbox/bouton-down.xpm b/sandbox/bouton-down.xpm deleted file mode 100644 index f3c41c2..0000000 --- a/sandbox/bouton-down.xpm +++ /dev/null @@ -1,342 +0,0 @@ -/* XPM */ -static char *on[] = { -/* width height num_colors chars_per_pixel */ -" 90 86 249 2", -/* colors */ -"b1 s mask c none", -".. c #f8fcf8", -".# c #080808", -".a c #101010", -".b c #181818", -".c c #202020", -".d c #f8f4f0", -".e c #605858", -".f c #484040", -".g c #383030", -".h c #282020", -".i c #201818", -".j c #302020", -".k c #181010", -".l c #100808", -".m c #e0ccc0", -".n c #806860", -".o c #503830", -".p c #f8e4d8", -".q c #805848", -".r c #c8bcb0", -".s c #887870", -".t c #f8dcc8", -".u c #f0d4c0", -".v c #d8bca8", -".w c #605048", -".x c #b89c88", -".y c #b09480", -".z c #403028", -".A c #785848", -".B c #f8b490", -".C c #705040", -".D c #885840", -".E c #f8ece0", -".F c #d8ccc0", -".G c #988c80", -".H c #c8ac98", -".I c #584840", -".J c #f8ccb0", -".K c #886858", -".L c #f8bc98", -".M c #382820", -".N c #a07058", -".O c #684838", -".P c #906048", -".Q c #b07050", -".R c #a06040", -".S c #f0e4d8", -".T c #d0c4b8", -".U c #b0a498", -".V c #908478", -".W c #706058", -".X c #c09c80", -".Y c #a07860", -".Z c #c89470", -".0 c #f8b488", -".1 c #b88460", -".2 c #805840", -".3 c #b07858", -".4 c #a87050", -".5 c #a06848", -".6 c #986040", -".7 c #b87048", -".8 c #b06840", -".9 c #f0dcc8", -"#. c #e8d4c0", -"## c #d0bca8", -"#a c #b09c88", -"#b c #f8d4b8", -"#c c #907868", -"#d c #e8c4a8", -"#e c #887060", -"#f c #d8b498", -"#g c #c8a488", -"#h c #705848", -"#i c #e0b490", -"#j c #b08c70", -"#k c #685040", -"#l c #c89c78", -"#m c #f8bc90", -"#n c #906850", -"#o c #a07050", -"#p c #b87850", -"#q c #b07048", -"#r c #a86840", -"#s c #f8e4d0", -"#t c #e0ccb8", -"#u c #d8c4b0", -"#v c #c0ac98", -"#w c #f8dcc0", -"#x c #a08c78", -"#y c #d8bca0", -"#z c #988470", -"#A c #f8cca8", -"#B c #786050", -"#C c #987860", -"#D c #d8ac88", -"#E c #d0a480", -"#F c #604838", -"#G c #b08460", -"#H c #584030", -"#I c #785840", -"#J c #d09c70", -"#K c #c89468", -"#L c #c08c60", -"#M c #b07850", -"#N c #906040", -"#O c #a87048", -"#P c #a06840", -"#Q c #f0d4b8", -"#R c #e0c4a8", -"#S c #d0b498", -"#T c #c8ac90", -"#U c #c0a488", -"#V c #b09478", -"#W c #e0bc98", -"#X c #a08468", -"#Y c #c09c78", -"#Z c #f8c498", -"#0 c #907058", -"#1 c #886850", -"#2 c #806048", -"#3 c #f8bc88", -"#4 c #a07858", -"#5 c #b88458", -"#6 c #b07040", -"#7 c #f8d4b0", -"#8 c #e8c4a0", -"#9 c #d8b490", -"a. c #d0ac88", -"a# c #f8cca0", -"aa c #c8a480", -"ab c #b89470", -"ac c #b08c68", -"ad c #f8c490", -"ae c #d0a478", -"af c #a88460", -"ag c #c89c70", -"ah c #c09468", -"ai c #987050", -"aj c #b88c60", -"ak c #f8bc80", -"al c #906848", -"am c #b08458", -"an c #a87850", -"ao c #886040", -"ap c #a07048", -"aq c #e0dcd0", -"ar c #a09c90", -"as c #807870", -"at c #e8dcc8", -"au c #e0d4c0", -"av c #c8bca8", -"aw c #c0b4a0", -"ax c #605850", -"ay c #a89c88", -"az c #f0dcc0", -"aA c #a09480", -"aB c #887868", -"aC c #403830", -"aD c #b09c80", -"aE c #685848", -"aF c #907860", -"aG c #605040", -"aH c #705840", -"aI c #483828", -"aJ c #f8f4e8", -"aK c #b8b4a8", -"aL c #b0aca0", -"aM c #989488", -"aN c #787068", -"aO c #f8ecd8", -"aP c #f0e4d0", -"aQ c #706860", -"aR c #d8ccb8", -"aS c #d0c4b0", -"aT c #b8ac98", -"aU c #585048", -"aV c #b0a490", -"aW c #504840", -"aX c #f8e4c8", -"aY c #988c78", -"aZ c #e0ccb0", -"a0 c #d8c4a8", -"a1 c #908470", -"a2 c #c8b498", -"a3 c #c0ac90", -"a4 c #b8a488", -"a5 c #f8dcb8", -"a6 c #786858", -"a7 c #e8cca8", -"a8 c #706050", -"a9 c #a89478", -"b. c #e0c4a0", -"b# c #d8bc98", -"ba c #a08c70", -"bb c #d0b490", -"bc c #988468", -"bd c #c8ac88", -"be c #302820", -"bf c #c0a480", -"bg c #b89c78", -"bh c #887058", -"bi c #e0bc90", -"bj c #584838", -"bk c #b09470", -"bl c #806850", -"bm c #a88c68", -"bn c #f8cc98", -"bo c #786048", -"bp c #504030", -"bq c #c8a478", -"br c #987858", -"bs c #b89468", -"bt c #886848", -"bu c #c8c4b8", -"bv c #888478", -"bw c #686058", -"bx c #484038", -"by c #282018", -"bz c #c8bca0", -"bA c #a89c80", -"bB c #e8d4b0", -"bC c #d8c4a0", -"bD c #c8b490", -"bE c #b8a480", -"bF c #a08c68", -"bG c #e0d4b8", -"bH c #f0e4c8", -"bI c #d8ccb0", -"bJ c #706048", -"bK c #e0dcc8", -"bL c #c0bca8", -"bM c #807868", -"bN c #f8f4e0", -"bO c #d8d4c0", -"bP c #787060", -"bQ c #f0ecd8", -"bR c #e8e4d0", -"bS c #c8c4b0", -"bT c #b0ac98", -"bU c #f8fcf0", -"bV c #f8fce8", -"bW c #505048", -"bX c #484840", -"bY c #303028", -"bZ c #282820", -"b0 c #181810", -"b2 c #000000", -/* pixels */ -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1.0a#.J#waO.E.................E.p#w#ba#adb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad#A.taJ...d....#.bG#D#D#D#D#D#D#D#9#.bG........aJ#s#7bnb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#baO......#t#D#L.7.8.8.8.8.8#r.8.8.8.8.8.8.8.8.7#L#DbG......#s#Ab1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a##s.d..aJb.#L.8.8#r#r#r#r#r#r#r.8#r.8#r.8#r#6.8#6.8#6#6.8.8.8#Kb.aJ...d#w#3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m#sbU..bG#J#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#r#O#r#O#r#O.8#q.8.8.8#J#.....#s#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m.t....b..7.8#r#r#r#r.R.R#P.R.R#P.R#P#P#P#P.5#P#P.5#P.5#P.5#r#O#r#O#O#O#O#q#q#q#pb.....aX#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a5.d..b..7#r#r#r.R.R.R.R.R#P.6.6#P.6.6.6.P.R.6.6al#P.5.6.5#Pal.5al#P.5#P#r#O#O#O#6#q#q#p#d..aJ#bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aJ...9#5#r#r#r.R.R#P.R.6.6.6.6.6#N#N#N.P#N#N.Pal.6.6.P#Nal.P.P.Pal.5.Pal.5al.5#O#O#O#q#q#q#q#KaP...Ea#b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#7.daJae#r#r#r.R.R#P.6.6.6.6#N#N#Naoaoaoaoaobtaoaoaoaobtbt.Pbt.P.P.P.P.Pal.P.Palalalal.5ap#O#q#q#q#q#DaJ.d#wb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#3.t...9#p#r#r#r.R#P.6.6.6#N#Naoaoao.2.Dbt.q.2.q.2.2.q.q.q.q.2.2#2.2#2#2#2.qbtbtal.Palalalai#o#o#o.4.Q#p#M#LaP..#sa#b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ak.E..b.#r#r.R.R.R.6.6.6#Naoao.D.D.2.q.q#I#I#I#F.z.M.ib0.#.#.#.#.#.#.#b0.i.MaI#F.q.q#2bt.P.Palalal.5ap#O.4#M#M#p#d...E.Bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aJ.d.Z#r#r.R#P.R.6.6#Nao.D.D.2.2#2.2#I.O.zby.#.#.#.#aC.gaQaQ.WaQbw.WaQ.gaC.#.#.#.#byaC.C#2#1bt#n#naiai#o#o.4#M#M#M#E..aJ#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1a#.daJ.Z#r#r.R#P.6.6#N#N.Dao.2.2.q#I#IaI.i.#.#.caUbv.UaRaRaR#uaSaS#uaSaS##aS#####a.saW.c.#.#.i.o.q.qbt#nalai#o#o.4#M#M#p#EaJ.da#b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1a#.daJ#p#r#P.R.R.6.6#Naoao.2.2#2#IaH.M.a.#b0.e.UaRaRaRaRaR.TaR.TaS#uaSaS#uaS##aS###########aax.a.#.a.z.A#1bt#n#nai#o#oan#M#MahaJ.d#Zb1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1ad.E..#p#r.R#P.R.6#N#Nao.D.2.q.2#I.z.l.#bYbv.FaRaRaRaRaRaRaRaR#u.TaR.TaRaSaSaSaS##aS########bzbzbzaBbe.#.laI#2#1#n#nai#o.4an.3#pah...E#3b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1.E...Z#r#P#r.R.6#N#N.D.2.2.2#I#Hb0.#.caV.FaRaRaR.F.TaR.FaR.TaR.FaR.TaR.TaR#uaSbIaSaSaS########bzbz#Sbz#x.i.#b0#F#1#n#naiai.4an.3#p#E...Eb1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1.t..ae#r#r#r.6.6#Nao.D#2.2.A#Ibe.#.aas.F.TaR.F.T.FaR.FaR.F.FaR.FaR.FaRaRaRaRaRaR.TbIaS##aS##########bz#Sbz#SbP.k.#.M#2#1#nai#o#4anam#p#i..aXb1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1#A..b.#r#r#P.6.6#Naoao.2.2#I.Ob0.#.faSaRaRaR.F.F.FbO.F.FbO.FbO.FbKbOauauauau.m.maR#taR#ubIaSaS######bz##bz#Sa2a2a3bx.#.b#h#1#nai#o#4.3am#5bB...Jb1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1a#.d.9#r#r#P.R.6#N#N.D#2.2.A#F.#.#as.F.F.F.F.F.F.FbO.FbObObKbKbKaubRbRbRatbKatbKat#.bK#.aRaRaRbIaS######bzbz#Sbz#Sa2.Ha6.#.l#k#n#0br#o#4.3am#L.S.dadb1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1aO..#5#r#r.R.6#N#Nbt.2.2#IaI.l.baLaRaR.F.F.FbO.FbObObObKbKbRbRbRbR.p.S.S.S.p.S#saPaPaPaP#.auau#tbIbI##a0####bz#Sbz#Sa2.Ha9.a.lbx#n#0br#4#4.3#5ah..aOb1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1#7..#D#r#r#Pal.6.Pao.2.2.qaC.#.cbTaR.F.FaR.F.FbO.FbKbKbKbRbR.E.E.E.SaO.EaOaObQaObQ.p.S#saPaPbH.9bH#tbGbI#ua0#####Sa2a2a2a2a2a9be.#bp#nbr.N#4am.1.1b....Jb1b1b1b1b1b1b1", -"b1b1b1b1b1b1ad.d.S#6#r#P#P.6#Nao.q.2bo#H.#bYbSaR.F.F.F.FbObObObK.SbR.S.E.E.E.E.E.E.E.EbQ.EaOaO.SbQ#saPaPaPaPbH.9.9.9#taZ#ta0bzbzbza2#SbD.H#T#UbZ.#aG#0br.Nafam.1#L.EaJbnb1b1b1b1b1b1", -"b1b1b1b1b1b1#w..ah#r#r#P.6.P#Nbt.2#2#F.#.baSaR.F.FaRbObObOaqaq.S.E.E.E.E.E.EbN.EbN.E.E.E.EbQ.EbQaObQ.paP#saPaP.9.9#.az#.#.aZa0.vbz#Sa2a2a2#Ta3a4.a.l#k#0br#4af.1aj#E..#wb1b1b1b1b1b1", -"b1b1b1b1b1ad.dbG.8#r.5.R.P#Nao.2.q#k.a.bbT.FaR.F.F.FbO.FbKbRbR.E.E.EbNaJbNbNaJbNaJbNbN.EbN.EaOaO.SaO.S#saPaPaP.9bH.9#.az#Q#.aZaZ#ybz#S#S#TbD#Tbda9.a.kblbrbr#4#Gaj#LaP.d#mb1b1b1b1b1", -"b1b1b1b1b1#b..#L#r#r#P.6.Pao.q#2#I.i.#aMaR.T.F.F.FbObKaq.S.E.EaJbNaJaJ.EaJaJaJaJaJaJaJbN.E.E.E.E.EbQaObQaP#saPaPbH.9bHaz#.#QbGbG#R.vbza2a2.H#T#TbdaF.#.h.Kbr.Yaf#Gaj#l..a5b1b1b1b1b1", -"b1b1b1b1b1aJ.9.8#r.5.5al#Nbt#2.2.z.#.eaRaR.FbO.FbObKbRbR.E.EaJbNaJaJaJaJaJaJaJaJaJaJ.EaJbNbN.E.EbQaO.pbQ.p.SaPaP.9bH.9#.az#.#Q#QbGa0#R#S#SbD#T#T#Ua3aG.#aCbrbraf#Gaj#L.SaJb1b1b1b1b1", -"b1b1b1b1.J..#J#r#O#P.6#Nbt.q.2#k.lbYaR.FaR.F.FbObKbR.E.E.EaJ.EaJaJaJaJaJaJaJaJaJaJaJaJaJaJ.EbN.E.E.EbQaO.S#saP#sbH.9.9az#.azbG#QbG.JbB#y#Sa2#Ta3#Tbd#U.h.l#Bbr.Yafajah#W..#Ab1b1b1b1", -"b1b1b1b1#saJ.8#O#r.5al.Pbt.q.Aby.#bTaRaR.F.F.FbObK.S.E.EaJbNaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJaJ.EbN.EbQ.E.SaOaP.paPaP.9bHazaz#.azbG#QbBbB.vbz#SbD#T#Ubd#gba.#.M#0.Yaf#GbsahaJaOb1b1b1b1", -"b1b1b1#m..#R#q#r.5.6.P.Pbt#2bj.#aUaR.F.T.F.F.FbKbR.E.EaJ.EaJaJaJaJaJ.daJbU.d.d.dbU.daJaJaJbNaJ.E.E.EaOaO.SaOaPaPaPbH.9.9#.az.u#Q#tbBbBa7#y#S#T#T#T#U#Ubdbx.##k#C.Yaf.1ah.u..adb1b1b1", -"b1b1b1#b..ah#r#O.5al.Pbt.q.A.i.a.raR.TaRbO.FbKbR.E.E.EbNaJaJaJaJaJbU.dbV.d.dbV.dbV.dbVaJaJaJaJbNbN.E.EbQaO.S.paPaPaPbH.9az#.azbG#QbBbB#dbB#y#SbD#T#Ubd#Ubg.k.c#0.Ybmacaha....Jb1b1b1", -"b1b1b1aOaJ.8#q#r.5al.Pbt.q#F.#aQaRaRaR.F.FbObKbR.E.EbNaJaJaJaJaJbUbUbU.dbUbV.dbU.dbUaJ.daJaJ.EaJ.E.EbQ.E.SaOaPaP#s.9.9atazaz#.#QbG#tbB#dbB#y#S#Tbd#UbdbfbfaE.#bo.YbmacbsahaJaXb1b1b1", -"b1b1b1.dbB.8#O.5.5al.Pbt.Abe.#aw.TaR.F.TbObKbR.p.E.EbN.EaJaJaJ.dbUbU.dbV.d..bUbU..bUaJbUaJaJaJaJbN.E.E.EbQbQ.paPaPaPbH.9#.az#.#Q#QbBbB#d#R#Rb#bD#Tbd#U#Ubfba.#bY#C.Yacbsab.9.db1b1b1", -"b1b1a#..#D#q#O#O.5.Pbt#2#I.laU.TaR.TaR.F.F.mbR.E.E.EaJaJaJaJaJaJ.dbUbU.dbU..bU....bU....aJaJaJaJ.EbN.E.E.paO.S#saPaP.9bH.9azaz#.#Q#t#tbBa7#R#ybb#T#Ubd#Ubfaabx.lbh#Xacahab#d..#Ab1b1", -"b1b1#A..#L#q#O#Oalal.P#2aC.#.GaR.TaR.FbOaubR.EbQ.EbN.EbNaJaJaJ.dbV.d..bUbU........bU..bU.daJaJaJbN.E.E.EaObQ.paPaPaPbH.9az#.#.#QbG.JbB#dbB#db.#SbD#Tbdbfbfbfbh.#.I#Cbmababa...#7b1b1", -"b1b1#b..#6#q#O.5alalbt.qby.baR.TaRaR.TbObObR.S.E.EbNaJaJaJaJaJaJ.dbUbUbU..............bUbUaJaJaJ.EbN.EbQ.EbQ.S#saPaP.9.9atazazbG#QbGbBbB#d#Rb.b#bbbd#U#Ubf.Xbf.abe#Xbmababae..#bb1b1", -"b1b1.p.S.7#q#O.4ai.P#1#2.#aUaSaRaRaR.FbKbR.p.EaObN.EbNaJaJaJ.daJbUbU....bU............bUbUbUaJaJaJ.E.E.EbQ.pbQ.S#saP.9bHaz#.az#QbG.JbB#dbB#db.b.#S#Tbd#Ubfbf#Ybp.lbcbmababagaJaOb1b1", -"b1b1aO#..7.Q.4.5al#nbt#F.#.saSaR.TaR.F.mbRaObQ.E.E.EaJaJaJaJaJbV.d.......................daJaJaJ.EbNbQ.EaObQ#saPaPaP.9.9ataz#..ubG#tbBaZa7#Rb.b.#9#Tbdbfbf.Xbf#B.#blbaab#Y#laP.Eb1b1", -"b1b1..#d#p#q.4ap#o.PbtaC.#awaS#u.TaR.FauatbQ.EaO.EbN.EaJaJaJaJ.dbV.dbU..................bUaJaJaJbNbN.E.EbQaO.S.paP.9bH.9az#.azbG#QbBbB#da7#db.b.#S#Tbd#Ubfbf#Yba.#bjbmab#Y#l.9.db1b1", -"b1b1..#9#p#M.4#oai#n#2.j.##uaSaR.TaRaRbObR.SaO.EbN.EaJbNaJaJaJbU.dbU....................bUbUaJaJ.E.E.E.EbQ.pbQaPaP.9.9ataz#.azbG#QbBbB#d#R#Rb.b.#9#Tbdbfbf.X#Y#Y.#bYbabg#YbqbG..b1b1", -"b1b1..#i#p#M.4#oai#n#2by.gaSaS#u.TaRauat.S.pbQaO.EbN.EaJaJaJaJaJbU....................bU.daJaJaJbNbN.EbQaO.S.paP#saPbHazat#Q.u#Q#tbB#dbBa7#db.b.#Wbbbd#gbfbf#Ybf.M.hbaab#Yaa#Q..b1b1", -"b1b1..b##p#M#M.4al#nbl.kbxaSaSaSaRaR.FataOaOaObQ.E.EbNaJaJaJaJaJaJbUbVbU................bU.daJ.EaJ.E.E.EaObQ#saPaP.9.9atazazbG#Q#tbBbB#R#d#R#Wb.#Wbbbdbf.Xbf#Y#YaC.kbabg#Yaa#Q..b1b1", -"b1b1..#W#p#pan#oai#nbt.#.WaS#u#u.TaRauataP.SaO.E.E.E.E.EaJaJaJaJaJaJ.dbUbUbU....bUbUbUbUbUaJaJbN.E.EbQaObQ.paPaPaP.9bH.9#.azbG#Q#tbB#dbBa7b.b.b.#Wbbbd#U#Ybf#Y#Y#k.#babgbf#EbG..b1b1", -"b1b1..#W#p#M#M#oai#nbl.#aQaSaSaSbIaR.Fat.paO.SaObQ.EbNbN.EaJaJaJaJaJaJ.daJbUbUaJ.dbUbU.daJaJaJ.EbN.EaObQ.pbQ#saP.9bH.9az#.az#QbG.JbB#d#R#Rb.b.#W#Wbb#gbfbf#Ybg#YaG.#babg.X#Eaz..b1b1", -"b1b1..#W#p#Man.4ai#n#1b2.WaS##aSaSaR#tataP.SaOaOaO.EbQ.EbN.EaJaJaJaJaJaJaJaJ.daJaJaJaJaJaJbNbN.E.EbQ.EbQ.paPaP#saP.9.9azaz#.bG#QbBbBbB#d#db.b.#W#Wbbbdbfbf#Ybf#YaG.#a9bEaaaa.u..b1b1", -"b1b1.daZ#p#5.3#o#o#nbl.#.W##aSaSaS#u.FataP#saP.SbQbQ.E.E.EbN.E.EbNaJaJaJaJaJaJaJaJaJaJaJaJaJ.E.E.EbQaOaObQ#saP.9bHazataz#.#Q#Q#tbBaZa7#R#R#Wb.#W#Wbb#gbfbf#Ybgbf#k.#babEbfa..9.db1b1", -"b1b1.p.9#5#pan.4br#n#1.#.WaS##aSaSaRaR#.aP.SaPaO.paOaO.EbQ.E.EbN.E.EaJbNaJaJaJaJbNbN.EbN.E.E.E.EbQaObQ.S#saPaPaP.9.9.9az#.#QbGbBbB#da7#db.b.b.b##Wa.aabf.X#Y#Y#YaEb2a9.X#Ua..E.pb1b1", -"b1b1aO.E#p#5.3#oai#n#1.#.W##aS##aS#uaRataP#saP.SaObQ.pbQ.EbQ.E.E.EbN.E.E.EbN.EbN.EaJ.E.E.EbQaObQaObQ.paPaPaPaP.9.9ataz#.bGaz#t.JaZa7#R#Rb.#W#W#W#9bbaabf#Ybg#Y#YaG.#a9bE#ga.aJ.pb1b1", -"b1b1#b..#p#5#4#4.Nbr#1.abx####aS##aSaRau.9aP#saP.S.pbQbQ.paObQ.E.E.EbN.EbN.E.E.E.E.EbN.E.EaO.EbQ.paJbQ#s#saPbHbH.9az#.az#QbGbBbB#dbB#db.b.b.#W#W#9a.aabf#Ybfbgbf.z.ba9bE#ga...#wb1b1", -"b1b1#7..#l#p#5an#o#0#1by.g######aS#ubIau.9aP#saP#saP.S.pbQbQaObQbQ.EbQ.E.E.E.EbN.E.EbQbQaObQ.SaObQaPaOaPbHaPbH.9atazazbG#..J#tbBa7#R#db.b.#Wb##W#9a.aabfbg#Y#YaabY.ha9#Ubdbz..#Ab1b1", -"b1b1ad..#i#5am#4#4br.Kbe.#######aS##aSaRau.9aPaPaP#sbQ#s.S.pbQ.SaOaObQ.EbQaObQbQbQbQaOaOaO.SaO.paPaO#saP#sbH.9bHazaz#.#Q#Q#tbBa7a7#db.b.#W#W#W#9bbaabf#Y#Y#Y#Ybf.#aCbAa4bdaz...Lb1b1", -"b1b1b1.d#.#5.3#4#4br#1aC.#a3#########u#ubG.9.9.9aPaPaPaPaOaP.SaObQ.SaOaOaObQ.SaOaO.pbQ.S.SaOaPaP#saPaPaXbHbH.9az#.#.#QbGbGbBbB#d#R#Rb.b.#W#W#W#9a.aabf#Ybg#Ybf#X.#aU.y#U#T.p.db1b1b1", -"b1b1b1#saJ#5am.3#4br#0#h.#bM########aSbI#t.9bH.9.9aP#saPaP#saP#s.S.p.S.S.S.pbQ.S.SaO.p#sbQaP#saPaPbHaPbHbHbHazazaz#.#QbG.JbB#dbB#R#8b.#W#W#W#9#Wa.aa#Ybf#Ybgbf#B.##e#a#Ubb.d#sb1b1b1", -"b1b1b1.J..aa#5#G#4br#0.K.laWbz#########ubG#..9.9bH.9.9aPaPaPaPaP#saPaP#saOaP.paP.paPaPaP#saPaPbHaPbHbHbH.9azazazbGazbB#tbBa7aZ#db.b.b.#W#Wb##9#9#Ebf#Y#Y#Ybfaabx.aa9a4#T##...Jb1b1b1", -"b1b1b1.0..bB#5#G#4#4#0#1bZb0bzbz#########ubGaz#..9.9bH.9.9aP#saPaPaP#saPaPaPaPaPaPaP#saPaPaPbHaP.9.9.9.9azazaz#..ubB#tbB#dbB#R#db.b.#W#W#W#9bia.aa#Y#YbE#Y#Ybf.kbYbAa4#T.p...0b1b1b1", -"b1b1b1b1.paJ.1#G#G#4br.Kbx.#a1bz##bC####bI#taz.9azat.9bH.9.9.9.9aPaPaP#saPaP#saPaPaP.9bH.9.9.9.9.9.9#.az#.#.#.#QbBbG.JbBbB#d#Rb.b.b.#Wb##9#W#9#Ebf#Ybf#Ybfbfbh.#ax#aa3#TbU#sb1b1b1b1", -"b1b1b1b1#A..#i.1af#4#Cbrbl.l.Ibzbz##bC#####uaZ#.azaz#.azatbHbH.9.9.9.9.9.9.9.9.9.9bH.9.9bH.9at.9az#.azazazbGazbG#QbBbB#d#d#R#8b.#W#W#W#W#9#9a.aa#Y#Y#Y#YbfbfaC.aaY.x#v.9..#Ab1b1b1b1", -"b1b1b1b1b1.E.Saj#Gaf#4#0.KbY.#.x#Sbzav#######taz#.#.az.9az#.azat.9.9bHbH.9bH.9bH.9.9.9at.9bHaz#.azaz#.azbG#Q#tbBbB#dbBa7#Rb.b.b.b.b##W#9bi#D#Ebfbfbg#Y#Ybfbk.#aCbAaV#TaJaJb1b1b1b1b1", -"b1b1b1b1b1#b..bq#G#G.Y#C#0aE.#a8bz#SbzbzbC##a0aZbGaz#.#.#.azatazazazat.9#.az#.az#.azataz#.az#.azaz#.azbG#QbG#QbB#dbBa7#R#db.b.#W#W#W#9#9#9a.bf#Y#Y#Y#YbfaaaE.#aBaVa3##..#bb1b1b1b1b1", -"b1b1b1b1b1.0.daP.1#Gafbrbr.Kby.a#vbz#Sbzbz##a0aZ.u#Q#.azaz#.az#.azatazazazataz#.az#.az#.azaz#.#.bG#QbG#QbB#QbB#dbB#d#R#Rb.b.#W#W#W#9#W#9#D#Ebf#Y#Ybgbfbfbg.abZayaVa2aJ.d#3b1b1b1b1b1", -"b1b1b1b1b1b1#b..#g#Gaf.Y#CaFaE.#aW#Sbz#S#Sbz####aZbG#QbG#Q#.az#.az.u#.#.az#.az#.az#.azbGazbG#Q#Q#QbGbBbBbB#dbB#d#R#Ra7#Wb.#W#W#W#9#9#9#Da.bf#Y#Ybf#Ybfaabx.#aNaV.H##..#wb1b1b1b1b1b1", -"b1b1b1b1b1b1.0.d.Ebs#Gaf.Y#Cbhbe.#bA#Sbzbz#Sbzbz.vaZ#QbG#QbG#QbG#QbGaz#Q#.#Q#.#QbG#QbG#QbG#QbGbGbB#QbBbB#dbBa7#Ra7b.b.b.#W#W#Wb##9bi#Da.bf#Y#Y#Y#Ybfbfbm.#.gaya3aw.d.d.Bb1b1b1b1b1b1", -"b1b1b1b1b1b1b1.J..#dbsafaf#CaF#B.a.ha2.H#Sbz#Sbz#ya0bB#QbG#QbG#QbG.u#QbG#QbG#QbG#QbG#QbG#QbBbB.JbBbB#d#dbB#R#R#db.b.b.#W#W#W#9#9bi#D#9#Eaa#Y#Y#Ybfbfaa.h.a.VaVaw.p..#Ab1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1aO..#Yacbm.Y#CaFbx.#.wa2a2a2a2#Sbz#ya0#RbBbBbB#t#QbGbG#QbG#QbG#Q#tbBbBbBbB#tbBaZ#d#dbB#R#R#db.b.b.b.#W#Wb#b#bi#9#Da.aabf#Y#Ybfbfbfaabj.#axaV#vav..#sb1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1#m.d.Sbsacbm.Y#CaF.h.##ca2a2a2a2#Sbzbz#y.vbB.JbBbB.JbBbBbBbBbBbB.JbBbB#dbB#d#dbBa7#R#Ra7b.b.b.b.#W#W#W#W#9bi#9#Da.bfbq#Y#Ybgbf#Ybfbh.#.gayaTbLaJ.d.Lb1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1#7...9bsbmbmbcbcbh.k.aa9.Ha2.Ha2#S#S#Sbz#ya0#dbBaZ#dbB#dbB#dbBaZ#d#dbB#dbB#d#R#R#d#db.b.b.#W#W#W#Wb##9#9#9a.a.bf#Ybf#Y#Y#Ybfaaba.a.baMaTaw.E...Jb1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1aX..#dbsbm#X#X#ca8.a.a#UbD.HbD.Ha2a2#Sbz#S.va7#dbB#dbBaZ#dbB#da7aZ#d#R#R#R#R#8b.b.b.b.#W#W#W#Wb##9bi#9a.aabf#Y#Y#Y#Ybfbfaabg.a.a.saTaw.p...tb1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1.E..a3#jac#X#XbcaG.#bZ#U#T#T.HbD.Ha2#S#S#S#y#y#y#R#d#d#R#R#R#R#d#Ra7#8b.b.b.b.#W#W#W#W#Wb##9bia.a.a.aa#Y#Y#Y#Ybgbfbfbfbg.h.#bMbTawbu...Eb1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1.L.E.d.Xabbabmbcbc.I.#.h#x#T#T#T#T#T#TbDa2#S#S#S#y#yb.a7#8#Rb.b.b.#Wb.b.#W#W#W#Wb##Wb##9bibba.aabfbf#Y#Ybgbf#Ybf#YbfbF.i.#bwaLaw.r.d.E.0b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1.0.d.dbfab#jba#Xbc.I.l.aba#U#T#T#Ta3#T#T#TbD#TbDbDb##S#S#fb.#Wb.b.#W#Wb.#W#W#W#Wa.bbbba.aaaabfbf#Ybgbf#Y#Ybfbfbfbm.a.abwbTaw.rbU.d.Lb1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1bn.d.d.Hbkbkba#X#za6.a.#a8bda3#U#Tbda3#Ta3#T#T#TbbbDbbbD#9#Sbbbbbbbbbbbbbbbbbbbdbdaaaabfbf#Y#Y#Y#Y#Y#YbfbfaabJ.#.abvaLbLbu.d.d#mb1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1#AaJ...H#Vbkbaba#z.n.i.#aCbEbd#U#Ubd#Ubd#Ubd#U#Tbd#Tbd#TbDbb#Tbd#Tbdbd#gbdaabf.Xbfbf#Y#Y#Ybg#Y#YbfbfbfbgbY.#.c.Gawawbu..aJ#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#ZbN..bHbg#V#Vbabaa1aC.#.aa8bd#Ubda3bda3bdbd#U#U#U#Ubd#g#Uaa#gbf#gbfbfbfbf.X#Y#Y#Ybg#Y#Ybf#Ybfbf#YbJ.a.#.f.UaKbLaJ...p.0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#m.t...Ebf#V#Va9ba#x.W.i.#.i#c#Ubf#Ubf#U#U#U#U#Ubf#Ubfbf#Ubfbfbf.Xbf.Xbf#Y#Ybgbf#Ybfbg#Ybfbf#C.i.#.hasawaK.r.d...t.0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#A...d.ubEaDa9a9#xaY.I.l.#bea6bfbfbfbfbfbfbfbfbfbfbfbfbfbf.Xbf#Y#Y#Y#Ybgbf#Ybg#Ybfbfbl.h.#.a.e.UaKbLaJbUbU#7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#Z.E..bQa3bEaDaDbAa9a1bxb0.#.a.I#Xbfbfbfbfbf.Xbf.X#Y.X#Y#Y#Y#Ybg#Ybg#Y#Ybfbf#Xbj.a.#.bbWaraKbLbu.d...E#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#w.d..aPa3bEaDaDbA#xaA.wbZ.#.#.ibp#B#X#Y#Y#Y#Ybg#Ybg#Ybg#Y#Ybf#Ybcblbp.b.#.#bYbwaLaLbL.r.d..aJ#bb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#Z#s.....pa3.xa4#a#aayaAa1aUbY.#.#.#.#bebYaGaGaGaGaG#kaGbYbe.#.#.#.#.gaxaMaLaKbLbuaJ....aX#mb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a#aX.....Eaz#UaVa4#a#aayayayaNax.fbY.h.#.#.#.#.#.#.#.hbYbX.easaLaLaLbL.rbN.d....#sadb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad.t.d...daOava3a3aTaTaTaVaVaV.UaV.UbTbTbTbTaLaLaLaLaLaw.r.r.rbu.dbU...daX#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#7#s......aJ.pavbzbzbzawbzavavavav.ravavav.raS.TbuaJ.d......#s#7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1ad#A.t.E........aJaJaO.E.E.E.EaJ.EaJ.d.d........aJ#s#A#Zb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1#3a##b#w.p.E...........d.....EaO#w#wa##3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -"b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1", -}; diff --git a/sandbox/bouton.xpm b/sandbox/bouton.xpm deleted file mode 100644 index ea8065f..0000000 --- a/sandbox/bouton.xpm +++ /dev/null @@ -1,329 +0,0 @@ -/* XPM */ -static char *on[] = { -/* width height num_colors chars_per_pixel */ -" 90 86 236 2", -/* colors */ -".b s mask c none", -".. c #f8fcf8", -".# c #f8fcf0", -".a c #f8fce8", -".c c #f8f4f0", -".d c #f8f4e8", -".e c #f8f4e0", -".f c #f8ece0", -".g c #f8ecd8", -".h c #f8ecd0", -".i c #f8e4d8", -".j c #f8e4d0", -".k c #f8e4c8", -".l c #f8dcc8", -".m c #f8dcc0", -".n c #f8dcb8", -".o c #f8d4b0", -".p c #f8ccb0", -".q c #f8cca8", -".r c #f8cca0", -".s c #f8cc98", -".t c #f8c498", -".u c #f8c490", -".v c #f8bc98", -".w c #f8bc90", -".x c #f8bc88", -".y c #f8bc80", -".z c #f8b490", -".A c #f8b488", -".B c #f0ecd8", -".C c #f0e4d8", -".D c #f0e4d0", -".E c #f0e4c8", -".F c #f0dcc8", -".G c #f0dcc0", -".H c #f0d4b8", -".I c #f0d4b0", -".J c #f0ccb0", -".K c #f0cca8", -".L c #e8e4d0", -".M c #e8dcc8", -".N c #e8d4b8", -".O c #e8d4b0", -".P c #e8ccb8", -".Q c #e8ccb0", -".R c #e8cca8", -".S c #e8c4a8", -".T c #e8c4a0", -".U c #e8c498", -".V c #e8bc98", -".W c #e0c4a8", -".X c #e0c4a0", -".Y c #e0c498", -".Z c #e0bc98", -".0 c #e0bc90", -".1 c #e0b488", -".2 c #e0b480", -".3 c #e0ac88", -".4 c #e0ac80", -".5 c #d8d4c0", -".6 c #d8bca0", -".7 c #d8bc98", -".8 c #d8b498", -".9 c #d8b490", -"#. c #d8b488", -"## c #d8ac88", -"#a c #d8ac80", -"#b c #d8ac78", -"#c c #d8a478", -"#d c #d8a470", -"#e c #d89c70", -"#f c #d0c4b0", -"#g c #d0bca8", -"#h c #d0bca0", -"#i c #d0b498", -"#j c #d0b490", -"#k c #d0ac88", -"#l c #d0a480", -"#m c #d0a478", -"#n c #d0a470", -"#o c #d09c70", -"#p c #d09c68", -"#q c #d09468", -"#r c #d09460", -"#s c #c8bcb0", -"#t c #c8bca8", -"#u c #c8b498", -"#v c #c8a480", -"#w c #c89c70", -"#x c #c89468", -"#y c #c88c60", -"#z c #c88c58", -"#A c #c88458", -"#B c #c88450", -"#C c #c0ac98", -"#D c #c0ac90", -"#E c #c0a478", -"#F c #c09c78", -"#G c #c08c68", -"#H c #c08c60", -"#I c #c08458", -"#J c #c08450", -"#K c #c07850", -"#L c #c07848", -"#M c #c07048", -"#N c #b8b4a0", -"#O c #b8aca0", -"#P c #b8a490", -"#Q c #b8a488", -"#R c #b8a480", -"#S c #b89c80", -"#T c #b89470", -"#U c #b88c60", -"#V c #b87848", -"#W c #b87048", -"#X c #b87040", -"#Y c #b86840", -"#Z c #b09c80", -"#0 c #b09470", -"#1 c #b08c68", -"#2 c #b07850", -"#3 c #b06840", -"#4 c #a8a490", -"#5 c #a88c68", -"#6 c #a87858", -"#7 c #a87050", -"#8 c #a86840", -"#9 c #a08c70", -"a. c #a07050", -"a# c #a07048", -"aa c #a06038", -"ab c #989488", -"ac c #989480", -"ad c #988c80", -"ae c #988c78", -"af c #988460", -"ag c #987860", -"ah c #987858", -"ai c #986848", -"aj c #986038", -"ak c #985838", -"al c #908470", -"am c #908468", -"an c #906040", -"ao c #906038", -"ap c #905838", -"aq c #888478", -"ar c #887870", -"as c #887868", -"at c #887060", -"au c #887058", -"av c #886850", -"aw c #886848", -"ax c #885030", -"ay c #807060", -"az c #807058", -"aA c #806858", -"aB c #806850", -"aC c #805838", -"aD c #787070", -"aE c #787068", -"aF c #787060", -"aG c #786860", -"aH c #786048", -"aI c #785840", -"aJ c #785030", -"aK c #784830", -"aL c #706860", -"aM c #706058", -"aN c #706050", -"aO c #705848", -"aP c #705840", -"aQ c #705038", -"aR c #704830", -"aS c #704828", -"aT c #686060", -"aU c #686058", -"aV c #686050", -"aW c #685850", -"aX c #685848", -"aY c #685840", -"aZ c #684028", -"a0 c #605048", -"a1 c #605040", -"a2 c #604838", -"a3 c #604028", -"a4 c #585048", -"a5 c #584840", -"a6 c #584838", -"a7 c #583820", -"a8 c #504840", -"a9 c #504038", -"b. c #504030", -"b# c #503828", -"ba c #503020", -"bb c #503018", -"bc c #484840", -"bd c #484038", -"be c #484030", -"bf c #483828", -"bg c #483020", -"bh c #403838", -"bi c #403830", -"bj c #403828", -"bk c #403028", -"bl c #403020", -"bm c #383830", -"bn c #383030", -"bo c #383028", -"bp c #382820", -"bq c #382018", -"br c #382010", -"bs c #302828", -"bt c #302820", -"bu c #302818", -"bv c #302018", -"bw c #302010", -"bx c #301810", -"by c #282828", -"bz c #282820", -"bA c #282020", -"bB c #282018", -"bC c #281810", -"bD c #201818", -"bE c #201810", -"bF c #201008", -"bG c #181818", -"bH c #181810", -"bI c #181010", -"bJ c #181008", -"bK c #180808", -"bL c #100808", -"bM c #080808", -"bN c #080800", -"bO c #080000", -"bP c #000000", -/* pixels */ -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.A.r.p.m.g.f.................f.i.m.n.r.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.q.l.d.........P.N##############.8.N.N.........d.j.o.s.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.n.i.......P###I#L#3#3#3#3#3#3#3#Y#3#X#Y#X#3#Y#L#y##.N.......j.q.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.j.c...d.X#x#3#3#3#3#3#3#3#X#3#X#X#X#3#X#X#3#X#X#X#W#X#X#X#Y#q.X.d...c.m.x.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.j.#...N#o#3#3#3#3#3#3#3#X#X#3#X#X#3#X#X#X#X#X#W#X#W#W#X#X#W#W#X#W#X#Y#m.N.....j.t.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.l.....X#K#3#3#3#3#3#3#Y#X#X#X#3#X#X#W#X#W#X#W#W#W#X#W#X#W#W#W#W#W#V#V#M#V#W#M#I.X.....k.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.n.c...X#W#3#3#3#3#3#X#3#X#X#3#X#X#W#X#W#X#W#X#W#W#W#V#L#V#L#V#L#V#L#V#L#W#L#W#L#V#W#M#J.W...d.n.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.d...F#I#3#3#3#3#3#X#3#X#X#3#X#WaxaZbbbCbFbPbPbPbPbPbPbPbFbxbaaZap#L#L#L#K#L#L#K#L#L#K#L#K#M#q.D...f.r.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o.c.d#m#3#3#3#3#3#X#X#3#X#XaaaZbrbPbPbPbPbibmaEaFaFaGaFaGaGbmbmbPbPbPbPbqaZ#8#K#K#K#K#K#L#K#L#K#K#M##.d.c.m.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.x.l...F#J#3#3#3#3#Y#X#X#3#XaSbCbPbPbDa4ad#t.E.D.F.E.F.F.F.F.G.G.G.G.G#Nala4bGbPbPbCaJ#J#J#J#J#J#J#J#K#J#K#x.D...j.r.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.y.f...X#3#3#3#3#X#X#3#X#8a7bKbPbIaU#t.D.j.D.D.j.F.D.F.E.F.E.F.F.G.G.G.N.G.G.H.N#CaWbLbPbJa3#W#J#K#J#J#J#J#J#K#J.Q...f.z.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.d.c#o#3#3#3#3#X#3#X#Xa3bObPbsac.D.j.D.j.D.j.D.D.j.D.j.D.E.F.E.M.F.M.G.G.N.G.N.H.N.N.OalbAbPbMaR#I#A#I#B#I#J#J#K#K#a...d.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.r.c.d#o#3#3#3#3#X#X#XaxbFbPbD#N.D.i.D.D.j.D.D.i.D.j.D.j.D.D.D.D.E.F.E.F.M.G.F.N.G.G.N.N.N.Q.O#ZbHbPbEan#A#I#I#A#A#I#A#I#a.d.c.r.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.r.c.d#J#3#3#3#X#X#3#XbabPbIaq.D.i.j.D.D.g.B.i.B.i.g.C.i.D.j.D.j.D.D.D.E.F.F.F.G.G.G.N.N.H.N.Q.Q.Q.QaybLbPba#z#A#z#I#B#I#B#I#q.d.c.t.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.u.f..#J#3#3#3#X#X#XaabEbPbc.M.D.g.D.B.g.g.C.i.B.i.g.B.i.g.C.C.j.D.j.D.D.D.F.E.F.M.G.G.N.G.N.N.N.Q.Q.R.R.6bebPbE#2#A#z#z#z#z#A#I#p...f.w.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.f..#o#3#3#X#X#X#WapbNbPaq.j.C.j.B.i.C.C.B.g.g.g.B.g.g.B.i.B.g.C.i.D.j.j.D.D.F.E.F.M.G.G.N.G.N.N.N.Q.Q.W.R.WaybPbNa##z#I#z#I#z#z#A##...f.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.l..#l#3#3#X#3#X#WaSbNbL#s.j.D.g.B.i.B.g.g.i.g.B.f.g.f.f.g.g.g.C.g.B.i.C.D.j.D.D.F.E.F.F.M.G.N.G.N.N.O.Q.Q.R.R.S#QbMbMaC#y#y#z#y#I#z#A.0...k.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.q...X#3#3#X#X#X#XaSbPbD#s.j.B.B.i.C.g.f.g.f.B.f.f.f.f.B.f.B.f.f.g.B.i.B.i.C.D.j.D.D.F.F.F.G.G.G.N.H.N.N.Q.Q.R.W.W.T#SbAbPaC#y#z#y#z#y#y#z.Q...p.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.r.c.F#W#X#X#3#X#WaxbPby.M.D.B.i.i.B.g.f.B.f.f.f.f.f.B.f.f.f.f.f.B.f.g.B.g.B.g.D.C.j.D.D.F.E.M.G.N.G.N.N.N.Q.Q.W.R.W.W.X.8bBbPai#y#y#y#z#z#y#y.C.c.u.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.g..#J#3#X#3#W#XakbMbL.M.j.g.C.B.g.f.B.f.f.f.f.f.f.e.f.e.e.f.e.f.f.f.f.f.g.C.g.g.D.D.j.D.E.F.F.M.F.N.G.N.H.N.Q.Q.R.W.R.X.X#jbMbM#7#p#r#q#y#y#y#o...g.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.o..###X#3#X#X#X#3bJbL#s.D.D.C.i.g.g.B.f.f.e.f.e.e.d.f.d.f.d.e.d.e.f.e.f.B.f.f.B.C.B.i.D.D.D.E.F.G.F.G.G.N.N.N.O.Q.R.R.W.X.Z.X#SbLbJ#H#x#r#q#r#r#r.X...p.b.b.b.b.b.b.b", -".b.b.b.b.b.b.u.c.C#V#3#X#X#W#VbCbP#4.h.D.g.g.B.f.B.f.f.f.f.e.d.d.f.d.e.d.d.d.d.d.e.f.e.f.f.B.f.g.g.i.D.j.D.D.E.M.G.F.N.G.N.N.Q.O.W.Q.X.S.X.X.ZambPbl#q#p#q#q#x#q#q.f.d.s.b.b.b.b.b.b", -".b.b.b.b.b.b.m..#x#Y#X#W#W#WaZbPaT.j.C.g.C.B.g.B.f.f.f.e.e.d.f.d.d.d.d.d.d.d.d.d.d.d.f.e.f.f.B.g.C.B.j.C.D.D.F.F.F.G.N.G.N.H.P.Q.Q.W.S.W.X.Z.Z.Ya1bPaQ#p#p#q#p#q#x##...m.b.b.b.b.b.b", -".b.b.b.b.b.u.c.N#X#X#X#X#W#8bNbs.h.D.j.C.g.i.f.g.f.f.e.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.e.f.e.f.f.g.B.C.j.D.j.D.F.F.M.G.N.G.N.N.Q.Q.R.W.T.X.X.Z.Z.ZbBbM#U#q#p#q#p#q#q.D.c.w.b.b.b.b.b", -".b.b.b.b.b.n..#y#X#W#W#W#LbrbP#t.D.j.C.g.C.f.B.f.e.f.d.f.f.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.e.f.f.B.f.g.g.C.D.D.D.E.F.G.F.G.N.N.N.O.Q.Q.R.W.X.X.X.Z.7#FbPb##p#o#p#q#p#q#a...n.b.b.b.b.b", -".b.b.b.b.b.d.F#3#W#X#W#LaxbPa4.D.D.D.g.C.g.B.f.f.f.e.f.d.d.d.d.d.d.c.#.d.c.c.#.c.d.d.d.f.d.e.f.f.g.B.C.B.j.D.D.F.F.M.F.N.G.N.N.Q.O.W.R.W.X.X.Z.Z.Z.9a9bPa.#o#p#o#o#p#q.C.d.b.b.b.b.b", -".b.b.b.b.p..#o#W#X#W#V#VbwbI.N.C.j.C.g.C.g.f.g.f.e.d.d.d.d.d.c.#.c.a.c.#.c.a.c.a.c.d.d.d.e.f.e.f.f.B.g.i.D.j.D.E.F.F.G.N.G.N.H.Q.Q.Q.R.W.T.X.Z.7.Z.9#kbMbu#e#e#o#p#o#p.Z...q.b.b.b.b", -".b.b.b.b.j.d#X#X#W#V#MajbPaE.D.D.D.i.B.g.B.f.f.f.f.e.d.d.d.d.#.#.#.c.#.d.#.c.#.c.a.d.d.d.d.d.f.f.f.g.B.B.i.D.D.D.F.E.M.G.N.G.N.N.Q.R.Q.W.X.X.X.Z.Z.9.0aXbP#6#d#e#e#e#o#p.c.g.b.b.b.b", -".b.b.b.w...W#W#X#L#V#LbgbP#f.D.j.D.h.C.i.f.B.f.f.d.f.d.d.d.d.#.c.#.d.#...#.#...#.c.#.d.d.d.d.e.f.f.f.C.g.C.j.D.D.F.F.G.G.G.N.N.O.Q.Q.W.T.W.Z.X.Z.7.0.9#FbPbf#c#n#n#o#e#o.H...u.b.b.b", -".b.b.b.n..#x#X#L#W#V#WbOa4.D.j.D.C.i.C.g.B.f.f.e.e.d.d.d.c.d.c.#.#.c.#...#.....#.#...d.d.d.d.f.f.f.f.B.g.D.D.D.D.E.M.G.F.N.N.N.P.Q.Q.R.W.X.X.X.Z.Z.9.9.9b.bM#w#c#c#e#d#o.0...p.b.b.b", -".b.b.b.i.d#X#V#V#L#KaKbP#4.j.F.D.j.B.g.g.f.g.f.f.d.d.d.d.d.d.#.c.#.#.c.........#...#.d.c.d.d.e.f.e.B.g.C.g.C.j.D.F.F.M.G.N.G.N.Q.O.Q.R.W.X.X.Z.7.Z.9.0#.agbPaw#c#m#c#m#e#o.c.k.b.b.b", -".b.b.b.c.Q#W#M#V#L#KbqbL.F.D.D.j.C.i.C.B.g.f.e.f.e.d.d.d.d.d.c.a.#...#.............#.#.d.d.d.d.f.f.f.g.B.C.j.D.D.F.E.G.G.N.G.N.P.Q.Q.R.S.W.X.X.Z.Z.9.9.9#.bMbk#c#c#c#c#c#c.F.c.b.b.b", -".b.b.r..#a#V#V#L#K#JbMa4.F.l.D.D.j.B.g.g.f.B.f.d.f.d.d.d.c.a.c.....................#...#.d.d.f.e.f.f.C.g.i.D.D.D.F.F.M.G.G.N.N.O.Q.Q.R.W.X.X.Z.Z.Z.9.0#.#.b.bM#b#a#c#c#c#n.S...q.b.b", -".b.b.q..#x#M#L#K#KaobPae.E.D.D.j.C.g.i.f.g.f.e.f.d.d.d.d.c.d.#...#...................d.d.d.e.d.f.f.f.g.B.C.j.D.D.E.M.G.G.N.G.N.Q.O.W.R.S.W.Z.X.Z.7.0.9#.#.avbP#1#a#c#a#b#c.0...o.b.b", -".b.b.n..#X#L#K#K#JaRbP#f.F.F.k.D.D.D.B.B.g.f.f.e.e.d.d.d.d.#.c.a.#...................#.c.d.d.f.e.f.B.B.i.B.D.D.F.F.F.G.G.N.N.N.Q.Q.Q.R.W.X.X.Z.Z.7.9.9#.###FbPaH.4#a#a#c#a#c...n.b.b", -".b.b.i.C#L#L#L#J#JbgbP.F.E.D.D.D.i.j.i.C.B.g.f.f.d.f.d.d.d.d.#.......................#.#.d.d.e.f.e.f.B.g.C.j.D.D.F.F.G.G.N.N.H.Q.Q.R.W.S.X.X.Z.Z.Z.0.9#.###.bPb..3#a.4#a#a#c.d.f.b.b", -".b.b.i.N#L#K#K#J#Kbwbn.G.F.F.F.D.D.D.B.i.g.f.e.f.e.d.d.d.c.a.c.#...................#.#.d.d.e.d.f.f.g.g.C.i.D.D.F.E.G.M.N.G.N.N.O.Q.Q.R.W.X.X.Y.Z.9.9#..9#a#.bpbt.2.1#a.4#a#a.D.g.b.b", -".b.b...Q#K#K#J#J#AbJbd.G.E.F.D.j.j.B.i.g.g.B.f.f.e.d.d.d.d.d.d.#.#.#.................#.c.d.d.e.f.f.B.B.g.D.j.D.E.F.M.G.G.N.N.P.Q.Q.R.W.S.Z.X.Z.Z.7.0#.#.###.bkbH.1#..1.1.4#a.F.c.b.b", -".b.b...9#K#J#J#K#IbPaG.F.F.E.E.D.D.j.D.g.C.f.f.f.e.f.d.d.d.d.d.d.#.#.#.#.....#.#.#.#.#.d.d.f.f.f.B.f.g.C.j.D.D.F.F.G.G.N.N.N.P.O.Q.W.R.X.X.Z.7.Z.9.9.9#.###aaYbP.1.1.1#..2##.H...b.b", -".b.b...0#K#J#J#A#AbPaL.G.F.F.F.j.D.i.D.g.g.B.g.f.f.f.e.e.d.d.d.d.d.d.d.a.#.a.c.#.#.c.d.d.e.e.f.e.g.B.i.B.D.j.F.E.M.F.G.G.N.H.Q.Q.R.R.W.X.X.X.Z.7.0.9#.###.##aYbP.0.1.1.1#..2.N...b.b", -".b.b...8#J#J#J#I#AbPaL.G.G.E.F.F.j.D.j.C.i.g.B.f.B.f.f.f.e.d.d.d.d.d.d.c.d.d.d.d.d.d.d.d.d.f.f.B.f.i.B.j.D.D.D.F.F.G.G.N.N.N.Q.Q.Q.W.S.X.X.Z.Z.0.9.9#.#.#a#.aYbP.0.0.1.1.1#..H...b.b", -".b.b...Z#K#J#I#A#zbPaL.G.G.G.F.E.D.j.D.D.D.C.g.B.f.f.e.e.f.f.f.d.d.d.d.d.d.d.d.d.d.e.d.f.f.f.f.B.g.B.C.j.D.D.E.F.M.G.G.N.N.P.Q.Q.R.R.W.Z.X.Z.Z.7.9#.#.######aYbP.0.0.0.0.1.1.N...b.b", -".b.b...Z#K#A#A#A#IbPaG.G.G.G.M.F.F.D.D.j.i.B.g.g.g.f.B.f.f.e.e.f.d.e.d.d.d.d.e.f.e.d.f.f.e.B.g.g.C.g.j.D.D.F.F.F.G.G.N.N.N.O.Q.W.R.W.X.X.Z.Z.7.0.9.9#.###a#.aYbP.Z.0.0.0.1.0.G...b.b", -".b.b...Z#J#I#I#z#zbPaG.N.G.G.F.E.F.F.D.D.D.j.B.i.B.B.f.B.f.f.f.e.f.d.f.f.e.f.e.d.f.f.f.f.B.f.B.B.g.D.D.D.D.E.F.M.G.G.G.N.N.Q.Q.Q.W.S.X.X.Z.Z.9.9.9#.#.#a#.##aPbP.V.Z.0.0.0.3.G...b.b", -".b.b.c.Q#I#B#z#z#zbJbd.G.N.G.G.F.E.F.F.D.j.C.j.C.g.i.B.f.B.f.f.f.f.f.f.e.f.f.f.f.f.f.f.B.f.g.g.d.j.C.j.D.D.M.F.G.G.G.N.N.N.Q.R.R.R.W.Z.X.Z.Z.7.0#.#.#a###.#.bjbI.U.Z.V.Z.0.0.F.c.b.b", -".b.b.i.M#I#z#I#z#ybvbn.G.N.G.G.G.F.F.F.j.D.D.D.B.D.B.B.i.B.g.B.f.B.f.f.f.f.e.f.f.B.g.B.g.g.C.B.D.B.j.D.E.E.F.M.G.G.N.N.N.Q.Q.Q.S.W.X.X.Z.Z.7.9.9.9#.#.#a###.bpbo.Y.V.Z.Z.Z.0.f.i.b.b", -".b.b.g.f#J#A#z#y#zbgbP.N.G.N.G.G.G.M.E.F.D.E.j.D.j.i.C.g.C.B.g.g.B.f.B.g.B.B.B.B.g.B.g.C.B.i.j.i.j.D.k.E.F.F.G.G.N.G.N.Q.Q.Q.W.W.T.X.Z.Z.Z.9.0#.#.#####.#.#.bPa6.T.U.Y.V.Z.0.d.i.b.b", -".b.b.n..#A#I#z#y#yaQbP#h.N.G.N.G.G.G.F.F.F.D.D.D.D.D.j.D.g.C.B.i.B.g.g.B.i.B.g.g.C.i.B.i.D.D.D.D.D.k.E.E.E.G.G.G.N.N.N.O.Q.R.R.W.X.Y.X.Z.7.0.9.9#.###a###.#0bPay.T.T.U.Y.V.Z...m.b.b", -".b.b.p..#m#z#z#z#y#7bPal.N.N.G.N.N.G.G.F.F.F.F.j.D.D.D.j.D.j.C.C.i.C.C.i.B.i.C.C.g.D.i.D.D.j.D.E.D.E.E.E.G.G.G.N.N.N.Q.Q.Q.R.W.T.X.X.7.Z.0.8#.#.#.#a#.#..1aubP#R.T.T.X.T.U.Q...q.b.b", -".b.b.u...8#z#y#y#r#qbNa4.N.N.N.N.G.M.G.G.G.F.E.F.F.D.D.D.D.D.D.h.D.D.g.D.i.D.C.h.D.j.D.D.j.D.D.D.E.F.E.G.G.G.N.N.N.N.Q.Q.R.W.W.X.X.Z.Z.Z.9.9#.#.#a#.###..9b.bM.K.S.T.T.U.Y.G...v.b.b", -".b.b.b.c.N#z#z#y#r#qblbL.N.H.N.G.N.G.N.M.G.M.F.F.E.F.E.D.j.D.j.D.D.j.D.D.D.D.j.D.D.D.D.D.E.F.F.F.F.E.G.G.G.N.G.N.P.Q.Q.R.W.R.X.Z.Z.Z.7.9.0.9#.#####a#.#..1bMa9.K.R.T.S.T.T.C.c.b.b.b", -".b.b.b.j.d#y#y#y#q#qaIbPae.N.N.N.G.N.G.N.G.G.G.M.F.E.F.F.F.F.D.D.D.D.D.D.D.D.D.D.F.D.F.D.F.E.M.G.G.G.G.G.N.N.N.Q.O.Q.R.R.W.X.X.X.Z.Z.0.7.9#.#.###a#.#.#.agbPam.K.R.K.T.S.T.c.j.b.b.b", -".b.b.b.p..#a#z#q#r#p#ybMa5.Q.P.N.N.N.N.G.N.G.G.G.G.G.F.E.F.E.F.F.F.F.F.F.F.F.F.F.E.F.F.F.F.F.F.G.G.M.N.N.N.N.O.P.Q.Q.R.W.T.X.X.Z.Z.7.9.9#.#.#.#a#.###..0bfbM.X.Q.K.R.R.T.H...p.b.b.b", -".b.b.b.A...N#y#r#q#p#pb#bP#u.Q.P.N.G.N.N.G.N.N.N.G.M.G.G.G.M.F.E.F.E.F.E.F.E.F.F.F.F.G.M.G.G.G.G.G.N.G.G.N.N.Q.Q.R.R.W.W.X.X.Z.Z.Z.9.0.9#.#####.###..1#EbPa5.J.Q.Q.S.K.K.C...A.b.b.b", -".b.b.b.b.j.d#r#q#p#q#p#6bPaM.O.Q.Q.N.N.N.N.G.N.F.N.G.N.M.M.G.G.M.F.F.G.G.G.G.G.G.M.G.G.G.G.G.G.N.N.G.N.Q.P.Q.Q.Q.R.W.S.X.X.Z.Z.7.9.0.9#.#.###a###.#..9aObP#D.I.Q.J.Q.R.S.#.j.b.b.b.b", -".b.b.b.b.q...0#x#q#p#o#pbubL.6.Q.Q.Q.N.H.N.N.G.N.G.N.G.G.N.G.G.G.G.G.M.G.M.G.G.G.G.G.G.G.N.N.N.G.N.N.Q.N.Q.R.Q.R.W.T.X.Z.X.Z.Z.0.7.9#.#.###.#.#a#..1#kbMbn.H.I.I.O.J.Q.G...q.b.b.b.b", -".b.b.b.b.b.d.C#q#p#q#p#eahbPa8.W.Q.Q.Q.Q.N.N.N.N.N.G.N.N.G.N.N.G.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.Q.N.Q.R.Q.R.R.W.W.X.X.X.Z.Z.7.9.9#.#.###.#a###.#..0b.bP#Q.H.H.O.I.R.J.d.d.b.b.b.b.b", -".b.b.b.b.b.n..###p#p#o#e#db#bP#P.R.W.Q.Q.Q.Q.P.H.N.N.N.N.G.N.G.N.N.G.G.G.G.N.G.N.N.N.N.N.N.N.N.Q.Q.Q.Q.Q.R.W.W.X.X.X.Z.Z.Z.9.9.0#.#.###.#a###.#..0#TbPa4.G.H.N.H.J.I.G...n.b.b.b.b.b", -".b.b.b.b.b.A.c.F#q#o#p#e#o#GbMbz.R.Q.W.Q.Q.O.Q.Q.Q.N.N.H.N.N.N.N.G.N.N.N.N.N.N.N.G.N.N.P.Q.Q.Q.Q.Q.R.R.W.W.S.X.X.Z.Z.Z.Z.9.Z.9#..9###.#a#.#.#..1.0bDbM.W.G.H.H.H.N.I.d.d.w.b.b.b.b.b", -".b.b.b.b.b.b.n...0#p#o#d#n#caIbPa0.W.R.W.R.Q.Q.O.Q.Q.Q.Q.Q.P.N.P.N.P.N.P.N.P.P.Q.Q.Q.Q.O.Q.Q.R.Q.R.W.R.S.X.X.X.Z.X.Z.7.9.0.9#..9#.#a#.###a#.#..0a2bPar.G.G.N.G.H.H.F.c.m.b.b.b.b.b.b", -".b.b.b.b.b.b.A.c.d#p#e#o#c#c#bbkbP#9.W.R.W.R.W.R.Q.Q.Q.O.Q.O.Q.Q.Q.Q.Q.Q.Q.O.Q.O.Q.Q.Q.Q.R.Q.W.R.W.R.X.X.X.X.Y.Z.Z.Z.9.0.9#.#.#.#a#.#a#.#.#..0afbPbc.G.G.G.G.G.H.H.c.c.z.b.b.b.b.b.b", -".b.b.b.b.b.b.b.p...S#e#o#c#c#c#obIbM#Q.W.W.W.R.W.R.W.Q.R.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.R.Q.R.W.R.W.W.S.X.X.X.X.X.Z.Z.Z.7.9.0.9#..9#.#a#.#####.#..0#TbMbG.N.l.G.G.G.H.G.g...q.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.i..###d#c#n#a#c#1bLbM.7.T.W.W.S.W.R.W.R.W.R.Q.W.R.Q.W.R.R.W.R.R.W.R.W.R.W.R.X.X.X.X.Z.Z.Z.Z.7.9.0.9.9#..9#.#a###.#a#.#..0#kbMbL#g.k.l.F.G.G.G.F...j.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.w.c.B#c#c#c#c#a.2ahbPbB#i.X.X.X.W.W.S.W.W.W.R.S.W.R.R.W.R.W.W.W.S.W.S.X.X.X.X.X.Z.X.Z.Z.7.Z.0.7.9#..9#.###a#.###a#.#..0#lbBbP#O.j.E.k.l.F.G.G.d.c.v.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.o...N#m#c#c#a#a.1aubPbB#S.X.X.X.X.X.X.T.W.X.W.T.W.W.W.S.X.S.X.X.X.Z.X.X.X.Z.Z.Z.Z.Z.7.0.9.9#..9#.#.#.#a#.#a#.#.#..0#TbHbPac.j.E.j.k.E.l.G.f...p.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.j...R#c#b#a#a.3.1aubLbM#Z.Z.X.Z.X.X.X.X.X.X.X.Y.X.Y.X.X.X.Y.X.X.X.Z.Z.Z.Z.Z.7.Z.9.0.9.9#..9#.#.###a###.###.#..0#TbMbLac.j.D.j.l.D.k.l.g...l.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.f...W#c.4#a.1#a.1#TbMbPaA.Z.Z.X.Z.Z.X.Z.X.Z.X.X.X.Z.X.Z.X.Z.Z.Z.Z.Z.7.Z.7.0.9.9.9.9#..9#.#####a#.#a#.#.#..0aNbPbI#s.g.j.j.j.D.k.D.g...f.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.v.f.c.0#a.4.1.1.1.1#vbBbPbi#j.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.7.Z.Z.7.Z.7.Z.9.9.0.8.0.9#.#.#.#.#a#.#a#.###.#..0#lbpbPbs.5.g.j.h.j.D.j.E.j...f.A.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.A.c.c.Z#a.2#..0.1.0.Va1bPbMaB.7.Z.7.Z.Z.7.Z.Z.7.Z.7.Z.Z.9.Z.9.0.9.0.9.9#.#.#.#.#.#####.#a###.#.#..1aBbMbPaL.g.g.g.g.j.h.j.j.i...d.v.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.t.c.c.R#..1.1.0.0.0.Y#0bAbPbI#9.0.9.9.0.9.9.0.9.0.9.9.0.9.9.9.9#..9#.#.###.#####a#.#a#.#.#.#.#5bIbPbs#N.f.g.g.h.i.g.j.h.f.c.d.v.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.q.d...Q.1.1.0.0.Z.V.Z.TazbLbPbBat.0.9.9.0.9.9.9.9.9.9#..9#..9#.#.#.###.###a#.###a#.#.#.aubBbPbIaq.e.f.g.g.g.g.g.h.D.f...d.v.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.f...F.1.0.0.Z.Z.U.U.T.7aNbHbPbMa2#0.9#..9#.#.#.#..9#.#.###.###a#.#a#.###a#.#.#0a2bMbPbDaD.L.f.g.f.g.f.g.g.i.g.d...i.A.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.k...f.Z.0.0.Y.Z.T.T.S.K.KambobPbPbIb.au#0#.#.#.#a#.###a#.#a###.###a#0aub.bIbPbPbhab.e.f.g.g.f.g.f.g.g.g.g.c...l.A.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.q...c.G.Z.V.U.Y.T.T.T.R.K.J#hatbdbPbPbPbPbtbtaYaYaYaYaYaYaYbtbtbPbPbPbPbcad.5.e.g.f.g.g.f.g.g.g.f.g.d.c...o.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.f...C.Q.Y.T.T.S.K.R.R.Q.O.I.H.H#PasaVbibtbPbPbPbPbPbPbPbsbiaTaq#N.f.e.g.f.g.f.g.f.g.f.g.f.g.e.c...f.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.m.c...D.R.T.T.T.K.R.J.Q.I.N.H.H.G.G.F.l.k.j.j.j.j.j.g.g.g.g.g.g.g.f.g.f.g.g.f.g.f.g.f.e.d...d.n.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.t.j.....D.Q.S.R.K.Q.Q.I.I.H.H.H.G.G.G.F.l.E.j.D.j.j.j.i.g.g.g.f.g.f.g.f.g.g.f.g.e.d.....k.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.k.....f.G.R.J.Q.I.N.H.H.G.G.G.G.l.E.j.E.j.D.h.j.g.h.g.g.g.f.g.g.f.g.f.e.#.c...k.u.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.m.c...c.B.G.I.J.H.H.G.H.G.G.l.l.k.k.j.j.j.j.h.i.g.g.g.g.f.g.e.c.#...c.k.s.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o.j.......d.C.E.G.G.G.G.G.E.l.D.D.j.D.h.j.g.i.g.f.d.#.....#.i.o.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.u.q.k.f...c.....d.d.g.f.f.f.f.e.f.d.c.d.......#.d.j.o.t.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.w.r.n.m.i.f.....#.........c.f.g.l.n.r.w.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -".b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b", -}; diff --git a/sandbox/conical.tcl b/sandbox/conical.tcl deleted file mode 100644 index 63dd7c0..0000000 --- a/sandbox/conical.tcl +++ /dev/null @@ -1,18 +0,0 @@ - -lappend auto_path .. -package require Tkzinc - -set defaultfont -b&h-lucida-bold-r-normal-*-*-140-*-*-p-*-iso10646-1 -zinc .zinc -width 700 -height 500 -render 1 -pack .zinc - - -.zinc gname {=radial 0 0 |white|gray30} test1 -.zinc gname {=conical 70 |white|gray30 50 50|white} test2 - -set grp [.zinc add group 1] -#.zinc add rectangle $grp {0 0 70 50} -filled 1 -fillcolor white -.zinc add rectangle $grp {60 60 360 360} -filled 1 -linewidth 1 \ - -fillcolor test2 -tags rect - -.zinc add rectangle $grp {140 140 280 280} -filled 1 -fillcolor gray diff --git a/sandbox/contours.tcl b/sandbox/contours.tcl deleted file mode 100644 index ce6d3ac..0000000 --- a/sandbox/contours.tcl +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so -package require Img - -set top 1 -set lw 8 - -set r [zinc .r -backcolor gray -relief sunken] -pack .r -expand t -fill both -.r configure -width 800 -height 500 -.r scale $top 1 -1 -#.r configure -drawbboxes t -set view [.r add group $top -tags controls] -#set poly [.r add curve $view "50 -150 300 -150 300 -300 50 -300 50 -150" \ -# -closed t -fillcolor tan] -set poly [.r add curve $view "50 -150 50 -300 300 -300 300 -150 50 -150" \ - -closed t -fillcolor tan -linecolor tan -linewidth 2 -relief raised] -.r scale $poly 2.0 2.0 -.r translate $poly -60 150 -set rect [.r add rectangle $view "50 -200 100 -50"] -set ellipse [.r add arc $view "150 -200 300 -350"] -set arc [.r add arc $view "-25 -150 125 -300"] -.r scale $arc 2.0 2.0 -.r translate $arc -60 150 - -set mp [.r add curve $view "" \ - -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \ - -markercolor red -tags "poly" -linewidth $lw -filled t -closed t] - -.r contour $mp add $poly -.r contour $mp addhole $ellipse -.r contour $mp addhole $rect -.r contour $mp add $arc - -.r itemconfigure $mp -relief raised -visible t -.r lower $mp - -#.r remove $arc $ellipse $rect $poly -.r remove $rect $arc $ellipse - -#.r itemconfigure $poly -relief raised -linewidth 8 - -# "50 -200 100 -200 100 -50 50 -50 50 -200" -source "controls.tcl" diff --git a/sandbox/controls.tcl b/sandbox/controls.tcl deleted file mode 100644 index d865020..0000000 --- a/sandbox/controls.tcl +++ /dev/null @@ -1,158 +0,0 @@ -set tlbbox [.r add group $top -sensitive f -visible f -tags currentbbox] -.r add rectangle $tlbbox "-3 -3 +3 +3" -set trbbox [.r add group $top -sensitive f -visible f -tags currentbbox] -.r add rectangle $trbbox "-3 -3 +3 +3" -set blbbox [.r add group $top -sensitive f -visible f -tags currentbbox] -.r add rectangle $blbbox "-3 -3 +3 +3" -set brbbox [.r add group $top -sensitive f -visible f -tags currentbbox] -.r add rectangle $brbbox "-3 -3 +3 +3" -.r add rectangle $top "0 0 1 1" -linecolor red -tags "lasso" -visible f -sensitive f - -# -# Controls for the window transform. -# -proc press {lx ly action} { - global x y angle - set x $lx - set y $ly - set angle [expr atan2($y, $x)] - bind .r "" "$action %x %y" -} - -proc motion {lx ly} { - global x y - set it [.r find withtag controls] - if {$it != ""} { - set it [.r group [lindex $it 0]] - } - set res [.r transform $it "$lx $ly $x $y"] - set nx [lindex $res 0] - set ny [lindex $res 1] - set ox [lindex $res 2] - set oy [lindex $res 3] - .r translate controls [expr $nx - $ox] [expr $ny - $oy] - set x $lx - set y $ly -} - -proc zoom {lx ly} { - global x y - - if {$lx > $x} { - set maxx $lx - } else { - set maxx $x - } - if {$ly > $y} { - set maxy $ly - } else { - set maxy $y - } - set sx [expr 1.0 + double($lx - $x)/$maxx] - set sy [expr 1.0 + double($ly - $y)/$maxy] - set x $lx - set y $ly - .r scale controls $sx $sy -} - -proc rotate {lx ly} { - global angle - - set langle [expr atan2($ly, $lx)] - .r rotate controls [expr -($langle-$angle)] - set angle $langle -} - -proc release {} { - bind .r "" "" -} - -proc start_lasso {lx ly} { - global top x y cx cy - set x $lx - set y $ly - set cx $lx - set cy $ly - set coords [.r transform $top "$x $y"] - set fx [lindex $coords 0] - set fy [lindex $coords 1] - .r coords lasso "$fx $fy $fx $fy" - .r itemconfigure lasso -visible t - .r raise lasso - bind .r "" "lasso %x %y" -} - -proc lasso {lx ly} { - global top x y cx cy - set cx $lx - set cy $ly - set coords [.r transform $top "$x $y $lx $ly"] - set fx [lindex $coords 0] - set fy [lindex $coords 1] - set fcx [lindex $coords 2] - set fcy [lindex $coords 3] - .r coords lasso "$fx $fy $fcx $fcy" -} - -proc fin_lasso {} { - global x y cx cy - - bind .r "" "" - .r itemconfigure lasso -visible f -# puts "x=$x, y=$y, cx=$cx, cy=$cy" - puts "enclosed='[.r find enclosed $x $y $cx $cy]', overlapping='[.r find overlapping $x $y $cx $cy]'" -} - -proc getrect {x y} { - list [expr $x-3] [expr $y-3] [expr $x+3] [expr $y+3] -} - -proc showbox {} { - global top tlbbox trbbox blbbox brbbox - - if { ! [.r hastag current currentbbox]} { - if {[catch {.r find withtag current} item] } { - return - } - set coords [.r transform $top [.r bbox current]] - set xo [lindex $coords 0] - set yo [lindex $coords 1] - set xc [lindex $coords 2] - set yc [lindex $coords 3] - - .r coords $tlbbox "$xo $yo" - .r coords $trbbox "$xc $yo" - .r coords $brbbox "$xc $yc" - .r coords $blbbox "$xo $yc" - .r itemconfigure currentbbox -visible t - } -} - -proc hidebox {lx ly} { - set next [.r find closest $lx $ly] - if {[llength $next] > 1} { - set next [lindex $next 0] - } - if { $next == "" || ! [.r hastag $next currentbbox] ||\ - [.r hastag current currentbbox]} { - .r itemconfigure currentbbox -visible f - } -} - - -bind .r "" "start_lasso %x %y" -bind .r "" fin_lasso - -bind .r "" {puts "at point='[.r find closest %x %y]'"} - -bind .r "" "press %x %y motion" -bind .r "" release - -bind .r "" "press %x %y zoom" -bind .r "" release - -bind .r "" "press %x %y rotate" -bind .r "" release - -.r bind current "" showbox -.r bind current "" {hidebox %x %y} diff --git a/sandbox/defs.tcl b/sandbox/defs.tcl deleted file mode 100644 index a2e55cd..0000000 --- a/sandbox/defs.tcl +++ /dev/null @@ -1,1097 +0,0 @@ -# defs.tcl -- -# -# This file contains support code for the Tcl/Tk test suite.It is -# It is normally sourced by the individual files in the test suite -# before they run their tests. This improved approach to testing -# was designed and initially implemented by Mary Ann May-Pumphrey -# of Sun Microsystems. -# -# Copyright (c) 1990-1994 The Regents of the University of California. -# Copyright (c) 1994-1996 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. -# All rights reserved. -# -# RCS: @(#) $Id$ - -# Initialize wish shell - -if {[info exists tk_version]} { - tk appname tktest - wm title . tktest -} else { - - # Ensure that we have a minimal auto_path so we don't pick up extra junk. - - set auto_path [list [info library]] -} - -# create the "tcltest" namespace for all testing variables and procedures - -namespace eval tcltest { - set procList [list test cleanupTests dotests saveState restoreState \ - normalizeMsg makeFile removeFile makeDirectory removeDirectory \ - viewFile bytestring set_iso8859_1_locale restore_locale \ - safeFetch threadReap] - if {[info exists tk_version]} { - lappend procList setupbg dobg bgReady cleanupbg fixfocus - } - foreach proc $procList { - namespace export $proc - } - - # setup ::tcltest default vars - foreach {var default} {verbose b match {} skip {}} { - if {![info exists $var]} { - variable $var $default - } - } - - # Tests should not rely on the current working directory. - # Files that are part of the test suite should be accessed relative to - # ::tcltest::testsDir. - - set originalDir [pwd] - set tDir [file join $originalDir [file dirname [info script]]] - cd $tDir - variable testsDir [pwd] - cd $originalDir - - # Count the number of files tested (0 if all.tcl wasn't called). - # The all.tcl file will set testSingleFile to false, so stats will - # not be printed until all.tcl calls the cleanupTests proc. - # The currentFailure var stores the boolean value of whether the - # current test file has had any failures. The failFiles list - # stores the names of test files that had failures. - - variable numTestFiles 0 - variable testSingleFile true - variable currentFailure false - variable failFiles {} - - # Tests should remove all files they create. The test suite will - # check the current working dir for files created by the tests. - # ::tcltest::filesMade keeps track of such files created using the - # ::tcltest::makeFile and ::tcltest::makeDirectory procedures. - # ::tcltest::filesExisted stores the names of pre-existing files. - - variable filesMade {} - variable filesExisted {} - - # ::tcltest::numTests will store test files as indices and the list - # of files (that should not have been) left behind by the test files. - - array set ::tcltest::createdNewFiles {} - - # initialize ::tcltest::numTests array to keep track fo the number of - # tests that pass, fial, and are skipped. - - array set numTests [list Total 0 Passed 0 Skipped 0 Failed 0] - - # initialize ::tcltest::skippedBecause array to keep track of - # constraints that kept tests from running - - array set ::tcltest::skippedBecause {} - - # tests that use thread need to know which is the main thread - - variable ::tcltest::mainThread 1 - if {[info commands testthread] != {}} { - puts "Tk with threads enabled is known to have problems with X" - set ::tcltest::mainThread [testthread names] - } -} - -# If there is no "memory" command (because memory debugging isn't -# enabled), generate a dummy command that does nothing. - -if {[info commands memory] == ""} { - proc memory args {} -} - -# ::tcltest::initConfig -- -# -# Check configuration information that will determine which tests -# to run. To do this, create an array ::tcltest::testConfig. Each -# element has a 0 or 1 value. If the element is "true" then tests -# with that constraint will be run, otherwise tests with that constraint -# will be skipped. See the README file for the list of built-in -# constraints defined in this procedure. -# -# Arguments: -# none -# -# Results: -# The ::tcltest::testConfig array is reset to have an index for -# each built-in test constraint. - -proc ::tcltest::initConfig {} { - - global tcl_platform tcl_interactive tk_version - - catch {unset ::tcltest::testConfig} - - # The following trace procedure makes it so that we can safely refer to - # non-existent members of the ::tcltest::testConfig array without causing an - # error. Instead, reading a non-existent member will return 0. This is - # necessary because tests are allowed to use constraint "X" without ensuring - # that ::tcltest::testConfig("X") is defined. - - trace variable ::tcltest::testConfig r ::tcltest::safeFetch - - proc ::tcltest::safeFetch {n1 n2 op} { - if {($n2 != {}) && ([info exists ::tcltest::testConfig($n2)] == 0)} { - set ::tcltest::testConfig($n2) 0 - } - } - - set ::tcltest::testConfig(unixOnly) \ - [expr {$tcl_platform(platform) == "unix"}] - set ::tcltest::testConfig(macOnly) \ - [expr {$tcl_platform(platform) == "macintosh"}] - set ::tcltest::testConfig(pcOnly) \ - [expr {$tcl_platform(platform) == "windows"}] - - set ::tcltest::testConfig(unix) $::tcltest::testConfig(unixOnly) - set ::tcltest::testConfig(mac) $::tcltest::testConfig(macOnly) - set ::tcltest::testConfig(pc) $::tcltest::testConfig(pcOnly) - - set ::tcltest::testConfig(unixOrPc) \ - [expr {$::tcltest::testConfig(unix) || $::tcltest::testConfig(pc)}] - set ::tcltest::testConfig(macOrPc) \ - [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(pc)}] - set ::tcltest::testConfig(macOrUnix) \ - [expr {$::tcltest::testConfig(mac) || $::tcltest::testConfig(unix)}] - - set ::tcltest::testConfig(nt) [expr {$tcl_platform(os) == "Windows NT"}] - set ::tcltest::testConfig(95) [expr {$tcl_platform(os) == "Windows 95"}] - - # The following config switches are used to mark tests that should work, - # but have been temporarily disabled on certain platforms because they don't - # and we haven't gotten around to fixing the underlying problem. - - set ::tcltest::testConfig(tempNotPc) [expr {!$::tcltest::testConfig(pc)}] - set ::tcltest::testConfig(tempNotMac) [expr {!$::tcltest::testConfig(mac)}] - set ::tcltest::testConfig(tempNotUnix) [expr {!$::tcltest::testConfig(unix)}] - - # The following config switches are used to mark tests that crash on - # certain platforms, so that they can be reactivated again when the - # underlying problem is fixed. - - set ::tcltest::testConfig(pcCrash) [expr {!$::tcltest::testConfig(pc)}] - set ::tcltest::testConfig(macCrash) [expr {!$::tcltest::testConfig(mac)}] - set ::tcltest::testConfig(unixCrash) [expr {!$::tcltest::testConfig(unix)}] - - # Set the "fonts" constraint for wish apps - - if {[info exists tk_version]} { - set ::tcltest::testConfig(fonts) 1 - catch {destroy .e} - entry .e -width 0 -font {Helvetica -12} -bd 1 - .e insert end "a.bcd" - if {([winfo reqwidth .e] != 37) || ([winfo reqheight .e] != 20)} { - set ::tcltest::testConfig(fonts) 0 - } - destroy .e - catch {destroy .t} - text .t -width 80 -height 20 -font {Times -14} -bd 1 - pack .t - .t insert end "This is\na dot." - update - set x [list [.t bbox 1.3] [.t bbox 2.5]] - destroy .t - if {[string match {{22 3 6 15} {31 18 [34] 15}} $x] == 0} { - set ::tcltest::testConfig(fonts) 0 - } - - # Test to see if we have are running Unix apps on Exceed, - # which won't return font failures (Windows-like), which is - # not what we want from ann X server (other Windows X servers - # operate as expected) - - set ::tcltest::testConfig(noExceed) 1 - if {$::tcltest::testConfig(unixOnly) && \ - [catch {font actual "\{xyz"}] == 0} { - puts "Running X app on Exceed, skipping problematic font tests..." - set ::tcltest::testConfig(noExceed) 0 - } - } - - # Skip empty tests - - set ::tcltest::testConfig(emptyTest) 0 - - # By default, tests that expost known bugs are skipped. - - set ::tcltest::testConfig(knownBug) 0 - - # By default, non-portable tests are skipped. - - set ::tcltest::testConfig(nonPortable) 0 - - # Some tests require user interaction. - - set ::tcltest::testConfig(userInteraction) 0 - - # Some tests must be skipped if the interpreter is not in interactive mode - - set ::tcltest::testConfig(interactive) $tcl_interactive - - # Some tests must be skipped if you are running as root on Unix. - # Other tests can only be run if you are running as root on Unix. - - set ::tcltest::testConfig(root) 0 - set ::tcltest::testConfig(notRoot) 1 - set user {} - if {$tcl_platform(platform) == "unix"} { - catch {set user [exec whoami]} - if {$user == ""} { - catch {regexp {^[^(]*\(([^)]*)\)} [exec id] dummy user} - } - if {($user == "root") || ($user == "")} { - set ::tcltest::testConfig(root) 1 - set ::tcltest::testConfig(notRoot) 0 - } - } - - # Set nonBlockFiles constraint: 1 means this platform supports - # setting files into nonblocking mode. - - if {[catch {set f [open defs r]}]} { - set ::tcltest::testConfig(nonBlockFiles) 1 - } else { - if {[catch {fconfigure $f -blocking off}] == 0} { - set ::tcltest::testConfig(nonBlockFiles) 1 - } else { - set ::tcltest::testConfig(nonBlockFiles) 0 - } - close $f - } - - # Set asyncPipeClose constraint: 1 means this platform supports - # async flush and async close on a pipe. - # - # Test for SCO Unix - cannot run async flushing tests because a - # potential problem with select is apparently interfering. - # (Mark Diekhans). - - if {$tcl_platform(platform) == "unix"} { - if {[catch {exec uname -X | fgrep {Release = 3.2v}}] == 0} { - set ::tcltest::testConfig(asyncPipeClose) 0 - } else { - set ::tcltest::testConfig(asyncPipeClose) 1 - } - } else { - set ::tcltest::testConfig(asyncPipeClose) 1 - } - - # Test to see if we have a broken version of sprintf with respect - # to the "e" format of floating-point numbers. - - set ::tcltest::testConfig(eformat) 1 - if {[string compare "[format %g 5e-5]" "5e-05"] != 0} { - set ::tcltest::testConfig(eformat) 0 - } - - # Test to see if execed commands such as cat, echo, rm and so forth are - # present on this machine. - - set ::tcltest::testConfig(unixExecs) 1 - if {$tcl_platform(platform) == "macintosh"} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ($tcl_platform(platform) == "windows")} { - if {[catch {exec cat defs}] == 1} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec echo hello}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec sh -c echo hello}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec wc defs}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {$::tcltest::testConfig(unixExecs) == 1} { - exec echo hello > removeMe - if {[catch {exec rm removeMe}] == 1} { - set ::tcltest::testConfig(unixExecs) 0 - } - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec sleep 1}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec fgrep unixExecs defs}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec ps}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec echo abc > removeMe}] == 0) && \ - ([catch {exec chmod 644 removeMe}] == 1) && \ - ([catch {exec rm removeMe}] == 0)} { - set ::tcltest::testConfig(unixExecs) 0 - } else { - catch {exec rm -f removeMe} - } - if {($::tcltest::testConfig(unixExecs) == 1) && \ - ([catch {exec mkdir removeMe}] == 1)} { - set ::tcltest::testConfig(unixExecs) 0 - } else { - catch {exec rm -r removeMe} - } - } -} - -::tcltest::initConfig - - -# ::tcltest::processCmdLineArgs -- -# -# Use command line args to set the verbose, skip, and -# match variables. This procedure must be run after -# constraints are initialized, because some constraints can be -# overridden. -# -# Arguments: -# none -# -# Results: -# ::tcltest::verbose is set to - -proc ::tcltest::processCmdLineArgs {} { - global argv - - # The "argv" var doesn't exist in some cases, so use {} - # The "argv" var doesn't exist in some cases. - - if {(![info exists argv]) || ([llength $argv] < 2)} { - set flagArray {} - } else { - set flagArray $argv - } - - if {[catch {array set flag $flagArray}]} { - puts stderr "Error: odd number of command line args specified:" - puts stderr " $argv" - exit - } - - # Allow for 1-char abbreviations, where applicable (e.g., -match == -m). - # Note that -verbose cannot be abbreviated to -v in wish because it - # conflicts with the wish option -visual. - - foreach arg {-verbose -match -skip -constraints} { - set abbrev [string range $arg 0 1] - if {([info exists flag($abbrev)]) && \ - ([lsearch -exact $flagArray $arg] < \ - [lsearch -exact $flagArray $abbrev])} { - set flag($arg) $flag($abbrev) - } - } - - # Set ::tcltest::workingDir to [pwd]. - # Save the names of files that already exist in ::tcltest::workingDir. - - set ::tcltest::workingDir [pwd] - foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] { - lappend ::tcltest::filesExisted [file tail $file] - } - - # Set ::tcltest::verbose to the arg of the -verbose flag, if given - - if {[info exists flag(-verbose)]} { - set ::tcltest::verbose $flag(-verbose) - } - - # Set ::tcltest::match to the arg of the -match flag, if given - - if {[info exists flag(-match)]} { - set ::tcltest::match $flag(-match) - } - - # Set ::tcltest::skip to the arg of the -skip flag, if given - - if {[info exists flag(-skip)]} { - set ::tcltest::skip $flag(-skip) - } - - # Use the -constraints flag, if given, to turn on constraints that are - # turned off by default: userInteractive knownBug nonPortable. This - # code fragment must be run after constraints are initialized. - - if {[info exists flag(-constraints)]} { - foreach elt $flag(-constraints) { - set ::tcltest::testConfig($elt) 1 - } - } -} - -::tcltest::processCmdLineArgs - - -# ::tcltest::cleanupTests -- -# -# Remove files and dirs created using the makeFile and makeDirectory -# commands since the last time this proc was invoked. -# -# Print the names of the files created without the makeFile command -# since the tests were invoked. -# -# Print the number tests (total, passed, failed, and skipped) since the -# tests were invoked. -# - -proc ::tcltest::cleanupTests {{calledFromAllFile 0}} { - set tail [file tail [info script]] - - # Remove files and directories created by the :tcltest::makeFile and - # ::tcltest::makeDirectory procedures. - # Record the names of files in ::tcltest::workingDir that were not - # pre-existing, and associate them with the test file that created them. - - if {!$calledFromAllFile} { - - foreach file $::tcltest::filesMade { - if {[file exists $file]} { - catch {file delete -force $file} - } - } - set currentFiles {} - foreach file [glob -nocomplain [file join $::tcltest::workingDir *]] { - lappend currentFiles [file tail $file] - } - set newFiles {} - foreach file $currentFiles { - if {[lsearch -exact $::tcltest::filesExisted $file] == -1} { - lappend newFiles $file - } - } - set ::tcltest::filesExisted $currentFiles - if {[llength $newFiles] > 0} { - set ::tcltest::createdNewFiles($tail) $newFiles - } - } - - if {$calledFromAllFile || $::tcltest::testSingleFile} { - - # print stats - - puts -nonewline stdout "$tail:" - foreach index [list "Total" "Passed" "Skipped" "Failed"] { - puts -nonewline stdout "\t$index\t$::tcltest::numTests($index)" - } - puts stdout "" - - # print number test files sourced - # print names of files that ran tests which failed - - if {$calledFromAllFile} { - puts stdout "Sourced $::tcltest::numTestFiles Test Files." - set ::tcltest::numTestFiles 0 - if {[llength $::tcltest::failFiles] > 0} { - puts stdout "Files with failing tests: $::tcltest::failFiles" - set ::tcltest::failFiles {} - } - } - - # if any tests were skipped, print the constraints that kept them - # from running. - - set constraintList [array names ::tcltest::skippedBecause] - if {[llength $constraintList] > 0} { - puts stdout "Number of tests skipped for each constraint:" - foreach constraint [lsort $constraintList] { - puts stdout \ - "\t$::tcltest::skippedBecause($constraint)\t$constraint" - unset ::tcltest::skippedBecause($constraint) - } - } - - # report the names of test files in ::tcltest::createdNewFiles, and - # reset the array to be empty. - - set testFilesThatTurded [lsort [array names ::tcltest::createdNewFiles]] - if {[llength $testFilesThatTurded] > 0} { - puts stdout "Warning: test files left files behind:" - foreach testFile $testFilesThatTurded { - puts "\t$testFile:\t$::tcltest::createdNewFiles($testFile)" - unset ::tcltest::createdNewFiles($testFile) - } - } - - # reset filesMade, filesExisted, and numTests - - set ::tcltest::filesMade {} - foreach index [list "Total" "Passed" "Skipped" "Failed"] { - set ::tcltest::numTests($index) 0 - } - - # exit only if running Tk in non-interactive mode - - global tk_version tcl_interactive - if {[info exists tk_version] && !$tcl_interactive} { - exit - } - } else { - - # if we're deferring stat-reporting until all files are sourced, - # then add current file to failFile list if any tests in this file - # failed - - incr ::tcltest::numTestFiles - if {($::tcltest::currentFailure) && \ - ([lsearch -exact $::tcltest::failFiles $tail] == -1)} { - lappend ::tcltest::failFiles $tail - } - set ::tcltest::currentFailure false - } -} - - -# test -- -# -# This procedure runs a test and prints an error message if the test fails. -# If ::tcltest::verbose has been set, it also prints a message even if the -# test succeeds. The test will be skipped if it doesn't match the -# ::tcltest::match variable, if it matches an element in -# ::tcltest::skip, or if one of the elements of "constraints" turns -# out not to be true. -# -# Arguments: -# name - Name of test, in the form foo-1.2. -# description - Short textual description of the test, to -# help humans understand what it does. -# constraints - A list of one or more keywords, each of -# which must be the name of an element in -# the array "::tcltest::testConfig". If any of these -# elements is zero, the test is skipped. -# This argument may be omitted. -# script - Script to run to carry out the test. It must -# return a result that can be checked for -# correctness. -# expectedAnswer - Expected result from script. - -proc ::tcltest::test {name description script expectedAnswer args} { - incr ::tcltest::numTests(Total) - - # skip the test if it's name matches an element of skip - - foreach pattern $::tcltest::skip { - if {[string match $pattern $name]} { - incr ::tcltest::numTests(Skipped) - return - } - } - # skip the test if it's name doesn't match any element of match - - if {[llength $::tcltest::match] > 0} { - set ok 0 - foreach pattern $::tcltest::match { - if {[string match $pattern $name]} { - set ok 1 - break - } - } - if {!$ok} { - incr ::tcltest::numTests(Skipped) - return - } - } - set i [llength $args] - if {$i == 0} { - set constraints {} - } elseif {$i == 1} { - - # "constraints" argument exists; shuffle arguments down, then - # make sure that the constraints are satisfied. - - set constraints $script - set script $expectedAnswer - set expectedAnswer [lindex $args 0] - set doTest 0 - if {[string match {*[$\[]*} $constraints] != 0} { - - # full expression, e.g. {$foo > [info tclversion]} - - catch {set doTest [uplevel #0 expr $constraints]} - - } elseif {[regexp {[^.a-zA-Z0-9 ]+} $constraints] != 0} { - - # something like {a || b} should be turned into - # $::tcltest::testConfig(a) || $::tcltest::testConfig(b). - - regsub -all {[.a-zA-Z0-9]+} $constraints \ - {$::tcltest::testConfig(&)} c - catch {set doTest [eval expr $c]} - } else { - - # just simple constraints such as {unixOnly fonts}. - - set doTest 1 - foreach constraint $constraints { - if {![info exists ::tcltest::testConfig($constraint)] - || !$::tcltest::testConfig($constraint)} { - set doTest 0 - - # store the constraint that kept the test from running - - set constraints $constraint - break - } - } - } - if {$doTest == 0} { - incr ::tcltest::numTests(Skipped) - if {[string first s $::tcltest::verbose] != -1} { - puts stdout "++++ $name SKIPPED: $constraints" - } - - # add the constraint to the list of constraints the kept tests - # from running - - if {[info exists ::tcltest::skippedBecause($constraints)]} { - incr ::tcltest::skippedBecause($constraints) - } else { - set ::tcltest::skippedBecause($constraints) 1 - } - return - } - } else { - error "wrong # args: must be \"test name description ?constraints? script expectedAnswer\"" - } - memory tag $name - set code [catch {uplevel $script} actualAnswer] - if {$code != 0 || [string compare $actualAnswer $expectedAnswer] != 0} { - incr ::tcltest::numTests(Failed) - set ::tcltest::currentFailure true - if {[string first b $::tcltest::verbose] == -1} { - set script "" - } - puts stdout "\n==== $name $description FAILED" - if {$script != ""} { - puts stdout "==== Contents of test case:" - puts stdout $script - } - if {$code != 0} { - if {$code == 1} { - puts stdout "==== Test generated error:" - puts stdout $actualAnswer - } elseif {$code == 2} { - puts stdout "==== Test generated return exception; result was:" - puts stdout $actualAnswer - } elseif {$code == 3} { - puts stdout "==== Test generated break exception" - } elseif {$code == 4} { - puts stdout "==== Test generated continue exception" - } else { - puts stdout "==== Test generated exception $code; message was:" - puts stdout $actualAnswer - } - } else { - puts stdout "---- Result was:\n$actualAnswer" - } - puts stdout "---- Result should have been:\n$expectedAnswer" - puts stdout "==== $name FAILED\n" - } else { - incr ::tcltest::numTests(Passed) - if {[string first p $::tcltest::verbose] != -1} { - puts stdout "++++ $name PASSED" - } - } -} - -# ::tcltest::dotests -- -# -# takes two arguments--the name of the test file (such -# as "parse.test"), and a pattern selecting the tests you want to -# execute. It sets ::tcltest::matching to the second argument, calls -# "source" on the file specified in the first argument, and restores -# ::tcltest::matching to its pre-call value at the end. -# -# Arguments: -# file name of tests file to source -# args pattern selecting the tests you want to execute -# -# Results: -# none - -proc ::tcltest::dotests {file args} { - set savedTests $::tcltest::match - set ::tcltest::match $args - source $file - set ::tcltest::match $savedTests -} - -proc ::tcltest::openfiles {} { - if {[catch {testchannel open} result]} { - return {} - } - return $result -} - -proc ::tcltest::leakfiles {old} { - if {[catch {testchannel open} new]} { - return {} - } - set leak {} - foreach p $new { - if {[lsearch $old $p] < 0} { - lappend leak $p - } - } - return $leak -} - -set ::tcltest::saveState {} - -proc ::tcltest::saveState {} { - uplevel #0 {set ::tcltest::saveState [list [info procs] [info vars]]} -} - -proc ::tcltest::restoreState {} { - foreach p [info procs] { - if {[lsearch [lindex $::tcltest::saveState 0] $p] < 0} { - rename $p {} - } - } - foreach p [uplevel #0 {info vars}] { - if {[lsearch [lindex $::tcltest::saveState 1] $p] < 0} { - uplevel #0 "unset $p" - } - } -} - -proc ::tcltest::normalizeMsg {msg} { - regsub "\n$" [string tolower $msg] "" msg - regsub -all "\n\n" $msg "\n" msg - regsub -all "\n\}" $msg "\}" msg - return $msg -} - -# makeFile -- -# -# Create a new file with the name , and write to it. -# -# If this file hasn't been created via makeFile since the last time -# cleanupTests was called, add it to the $filesMade list, so it will -# be removed by the next call to cleanupTests. -# -proc ::tcltest::makeFile {contents name} { - set fd [open $name w] - fconfigure $fd -translation lf - if {[string index $contents [expr {[string length $contents] - 1}]] == "\n"} { - puts -nonewline $fd $contents - } else { - puts $fd $contents - } - close $fd - - set fullName [file join [pwd] $name] - if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} { - lappend ::tcltest::filesMade $fullName - } -} - -proc ::tcltest::removeFile {name} { - file delete $name -} - -# makeDirectory -- -# -# Create a new dir with the name . -# -# If this dir hasn't been created via makeDirectory since the last time -# cleanupTests was called, add it to the $directoriesMade list, so it will -# be removed by the next call to cleanupTests. -# -proc ::tcltest::makeDirectory {name} { - file mkdir $name - - set fullName [file join [pwd] $name] - if {[lsearch -exact $::tcltest::filesMade $fullName] == -1} { - lappend ::tcltest::filesMade $fullName - } -} - -proc ::tcltest::removeDirectory {name} { - file delete -force $name -} - -proc ::tcltest::viewFile {name} { - global tcl_platform - if {($tcl_platform(platform) == "macintosh") || \ - ($::tcltest::testConfig(unixExecs) == 0)} { - set f [open $name] - set data [read -nonewline $f] - close $f - return $data - } else { - exec cat $name - } -} - -# -# Construct a string that consists of the requested sequence of bytes, -# as opposed to a string of properly formed UTF-8 characters. -# This allows the tester to -# 1. Create denormalized or improperly formed strings to pass to C procedures -# that are supposed to accept strings with embedded NULL bytes. -# 2. Confirm that a string result has a certain pattern of bytes, for instance -# to confirm that "\xe0\0" in a Tcl script is stored internally in -# UTF-8 as the sequence of bytes "\xc3\xa0\xc0\x80". -# -# Generally, it's a bad idea to examine the bytes in a Tcl string or to -# construct improperly formed strings in this manner, because it involves -# exposing that Tcl uses UTF-8 internally. - -proc ::tcltest::bytestring {string} { - encoding convertfrom identity $string -} - -# Locate tcltest executable - -if {![info exists tk_version]} { - set tcltest [info nameofexecutable] - - if {$tcltest == "{}"} { - set tcltest {} - } -} - -set ::tcltest::testConfig(stdio) 0 -catch { - catch {file delete -force tmp} - set f [open tmp w] - puts $f { - exit - } - close $f - - set f [open "|[list $tcltest tmp]" r] - close $f - - set ::tcltest::testConfig(stdio) 1 -} -catch {file delete -force tmp} - -# Deliberately call the socket with the wrong number of arguments. The error -# message you get will indicate whether sockets are available on this system. - -catch {socket} msg -set ::tcltest::testConfig(socket) \ - [expr {$msg != "sockets are not available on this system"}] - -# -# Internationalization / ISO support procs -- dl -# - -if {[info commands testlocale]==""} { - - # No testlocale command, no tests... - # (it could be that we are a sub interp and we could just load - # the Tcltest package but that would interfere with tests - # that tests packages/loading in slaves...) - - set ::tcltest::testConfig(hasIsoLocale) 0 -} else { - proc ::tcltest::set_iso8859_1_locale {} { - set ::tcltest::previousLocale [testlocale ctype] - testlocale ctype $::tcltest::isoLocale - } - - proc ::tcltest::restore_locale {} { - testlocale ctype $::tcltest::previousLocale - } - - if {![info exists ::tcltest::isoLocale]} { - set ::tcltest::isoLocale fr - switch $tcl_platform(platform) { - "unix" { - - # Try some 'known' values for some platforms: - - switch -exact -- $tcl_platform(os) { - "FreeBSD" { - set ::tcltest::isoLocale fr_FR.ISO_8859-1 - } - HP-UX { - set ::tcltest::isoLocale fr_FR.iso88591 - } - Linux - - IRIX { - set ::tcltest::isoLocale fr - } - default { - - # Works on SunOS 4 and Solaris, and maybe others... - # define it to something else on your system - #if you want to test those. - - set ::tcltest::isoLocale iso_8859_1 - } - } - } - "windows" { - set ::tcltest::isoLocale French - } - } - } - - set ::tcltest::testConfig(hasIsoLocale) \ - [string length [::tcltest::set_iso8859_1_locale]] - ::tcltest::restore_locale -} - -# -# procedures that are Tk specific -# - -if {[info exists tk_version]} { - - # If the main window isn't already mapped (e.g. because the tests are - # being run automatically) , specify a precise size for it so that the - # user won't have to position it manually. - - if {![winfo ismapped .]} { - wm geometry . +0+0 - update - } - - # The following code can be used to perform tests involving a second - # process running in the background. - - # Locate the tktest executable - - set ::tcltest::tktest [info nameofexecutable] - if {$::tcltest::tktest == "{}"} { - set ::tcltest::tktest {} - puts stdout \ - "Unable to find tktest executable, skipping multiple process tests." - } - - # Create background process - - proc ::tcltest::setupbg args { - if {$::tcltest::tktest == ""} { - error "you're not running tktest so setupbg should not have been called" - } - if {[info exists ::tcltest::fd] && ($::tcltest::fd != "")} { - cleanupbg - } - - # The following code segment cannot be run on Windows prior - # to Tk 8.1b3 due to a channel I/O bug (bugID 1495). - - global tcl_platform - set ::tcltest::fd [open "|[list $::tcltest::tktest -geometry +0+0 -name tktest] $args" r+] - puts $::tcltest::fd "puts foo; flush stdout" - flush $::tcltest::fd - if {[gets $::tcltest::fd data] < 0} { - error "unexpected EOF from \"$::tcltest::tktest\"" - } - if {[string compare $data foo]} { - error "unexpected output from background process \"$data\"" - } - fileevent $::tcltest::fd readable bgReady - } - - # Send a command to the background process, catching errors and - # flushing I/O channels - - proc ::tcltest::dobg {command} { - puts $::tcltest::fd "catch [list $command] msg; update; puts \$msg; puts **DONE**; flush stdout" - flush $::tcltest::fd - set ::tcltest::bgDone 0 - set ::tcltest::bgData {} - tkwait variable ::tcltest::bgDone - set ::tcltest::bgData - } - - # Data arrived from background process. Check for special marker - # indicating end of data for this command, and make data available - # to dobg procedure. - - proc ::tcltest::bgReady {} { - set x [gets $::tcltest::fd] - if {[eof $::tcltest::fd]} { - fileevent $::tcltest::fd readable {} - set ::tcltest::bgDone 1 - } elseif {$x == "**DONE**"} { - set ::tcltest::bgDone 1 - } else { - append ::tcltest::bgData $x - } - } - - # Exit the background process, and close the pipes - - proc ::tcltest::cleanupbg {} { - catch { - puts $::tcltest::fd "exit" - close $::tcltest::fd - } - set ::tcltest::fd "" - } - - # Clean up focus after using generate event, which - # can leave the window manager with the wrong impression - # about who thinks they have the focus. (BW) - - proc ::tcltest::fixfocus {} { - catch {destroy .focus} - toplevel .focus - wm geometry .focus +0+0 - entry .focus.e - .focus.e insert 0 "fixfocus" - pack .focus.e - update - focus -force .focus.e - destroy .focus - } -} - -# threadReap -- -# -# Kill all threads except for the main thread. -# Do nothing if testthread is not defined. -# -# Arguments: -# none. -# -# Results: -# Returns the number of existing threads. - -if {[info commands testthread] != {}} { - proc ::tcltest::threadReap {} { - testthread errorproc ThreadNullError - while {[llength [testthread names]] > 1} { - foreach tid [testthread names] { - if {$tid != $::tcltest::mainThread} { - catch {testthread send -async $tid {testthread exit}} - update - } - } - } - testthread errorproc ThreadError - return [llength [testthread names]] - } -} else { - proc ::tcltest::threadReap {} { - return 1 - } -} - -# Need to catch the import because it fails if defs.tcl is sourced -# more than once. - -catch {namespace import ::tcltest::*} -return diff --git a/sandbox/fvwm.xbm b/sandbox/fvwm.xbm deleted file mode 100644 index 82c76c4..0000000 --- a/sandbox/fvwm.xbm +++ /dev/null @@ -1,21 +0,0 @@ -#define fvwm_width 58 -#define fvwm_height 26 -static char fvwm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfc, 0x1b, 0xd8, 0xc0, 0xc0, 0xe6, 0x38, 0x00, 0xfc, 0x1b, 0xcc, 0xe0, - 0x60, 0xf7, 0x7d, 0x00, 0x30, 0x18, 0xcc, 0xe0, 0x60, 0xb3, 0x6d, 0x00, - 0x30, 0x38, 0xc6, 0xf1, 0x31, 0x9b, 0x67, 0x00, 0x30, 0x30, 0x86, 0xb1, - 0x31, 0xcf, 0x73, 0x00, 0x38, 0x30, 0x83, 0x99, 0x99, 0xc7, 0x31, 0x00, - 0x38, 0x30, 0x83, 0x99, 0x99, 0xc3, 0x30, 0x00, 0x18, 0xb0, 0x81, 0x8d, - 0x8d, 0xc1, 0x30, 0x00, 0x18, 0xb0, 0x81, 0x8d, 0x8d, 0xc1, 0x30, 0x00, - 0x1c, 0xf0, 0x80, 0x87, 0xc7, 0xe0, 0x38, 0x00, 0x1c, 0x60, 0x00, 0x03, - 0xc3, 0x60, 0x18, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00}; diff --git a/sandbox/lines.pl b/sandbox/lines.pl deleted file mode 100644 index 5e7fc6e..0000000 --- a/sandbox/lines.pl +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/perl -w - -use Tk; -use Tk::Zinc; - -$mw = MainWindow->new(); - -$top = 1; -$zinc = $mw->Zinc(-render => 1, - -borderwidth => 0, - -highlightthickness => 0, - -relief => 'sunken', - -takefocus => 1, -# -tile => $papier - ); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => 500, -height => 500); - -print "coucou\n"; -$view = $zinc->add('group', $top, -tags => "controls"); -$mp3 = $zinc->add('curve', $view, [20, 280, 100, 430, 200, 430], - -linewidth => 9, - -closed => 0, - -linestyle => 'dashed', - -joinstyle => 'round', -# -firstend => [3, 12, 8], -# -lastend => "12 12 8", - -capstyle => 'round', - -linecolor => 'red:100'); - -$mw->Tk::bind('

', sub { print "perfs: ", join(',', $zinc->monitor()), "\n" }); -$mw->Tk::bind('', sub { $zinc->remove($mp3); }); -$mw->Tk::bind('', sub { exit(0); }); -$zinc->focusFollowsMouse(); -MainLoop(); diff --git a/sandbox/logo.gif b/sandbox/logo.gif deleted file mode 100644 index ce78abd..0000000 Binary files a/sandbox/logo.gif and /dev/null differ diff --git a/sandbox/smooth.tcl b/sandbox/smooth.tcl deleted file mode 100644 index 9260f7b..0000000 --- a/sandbox/smooth.tcl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so -package require Img - -set top 1 -set points "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -320 70 -300" -set lw 3 - -set r [zinc .r -backcolor gray -relief sunken] -pack .r -expand t -fill both -.r configure -width 800 -height 500 -.r scale $top 1 -1 -#.r configure -drawbboxes t -set view [.r add group $top -tags controls] - - -set smooth [.r smooth $points] -set fit [.r fit $points 0.1] - - -set mp [.r add curve $view $smooth \ - -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \ - -tags "bezier" -linewidth $lw] -set mp2 [.r add curve $view $fit \ - -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \ - -tags "bezier" -linewidth $lw] -set poly [.r add curve $view $points -marker AtcSymbol9] -set poly2 [.r add curve $view $points -marker AtcSymbol9] - -.r translate $mp2 300 0 -.r translate $poly2 300 0 - -source "controls.tcl" diff --git a/sandbox/testarc.tcl b/sandbox/testarc.tcl deleted file mode 100644 index b48b537..0000000 --- a/sandbox/testarc.tcl +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so -package require Img - -set top 1 - -#image create photo logo -file logo.gif -#image create photo papier -file texture-paper.xpm -#image create photo penguin -file xpenguin.png -#image create photo papier -file texture-paper.xpm - -set r [zinc .r -backcolor gray -relief sunken -render 0] -pack .r -expand t -fill both -.r configure -width 800 -height 500 -#.r configure -drawbboxes t -.r scale $top 1 -1 -set view [.r add group $top -tags "controls"] -.r translate $view 200 -200 -set view2 [.r add group $top] -.r translate $view2 300 -200 - -set arc [.r add arc $view "50 -10 200 -100" -filled t -closed t -pieslice t \ - -fillcolor "white|darkslateblue" -linewidth 1 \ - -startangle 0 -extent 120] -#set arc [.r add arc $view "50 -10 200 -100" -filled t -closed t -pieslice t -fillcolor "#ff0000|#00ff00" -linewidth 0] -#.r add arc $view "60 -20 190 -90" -filled t -closed t -pieslice t -fillcolor "white|darkslateblue" -linewidth 1 -linecolor white - -#set arc2 [.r clone $arc -linecolor red -firstend "8 10 5"] -#.r rotate $arc2 10 -#.r translate $arc2 100 -100 - -#.r add icon $view2 -image penguin -set cliparc [.r add arc $view "-100 100 100 -100" -filled t \ - -fillcolor tan ] -.r lower $cliparc -#.r rotate $cliparc 20 0 0 -#.r translate $cliparc 100 -40 -#.r itemconfigure $view2 -clip $cliparc -bind .r <1> ".r rotate $cliparc [expr 3.14/3] 0 0" -source "controls.tcl" -.r bind $cliparc <1> {puts a} -puts "[ .r bind $cliparc <1> ]\n" - diff --git a/sandbox/testbezier.pl b/sandbox/testbezier.pl deleted file mode 100644 index 82948fc..0000000 --- a/sandbox/testbezier.pl +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/perl -w - - -use Tk; -use Tk::Zinc; -use Controls; -use Tk::Photo; -require Tk::PNG; - - -$top = 1; -$lw = 8; -$arrow = [8, 10, 6]; - -# -# Cap, Filled, Border, Relief, Title -# -@show = ( - ['round', 0, 1, 'flat', 'CapRound'], - ['butt', 0, 1, 'flat', 'CapButt'], - ['projecting', 0, 1, 'flat', 'CapProjecting'], - ['round', 0, 1, 'sunken', 'Sunken'], - ['round', 0, 1, 'raised', 'Raised'], - ['round', 0, 1, 'groove', 'Groove'], - ['round', 0, 1, 'ridge', 'Ridge'], - ['round', 1, 1, 'roundsunken', 'RoundSunken'], - ['round', 1, 1, 'roundraised', 'RoundRaised'], - ['round', 1, 1, 'roundgroove', 'RoundGroove'], - ['round', 1, 1, 'roundridge', 'RoundRidge'], - ['round', 1, 1, 'sunkenrule', 'SunkenRule'], - ['round', 1, 1, 'raisedrule', 'RaisedRule'], - ['round', 1, 0, 'flat', 'Fill'], - ['round', 1, 1, 'flat', 'FillBorder']); - -$mw = MainWindow->new(); -#$logo = $mw->Photo(-file => "logo.gif"); -$papier = $mw->Photo(-file => "texture-paper.xpm"); - -$zinc = $mw->Zinc(-render => 1, - -lightangle => 120, - -borderwidth => 0, - -highlightthickness => 0, - -relief => 'sunken', - -takefocus => 1, - -backcolor => 'red' - # -tile => $papier - ); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => 500, -height => 500); -$zinc->scale($top, 1, -1); - -$view = $zinc->add('group', $top, - -tags => 'controls'); -$clipbez = $zinc->add('bezier', $view, [20, -20, - 890, -20, - 890, -900, - 20, -400], - -linewidth => 0, - -filled => 1, - -fillcolor => 'tan'); -#$zinc->itemconfigure($view, -# -clip => $clipbez); - -# -# Create the model -# -$model = $zinc->add('group', $view); -$mp = $zinc->add('bezier', $model, [50, -150, - 100, -50, - 270, -130, - 220, -200, - 200, -180, - 180, -300, - 140, -160, - 70, -300], - -fillcolor => 'tan', - -tags => 'bezier', - -linewidth =>$lw); -#$zinc->add('rectangle', $model, [50, -150, 100, -50]); -@bbox = $zinc->bbox($mp); -@bbox = $zinc->transform($model, \@bbox); -$x = ($bbox[2] + $bbox[0]) / 2; -$y = $bbox[1] + 5; -$zinc->add('text', $model, - -text => 'CapRound', - -color => 'blue', - -alignment => 'center', - -anchor => 's', - -tags => 'title', - -position => [$x, $y]); - -# -# Now clone for each variation on the polygon -# -$col = 0; -$row = 0; -foreach $current (@show) { - ($cap, $filled, $border, $relief, $title) = @{$current}; - $grp = $zinc->clone($model); - $zinc->translate($grp, $col * 240, $row * (-290 - (2 * $lw))); - $zinc->itemconfigure($zinc->find('withtag', "$grp*bezier"), - -capstyle => $cap, - -filled => $filled, - -linewidth => $border ? $lw : 0, - -relief => $relief, - -linecolor => $relief eq 'flat' ? 'yellow' : 'tan'); - $zinc->itemconfigure($zinc->find('withtag', "$grp*title"), - -text => $title); - $col++; - if ($col >= 4) { - $col = 0; - $row++; - } -} - -# -# Suppress the model -# -$zinc->remove($model); - -my @coords = ( -10, 0, 40, 0, 70, 0, -70, 0, 80, 0, 80, 10, -80, 10, 80, 40, 80, 70, -80, 70, 80, 80, 70, 80, -70, 80, 40, 80, 10, 80, -10, 80, 0, 80, 0, 70, -0, 70, 0, 40, 0, 10, -0, 10, 0, 0, 10, 0); -$zinc->add('bezier', $view, \@coords); - -# -# Some optional graphic features -$closed = 0; -#set smooth 0 -$arrows = 'none'; - -sub toggle_arrows { - if ($arrows eq 'none') { - $arrows = 'first'; - $f = $arrow; - $l = ''; - } - elsif ($arrows eq 'first') { - $arrows = 'last'; - $f = ''; - $l = $arrow; - } - elsif ($arrows eq 'last') { - $arrows = 'both'; - $f = $arrow; - $l = $arrow; - } - elsif ($arrows eq 'both') { - $arrows = 'none'; - $f = ''; - $l = ''; - } - $zinc->itemconfigure('bezier', - -firstend => $f, - -lastend => $l) -} - - -sub toggle_closed { - $closed = !$closed; - foreach $ curve ($zinc->find('withtag', 'bezier')) { - if ($closed) { - @coords = $zinc->coords($curve, 0, 0); - $zinc->coords($curve, 'add', \@coords); - } - else { - $zinc->coords($curve, 'remove', -1) - } - } -} - -$zinc->Tk::focus(); - -$zinc->Tk::bind('', \&toggle_arrows); -$zinc->Tk::bind('', \&toggle_closed); - -$zinc->Tk::bind('', - sub {my $ev = $zinc->XEvent(); - my $it = $zinc->find('closest', $ev->x, $ev->y); - print "$it ", $zinc->verticeat($it, $ev->x, $ev->y), "\n"}); -$zinc->Tk::bind('', sub {Tk::break}); - -new Controls($zinc); -MainLoop(); diff --git a/sandbox/testbezier.tcl b/sandbox/testbezier.tcl deleted file mode 100644 index 4b1af0b..0000000 --- a/sandbox/testbezier.tcl +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so -package require Img - -set top 1 -set lw 8 -set arrow "8 10 6" - - -# -# Cap Filled Border Relief Title -# -set show {\ - {round f 1 flat CapRound}\ - {butt f 1 flat CapButt}\ - {projecting f 1 flat CapProjecting}\ - {round f 1 sunken Sunken}\ - {round f 1 raised Raised}\ - {round f 1 groove Groove}\ - {round f 1 ridge Ridge}\ - {round t 1 sunken FilledSunken}\ - {round t 1 raised FilledRaised}\ - {round t 1 groove FilledGroove}\ - {round t 1 ridge FilledRidge}\ - {round t 0 flat Fill}\ - {round t 1 flat FillBorder}} - -image create photo logo -file /usr/share/toccata/images/logo.gif -#image create photo papier -file /usr/share/toccata/images/dgtexture-dragstrip.xpm - -set r [zinc .r -backcolor gray -relief sunken] -pack .r -expand t -fill both -.r configure -width 1024 -height 800 -.r scale $top 1 -1 -#.r configure -drawbboxes t -set view [.r add group $top -tags controls] - -# -# Create the model -# -set model [.r add group $view] -set mp [.r add bezier $model "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -160 70 -300" \ - -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \ - -tags "bezier" -linewidth $lw] -#.r add rectangle $model "50 -150 100 -50" -set bbox [.r transform $model [.r bbox $mp]] -set x [expr ([lindex $bbox 2] + [lindex $bbox 0]) / 2] -set y [expr [lindex $bbox 1] + 5] -.r add text $model -text "CapRound" -color blue -alignment center -anchor s -tags "title" \ - -position "$x $y" - -# -# Now clone for each variation on the polygon -# -set col 0 -set row 0 -foreach current $show { - foreach {cap filled border relief title} $current { - set grp [.r clone $model] - .r translate $grp [expr $col * 240] [expr $row * (-290 - (2 * $lw))] - .r itemconfigure [.r find withtag "bezier" $grp] \ - -capstyle $cap -filled $filled \ - -linewidth [expr $border ? $lw : 0] \ - -relief $relief -linecolor [expr $relief == flat ? yellow : tan] - .r itemconfigure [.r find withtag "title" $grp] -text $title - incr col - if {$col >= 4} { - set col 0 - incr row - } - } -} - -# -# Suppress the model -# -.r remove $model - - -# -# Some optional graphic features -set closed 0 -#set smooth 0 -set arrows none - -proc toggle_arrows { } { - global arrows arrow - if {$arrows == "none"} { - set arrows first - set f $arrow - set l "" - } elseif {$arrows == "first"} { - set arrows last - set f "" - set l $arrow - } elseif {$arrows == "last"} { - set arrows both - set f $arrow - set l $arrow - } elseif {$arrows == "both"} { - set arrows none - set f "" - set l "" - } - .r itemconfigure bezier -firstend $f -lastend $l -} - - -proc toggle_closed { } { - global closed - set closed [expr ! $closed] - foreach curve [.r find withtag "bezier"] { - if {$closed} { - .r coords $curve add [.r coords $curve 0] - } { - .r coords $curve remove -1 - } - } - -} - -focus .r - -bind .r "" toggle_arrows -bind .r "" toggle_closed - -bind .r "" {set it [.r find closest %x %y]; puts "$it [.r verticeat $it %x %y]"} -bind .r "" {break} - -source "controls.tcl" diff --git a/sandbox/testbitmaps.tcl b/sandbox/testbitmaps.tcl deleted file mode 100644 index 27a519b..0000000 --- a/sandbox/testbitmaps.tcl +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/local/bin/wish -f - -lappend auto_path .. -package require Tkzinc -package require Img - -set r [zinc .r -render 1 -backcolor gray -relief sunken] -set top 1 -pack .r -expand t -fill both -.r configure -width 500 -height 800 - -set r [.r add rectangle $top "30 50 80 100" -filled t -fillpattern AlphaStipple0 -linewidth 1] -.r translate $r -55 -75 -.r rotate $r 45 -.r translate $r 55 75 - -.r add text $top -position "50 110" -text "0" -.r add rectangle $top "100 50 150 100" -filled t -fillpattern AlphaStipple1 -.r add text $top -position "120 110" -text "1" -.r add rectangle $top "170 50 220 100" -filled t -fillpattern AlphaStipple2 -.r add text $top -position "190 110" -text "2" -.r add rectangle $top "240 50 290 100" -filled t -fillpattern AlphaStipple3 -.r add text $top -position "260 110" -text "3" -.r add rectangle $top "310 50 360 100" -filled t -fillpattern AlphaStipple4 -.r add text $top -position "330 110" -text "4" -.r add rectangle $top "380 50 430 100" -filled t -fillpattern AlphaStipple5 -.r add text $top -position "400 110" -text "5" - -.r add rectangle $top "30 150 80 200" -filled t -fillpattern AlphaStipple6 -.r add text $top -position "50 210" -text "6" -.r add rectangle $top "100 150 150 200" -filled t -fillpattern AlphaStipple7 -.r add text $top -position "120 210" -text "7" -.r add rectangle $top "170 150 220 200" -filled t -fillpattern AlphaStipple8 -.r add text $top -position "190 210" -text "8" -.r add rectangle $top "240 150 290 200" -filled t -fillpattern AlphaStipple9 -.r add text $top -position "260 210" -text "9" -.r add rectangle $top "310 150 360 200" -filled t -fillpattern AlphaStipple10 -.r add text $top -position "330 210" -text "10" -.r add rectangle $top "380 150 430 200" -filled t -fillpattern AlphaStipple11 -.r add text $top -position "400 210" -text "11" - -.r add rectangle $top "100 250 150 300" -filled t -fillpattern AlphaStipple12 -.r add text $top -position "120 310" -text "12" -.r add rectangle $top "170 250 220 300" -filled t -fillpattern AlphaStipple13 -.r add text $top -position "190 310" -text "13" -.r add rectangle $top "240 250 290 300" -filled t -fillpattern AlphaStipple14 -.r add text $top -position "260 310" -text "14" -.r add rectangle $top "310 250 360 300" -filled t -fillpattern AlphaStipple15 -.r add text $top -position "330 310" -text "15" - -.r add text $top -position "180 360" -text "AlphaStipple" \ - -font "-*-lucida-bold-r-normal-*-14-*-*-*-*-*-*-*" - -for {set i 0} {$i < 22} {incr i} { - set num [expr $i + 1] - .r add waypoint $top 0 \ - -position "[expr 40 + ($i % 8)*60] [expr 420 + ($i / 8)*45]" \ - -symbol "AtcSymbol$num" - .r add text $top \ - -position "[expr 36 + ($i % 8)*60] [expr 430 + ($i / 8)*45]" \ - -text "$num" \ - -font "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*" -} - -.r add text $top -position "180 560" -text "AtcSymbol" \ - -font "-*-lucida-bold-r-normal-*-14-*-*-*-*-*-*-*" - - -set im [image create bitmap toto -background "red" -file fvwm.xbm] -set icim [.r add icon 1 -image $im -position {0 0}] -.r rotate $icim 20 -.r scale $icim 1.2 1.2 -.r translate $icim 50 320 -#.r add icon 1 -image $im -position {300 10} -#.r add rectangle 1 {10 10 100 100} -tile $im -filled 1 -#$im configure -background red - -set icbit [.r add icon 1 -image @fvwm.xbm -position {100 400}] - -#.r bind $icbit ".r itemconfigure $icbit -color red; \ -# $im configure -file fvwm.xbm -foreground black" -#.r bind $icbit ".r itemconfigure $icbit -color black; \ -# $im configure -file trash.xbm -foreground red " - -#.r bind $icim "$im configure -background black" -#.r bind $icim "$im configure -background red" diff --git a/sandbox/testicon.tcl b/sandbox/testicon.tcl deleted file mode 100644 index fd8ba39..0000000 --- a/sandbox/testicon.tcl +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so -package require Img - -set top 1 - -image create photo penguin -file xpenguin.png -image create photo bouton -file bouton.xpm -image create photo boutond -file bouton-down.xpm -set mask "fvwm.xbm" - -set r [zinc .r -backcolor gray -relief sunken -render 1 -borderwidth 20] -pack .r -expand t -fill both -.r configure -width 800 -height 500 -#.r configure -drawbboxes t -.r scale $top 1 -1 -set view [.r add group $top -tags "controls"] - -proc maskicon {x y group mask color anchor} { - .r add icon $group -mask "@$mask" -position "$x $y" -anchor $anchor -color $color - .r add rectangle $group [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red -} - -proc imageicon {x y group image anchor} { - .r add icon $group -image $image -position "$x $y" -anchor $anchor - .r add rectangle $group [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red -} - -set x 50.0 -set y -100.0 -maskicon $x $y $view $mask yellow sw -set x [expr $x + 100.0] -maskicon $x $y $view $mask pink s -set x [expr $x + 100.0] -maskicon $x $y $view $mask violet se -set x 50 -set y -150 -maskicon $x $y $view $mask lightblue w -set x [expr $x + 100.0] -maskicon $x $y $view $mask blue center -set x [expr $x + 100.0] -maskicon $x $y $view $mask darkblue e -set x 50.0 -set y -200.0 -maskicon $x $y $view $mask violet nw -set x [expr $x + 100.0] -maskicon $x $y $view $mask pink n -set x [expr $x + 100.0] -maskicon $x $y $view $mask yellow ne -set x2 500.0 -set y2 -300.0 -imageicon $x2 $y2 $view penguin center - -.r add icon $view -image bouton -position "$x2 $y2" -anchor center -.r add icon $view -image boutond -position [list [expr $x2 + 50] $y2] -anchor center -.r add text $view -text essai -position "$x2 $y2" - -# -# Clip -# -puts "crée les clips" -set clip [.r add rectangle $view "50 -10 600 -300" -filled t \ - -linewidth 0 -fillcolor darkgray] -#.r rotate $clip [expr 3.14159 / 4]; #bug le rectangle forme un bonnet -# d'ane sous certains angles. -.r lower $clip -.r itemconfigure $view -clip $clip - -.r addtag test withtype icon -.r bind test "" "testpress %x %y" -.r bind test "" testrelease - -proc testpress {lx ly} { - global testx testy - set testx $lx - set testy $ly - .r bind test "" "testmotion %x %y" -} - -proc testmotion {lx ly} { - global testx testy - set it [.r find withtag test] - if {$it != ""} { - set it [.r group [lindex $it 0]] - } - set res [.r transform $it "$lx $ly $testx $testy"] - set nx [lindex $res 0] - set ny [lindex $res 1] - set ox [lindex $res 2] - set oy [lindex $res 3] - .r translate current [expr $nx - $ox] [expr $ny - $oy] - set testx $lx - set testy $ly -} -proc testrelease {} { - .r bind test "" "" -} - -source controls.tcl diff --git a/sandbox/testplug.pl b/sandbox/testplug.pl deleted file mode 100644 index 418c91a..0000000 --- a/sandbox/testplug.pl +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/perl - -use Tk; - -$mw = MainWindow->new(); - -$zinc = $mw->Zinc(-backcolor => 'gray', - -relief => 'sunken', - -width => 800, - -height => 500)->pack(-expand => 1, - -fill => 'both'); -$top = 1; -#$ent = $zinc->Entry(); -#$entryitem = $zinc->add('window', $top, -# -window => $ent, -# -position => [100, 100]); -$dcontainer = $zinc->Frame(-container => 1); -$did = $dcontainer->id(); -$vcontainer = $zinc->Frame(-container => 1); -$vid = $vcontainer->id(); -#print "container id is $id\n"; - -$dlabel = $zinc->add('text', $top, - -text => "Digistrips", - -position => [150, 30]); -$zinc->bind($dlabel, '<1>', sub { $zinc->itemconfigure($vlabel, -color => 'black'); - $zinc->itemconfigure($dlabel, -color => 'red'); - $zinc->itemconfigure($vcontitem, -visible => 0); - $zinc->itemconfigure($dcontitem, -visible => 1); }); -$vlabel = $zinc->add('text', $top, - -text => "Virtuosi", - -position => [250, 30]); -$zinc->bind($vlabel, '<1>', sub { $zinc->itemconfigure($dlabel, -color => 'black'); - $zinc->itemconfigure($vlabel, -color => 'red'); - $zinc->itemconfigure($dcontitem, -visible => 0); - $zinc->itemconfigure($vcontitem, -visible => 1); }); -$dcontitem = $zinc->add('window', $top, - -window => $dcontainer, - -position => [50, 75], - -visible => 0); -$vcontitem = $zinc->add('window', $top, - -window => $vcontainer, - -position => [50, 75], - -visible => 0); - -$mw->update(); - -system("digistripsIII -stan --use $did -style standalone-1024x768 &"); -system("virtuosi -g 1024x768 -use $vid &"); - -MainLoop(); diff --git a/sandbox/testpoly.tcl b/sandbox/testpoly.tcl deleted file mode 100644 index 2a16288..0000000 --- a/sandbox/testpoly.tcl +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/local/bin/wish -f - -lappend auto_path .. -package require Tkzinc -package require Img - -set top 1 -set lw 8 -set marker AtcSymbol9 -set arrow "8 10 6" - - -# -# Cap Join Filled Border Relief Title -# -set show {\ - {round round f 1 flat JoinRound}\ - {round bevel f 1 flat JoinBevel}\ - {round miter f 1 flat JoinMiter}\ - {butt round f 1 flat CapButt}\ - {projecting round f 1 flat CapProjecting}\ - {round round f 1 sunken Sunken}\ - {round round f 1 raised Raised}\ - {round round f 1 groove Groove}\ - {round round f 1 ridge Ridge}\ - {round round t 1 sunken FilledSunken}\ - {round round t 1 raised FilledRaised}\ - {round round t 1 groove FilledGroove}\ - {round round t 1 ridge FilledRidge}\ - {round round f 0 flat Marker}\ - {round round t 0 flat Fill}\ - {round round t 1 flat FillBorder}} - -image create photo logo -file logo.gif -#image create photo papier -file /usr/share/toccata/images/dgtexture-dragstrip.xpm - -set r [zinc .r -backcolor gray -relief sunken -render 0] -pack .r -expand t -fill both -.r configure -width 1024 -height 800 -.r scale $top 1 -1 -#.r configure -drawbboxes t -set view [.r add group $top -tags controls] - -# -# Create the model -# -set model [.r add group $view] -set mp [.r add curve $model "50 -150 100 -50 270 -130 220 -200 200 -180 180 -300 140 -160 70 -300" \ - -linecolor yellow -fillcolor tan -fillpattern AlphaStipple8 \ - -markercolor red -tags "poly" -linewidth $lw] -.r add rectangle $model "50 -150 100 -50" -set bbox [.r transform $model [.r bbox $mp]] -set x [expr ([lindex $bbox 2] + [lindex $bbox 0]) / 2] -set y [expr [lindex $bbox 1] + 5] -.r add text $model -text "CapRound" -color blue -alignment center -anchor s -tags "title" \ - -position "$x $y" - -# -# Now clone for each variation on the polygon -# -proc linecol { relief } { - if {[string compare $relief flat]} { - return yellow - } else { - return tan - } -} - -set col 0 -set row 0 -foreach current $show { - foreach {cap join filled border relief title} $current { - set grp [.r clone $model] - .r translate $grp [expr $col * 240] [expr $row * (-290 - (2 * $lw))] - .r itemconfigure [.r find withtag "$grp*poly"] \ - -capstyle $cap -joinstyle $join -filled $filled \ - -linewidth [expr $border ? $lw : 0] -relief $relief \ - -linecolor [linecol $relief] - .r itemconfigure [.r find withtag "$grp*title"] -text $title - incr col - if {$col >= 4} { - set col 0 - incr row - } - } -} - -# -# Suppress the model -# -.r remove $model - - -# -# Some optional graphic features -set closed 0 -set marks 0 -#set smooth 0 -set arrows none - -proc toggle_arrows { } { - global arrows arrow - if {$arrows == "none"} { - set arrows first - set f $arrow - set l "" - } elseif {$arrows == "first"} { - set arrows last - set f "" - set l $arrow - } elseif {$arrows == "last"} { - set arrows both - set f $arrow - set l $arrow - } elseif {$arrows == "both"} { - set arrows none - set f "" - set l "" - } - .r itemconfigure poly -firstend $f -lastend $l -} - -proc toggle_marks { } { - global marks marker - set marks [expr ! $marks] - if {$marks} { - .r itemconfigure poly -marker $marker - } { - .r itemconfigure poly -marker "" - } -} - -#proc toggle_smooth { } { -# global smooth -# set smooth [expr ! $smooth] -# .r itemconfigure poly -smoothed $smooth -#} - -proc toggle_closed { } { - global closed - set closed [expr ! $closed] - foreach curve [.r find withtag "poly"] { - .r itemconfigure $curve -closed $closed - } - -} - -focus .r - -bind .r "" toggle_arrows -bind .r "" toggle_closed -bind .r "" toggle_marks - -bind .r "" {set it [.r find closest %x %y]; puts "$it [.r verticeat $it %x %y]"} -bind .r "" {break} - -source "controls.tcl" diff --git a/sandbox/testrect.pl b/sandbox/testrect.pl deleted file mode 100644 index 8a4d399..0000000 --- a/sandbox/testrect.pl +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/perl -w - -use Tk; -use Tk::Zinc; - -use Controls; - -$mw = MainWindow->new(); - - -################################################### -# creation zinc -################################################### -$top = 1; -$zinc_width = 800; -$zinc_height = 500; - -$zinc = $mw->Zinc(-backcolor => 'gray65', -relief => 'sunken'); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => $zinc_width, -height => $zinc_height); - -#$zinc->configure(-drawbboxes => 1); - -#print "cells ", $zinc->cells(), " visual ", $zinc->visual(), " ", $zinc->visualsavailable(), "\n"; - -$zinc->scale($top, 1, -1); -$view = $zinc->add('group', $top, -tags => ["controls"]); -$zinc->translate($view, 300, -200); -$view2 = $zinc->add('group', $top); -$zinc->translate($view2, 100, -50); - - -#$rect0 = $zinc->add('rectangle', $view [100, -105, 200, -305], -# -filled => t, -# -fillcolor => "white|cadetblue3"); - -$color1 = 'darkslateblue'; -$color2 = '#f0ffff'; -$gangle = 0; -$shades = 8; -$rect1 = $zinc->add('rectangle', $view, [-50, 100, 50, -100], - -filled => 1, - -relief => 'flat', - -linewidth => 1, - -fillpattern => 'AlphaStipple7', - -fillcolor => "$color1|$color2/$gangle%$shades"); -# -# Mire -$zinc->add('curve', $view, [-10, 0, 10, 0], - -linecolor => 'red'); -$zinc->add('curve', $view, [0, -10, 0, 10], - -linecolor => 'red'); - -$handle = $zinc->add('arc', $view, [-3, -106, 3, -112], - -filled => 1, - -fillcolor => 'red'); -$zinc->bind($handle, '', \&adjustcontrol); - -sub adjustcontrol { - my $ev = $zinc->XEvent(); - my $x; - my $y; - my ($xo, $yo, $xc, $yc) = $zinc->coords($rect1); - - ($x, $y) = $zinc->transform($view, [$ev->x, 0]); - if ($x < $xo) { - $x = $xo; - } - elsif ($x > $xc) { - $x = $xc; - } - $zinc->coords($handle, [$x - 3, $yc-6, $x + 3, $yc-12]); - $x = ($x - $xo)*100/($xc-$xo); - $zinc->itemconfigure($rect1, - -fillcolor => "$color1 0 $x|$color2/$gangle%$shades"); -} - -# -# 72 61 139 = DarkSlateBlue -# -# 240 255 255 = azure -# -#set rect2 [.r add rectangle $view "202 -320 302 -350" -filled t -fillcolor darkgray -linewidth 2] - -#set rect3 [.r add rectangle $view "250 -100 350 -300" -filled t -relief raised -linewidth 4 -fillcolor "white|cadetblue3" -linecolor white] - -#set rect4 [.r add rectangle $view2 "0 0 101 -81" -linewidth 2 -linecolor darkgray -filled t] -#.r itemconfigure $rect4 -fillcolor "white|darkslateblue" - -#set rect5 [.r add rectangle $view2 "0 0 101 -81" -linewidth 2 -linecolor blue -filled t -fillcolor blue -relief sunken] -#.r translate $rect5 0 -90 - - -new Controls($zinc); - -MainLoop(); - - -1; diff --git a/sandbox/testrelief.pl b/sandbox/testrelief.pl deleted file mode 100644 index 79c9a31..0000000 --- a/sandbox/testrelief.pl +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/perl -w - -use Tk; -use Tk::Zinc; -use Controls; - -$top = 1; -$lw = 8; - -$mw = MainWindow->new(); -$zinc = $mw->Zinc(-backcolor => 'gray', - -relief => 'sunken', - -lightangle => 120, - -render => 1); -$zinc->pack(-expand => 1, - -fill => 'both'); -$zinc->configure(-width => 1024, - -height => 800); -$zinc->scale($top, 1, -1); - -$view = $zinc->add('group', $top, -tags => 'controls'); - -sub polypoints { - ($ox, $oy, $rad, $n, $startangle) = @_; - - $step = 2 * 3.14159 / $n; - $startangle = $startangle*3.14159/180; - $coords = []; - for ($i = 0; $i < $n; $i++) { - $x = $ox + ($rad * cos($i * $step + $startangle)); - $y = $oy + ($rad * sin($i * $step + $startangle)); - push(@{$coords}, $x, $y); - } - push(@{$coords}, $coords->[0], $coords->[1]); - return $coords -} - -$zinc->add('curve', $view, polypoints(200, -200, 100, 40, 0), - -relief => 'raised', - -linewidth => $lw, - -smoothrelief => 1, - -fillcolor => 'lightblue', - -linecolor => 'lightblue', - -filled => 1); - -$zinc->add('curve', $view, polypoints(450, -200, 100, 40, 0), - -relief => 'raised', - -linewidth => $lw, - -smoothrelief => 1, - -fillcolor => 'tan', - -linecolor => 'tan', - -filled => 1); - -$zinc->add('curve', $view, polypoints(700, -200, 100, 40, 0), - -relief => 'sunken', - -linewidth => $lw, - -smoothrelief => 1, - -fillcolor => 'tan', - -linecolor => 'tan', - -closed => 1, - -filled => 1); - -$zinc->add('curve', $view, polypoints(200, -450, 100, 7, -45), - -relief => 'sunken', - -linewidth => $lw, - -fillcolor => 'tan', - -linecolor => 'tan', - -filled => 1); - - -new Controls($zinc); -MainLoop(); - diff --git a/sandbox/testrelief.tcl b/sandbox/testrelief.tcl deleted file mode 100644 index e75cc71..0000000 --- a/sandbox/testrelief.tcl +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so - -set top 1 -set lw 8 - -set r [zinc .r -backcolor gray -relief sunken -lightangle 120 -render 0] -pack .r -expand t -fill both -.r configure -width 1024 -height 800 -.r scale $top 1 -1 - -set view [.r add group $top -tags controls] - -proc polypoints { ox oy rad n startangle } { - set step [expr 2 * 3.14159 / $n] - set startangle [expr $startangle*3.14159/180] - set coords "" - for {set i 0} {$i < $n} {incr i} { - set x [expr $ox + ($rad * cos($i * $step + $startangle))]; - set y [expr $oy + ($rad * sin($i * $step + $startangle))]; - lappend coords $x $y; - } - lappend coords [lindex $coords 0] [lindex $coords 1] - return $coords -} - -set poly [ .r add curve $view [polypoints 200 -200 100 40 0] \ - -relief raised -linewidth $lw -smoothrelief 1 \ - -fillcolor lightblue -linecolor lightblue -filled t] - -set poly [ .r add curve $view [polypoints 450 -200 100 40 0] \ - -relief raised -linewidth $lw \ - -fillcolor tan -linecolor tan -filled t] - -set poly [ .r add curve $view [polypoints 700 -200 100 40 0] \ - -relief sunken -linewidth $lw \ - -fillcolor tan -linecolor tan -filled t] - -set poly [ .r add curve $view [polypoints 200 -450 100 4 -45] \ - -relief sunken -linewidth $lw \ - -fillcolor tan -linecolor tan -filled t] - - -source "controls.tcl" diff --git a/sandbox/testshape.pl b/sandbox/testshape.pl deleted file mode 100644 index 5897912..0000000 --- a/sandbox/testshape.pl +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/perl -w - -use Tk; -use Tk::Zinc; -use Controls; - -$mw = MainWindow->new(); - -$top = 1; -$zinc = $mw->Zinc(-render => 1, - -borderwidth => 0, -# -fullreshape => 0, - -relief => 'sunken'); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => 500, -height => 500); - -$zinc->gname('white:40 0 60|black 50|white 100(0 0', 'oeil'); -$zinc->gname('white:0 0 10|black:100 100/0', 'oeil2'); -$zinc->gname('white:100|black:100(-35 -25', 'boule'); -$zinc->gname('white:100|black:100(-15 -100', 'arrondi'); -$zinc->gname('white:100|black:100/45', 'cyl'); -$zinc->gname('white|black[50 0', 'path'); - -# $arc = $zinc->add('arc', $top, [50, 50, 200, 100], -# -visible => 0); -#$zinc->itemconfigure($top, -clip => $arc); - -$view = $zinc->add('group', $top, -tags => "controls"); -# $cv = $zinc->add('curve', $view, [50, 50, 100, 150, 270, 70, -# 220, 0, 200, 20, 180, 100, -# 140, 40, 70, 100], -# -visible => 1, -# -closed => 1, -# -filled => 1); - -$g1 = $zinc->add('group', $view); -$zinc->translate($g1, 100, 300); -$rect = $zinc->add('rectangle', $g1, [-40,-50, 40,50], - -filled => 1, - -fillcolor => 'path' - ); -$g2 = $zinc->add('group', $view); -$zinc->translate($g2, 200, 300); -$arc = $zinc->add('arc', $g2, [0,0, 100,100], - -filled => 1, - -linecolor => 'white', - -fillcolor => 'boule', - -startangle => 120, - -extent => 120, - -closed => 1, - -pieslice => 1, -# -fillcolor => 'tan' - ); -$arc2 = $zinc->add('arc', $view, [90,0, 160,50], - -visible => 0, - -linewidth => 0, - -filled => 1, - -fillcolor => 'brown'); -$g3 = $zinc->add('group', $view); -$zinc->translate($g3, 300, 300); -$cv3 = $zinc->add('curve', $g3, -# [[-50, -40], [0, 0], [-50, 40], [50, 40], [50, -40]], - [-50, -40, 0, 0, -50, 40, 50, 40, 50, -40], - -visible => 0, - -filled => 1, - -fillcolor => "#ffffff:100 0 28|#66848c:100 80|#7192aa:100 100/270" -# -fillcolor => 'cyl' -); - -# $rect = $zinc->add('rectangle', $view, [200,230, 220,250], -# -visible => 1, -# -linewidth => 2, -# -relief => 'sunken', -# -filled => 1, -# -linecolor => 'white', -# -fillcolor => 'tan'); -$cv2 = $zinc->add('curve', $view, [], - -visible => 1, - -linewidth => 2, - -linecolor => 'white', - -fillcolor => 'tan', - -fillrule => 'positive', - -relief => 'sunken', - -closed => 1, - -filled => 1); -$text = $zinc->add('text', $view, - -visible => 1, - -text => 'Un Texte ICI°°°°°', - -position => [200, 100], - -color => '#008000'); -$zinc->contour($cv2, 'add', 1, [[20, 20], [20, 100, 'c'], [120, 100], [120, 20]]); -$zinc->contour($cv2, 'add', -1, [40, 40, 80, 40, 80, 80, 40, 80]); -$zinc->contour($cv2, 'add', 1, [60, 50, 60, 60, 70, 60, 70, 50]); -$zinc->contour($cv2, 'add', -1, [90, 70, 150, 70, 150, 150, 90, 150]); -$zinc->contour($cv2, 'add', 1, [200, 200, 200, 220, 220, 220, 220, 200]); -$zinc->contour($cv2, 'add', -1, [100, 10, 180, 10, 180, 60, 100, 60]); - -$zinc->contour($cv2, 'add', 1, $arc2); -$zinc->contour($cv2, 'add', 1, $text); - -# $rect2 = $zinc->add('rectangle', $view, [40,81, 80,130], -# -visible => 1, -# -linewidth => 1, -# -relief => 'sunken', -# -filled => 1, -# -linecolor => 'white', -# -fillcolor => 'tan'); - -new Controls($zinc); - -$zinc->Tk::bind('', sub {print "hop\n", $zinc->contour($cv2, 'remove', 1);}); -$zinc->Tk::bind('', sub {my ($x,$y,$c) = $zinc->coords($cv2, 0, 1); - if ($c eq 'c') { - $zinc->coords($cv2, 0, 1, [[20, 100]]); - } - else { - $zinc->coords($cv2, 0, 1, [[20, 100, 'c']]); - }}); -$zinc->Tk::bind('<1>', sub { - my $ev = $zinc->XEvent(); - my $it = $zinc->find('closest', $ev->x, $ev->y); - print "Closest: $it\n"; -# my @t = $zinc->vertexat($it, $ev->x, $ev->y); -# print "VertexAt: ", join(', ', @t), "\n"; - $zinc->bind($cv2, '<1>', sub { print "zou\n";}); - $zinc->coords($cv2, 0, [[100,0]]); - print $zinc->bind($cv2, '<1>'), "\n"; - }); - -$zinc->focusFollowsMouse(); - -MainLoop(); diff --git a/sandbox/testshape.tcl b/sandbox/testshape.tcl deleted file mode 100644 index 2ed5327..0000000 --- a/sandbox/testshape.tcl +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so - -set top 1 - -set r [zinc .r -render 0 -borderwidth 0 -fullreshape 0 -relief sunken] -pack $r -expand t -fill both -$r configure -width 500 -height 500 - -set arc [.r add arc $top "50 50 200 150" -visible 1 -closed 0 -filled 0 -fillcolor white -extent 200 -pieslice 0] - -set cv [.r add curve $top "50 50 100 150 270 70 220 0 200 20 180 -100 140 40 70 -100" \ - -visible 0] - -.r rotate $arc [expr 3.14/10] 125 100 - -.r itemconfigure $top -clip $cv diff --git a/sandbox/testtext.tcl b/sandbox/testtext.tcl deleted file mode 100644 index 44d3d8f..0000000 --- a/sandbox/testtext.tcl +++ /dev/null @@ -1,138 +0,0 @@ -lappend auto_path .. - -package require Tkzinc -package require Img - -set mask "/usr/X11R6/include/X11/bitmaps/fvwm.xbm" - -set r [zinc .r -backcolor gray -relief sunken \ - -insertbackground red -insertwidth 10 -render 0] -pack .r -expand t -fill both -.r configure -width 800 -height 500 -# .r configure -drawbboxes t -set top [.r add group 1] -.r addtag controls withtag $top - -.r add rectangle $top "-50 0 +50 1" -composescale 0 -.r add rectangle $top "0 -50 1 +50" -composescale 0 - -set x 50.0 -set y 100.0 -.r add text $top -text "Ancrage Sud Ouest" -position "$x $y" -anchor sw \ - -color yellow -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Sud" -position "$x $y" -anchor s -color pink -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Sud Est" -position "$x $y" -anchor se \ - -color violet -overstriked y -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x 50 -set y 150 -.r add text $top -text "Ancrage Ouest" -position "$x $y" -anchor w -color lightblue -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Central" -position "$x $y" -anchor center -color blue -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Est" -position "$x $y" -anchor e -color darkblue -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x 50.0 -set y 200.0 -.r add text $top -text "Ancrage Nord Ouest" -position "$x $y" -anchor nw \ - -color violet -underlined y -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Nord" -position "$x $y" -anchor n -color pink -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x [expr $x + 200.0] -.r add text $top -text "Ancrage Nord Est" -position "$x $y" -anchor ne -color yellow -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x 150 -set y 300 -.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\n" -position "$x $y" -anchor center -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x 400 -set y 300 -set anim [.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\nLe texte central montre l'utilisation\nd'un espacement des lignes programmable." -position "$x $y" -anchor center -alignment center -spacing -5 -font {times 14 bold italic}] -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - -set x 650 -set y 300 -.r add text $top -text "Ce texte tient sur plusieurs lignes.\nLes alignements :\n- à gauche\n- à droite\n- au centre\nsont également mis en évidence.\n" -position "$x $y" -anchor center -alignment right -.r add rectangle $top [list [expr $x - 3.0] [expr $y - 3.0] \ - [expr $x + 3.0] [expr $y + 3.0]] -filled 1 -fillcolor red - - -.r addtag text withtype text -.r bind text "<1>" {textB1press %x %y} -.r bind text "" {textB1move %x %y} -.r bind text "" {textB1move %x %y} -.r bind text "" {.r select adjust current @%x,%y} -.r bind text "" {.r insert [.r focus] insert %A} -.r bind text "" {.r insert [.r focus] insert %A} -.r bind text "" {.r insert [.r focus] insert \n} -.r bind text "" textBs -.r bind text "" textBs -.r bind text "" textBs -.r bind text "" {.r dchars text sel.first sel.last} -.r bind text "" {.r insert [.r focus] insert [selection get]} - -proc textB1press {x y} { - .r cursor current "@$x,$y" - .r focus current - focus .r - .r select from current "@$x,$y" -} - -proc textB1move {x y} { - .r select to current "@$x,$y" -} - -proc textBs { } { - set item [.r focus] - set i [expr [.r index $item insert] - 1] - if { $i >= 0 } { - .r dchars $item $i - } -} - -# -# Add controls to the main group -# -source controls.tcl - -# -# Line spacing animation (crude). -# -if {0} { - set i 0 - while {1} { - update - after 200 - .r itemconfigure $anim -spacing [expr ($i % 20) - 5] - incr i - } -} diff --git a/sandbox/testwind.tcl b/sandbox/testwind.tcl deleted file mode 100644 index 5ff7f76..0000000 --- a/sandbox/testwind.tcl +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/local/bin/wish -f - -load ../tkzinc3.2.so - -set top 1 - -set r [zinc .r -backcolor gray -relief sunken] -pack .r -expand t -fill both -.r configure -width 800 -height 500 - -.r addtag controls withtag $top - -set ent [entry .r.entry] -set wind [.r add window $top -window $ent -position "100 100"] - -set container [frame .r.cont -container t] -set id [winfo id $container] -puts "container id is $id\n" -set cont [.r add window $top -window $container -position "200 200"] diff --git a/sandbox/testzinc.pl b/sandbox/testzinc.pl deleted file mode 100644 index f25f9de..0000000 --- a/sandbox/testzinc.pl +++ /dev/null @@ -1,503 +0,0 @@ -#!/usr/bin/perl -w - - -use Tk; -use Tk::Zinc; -use Tk::Photo; -use Tk::ZincText; -#use ZincText; -use Controls; - -$map_path = "/usr/share/toccata/maps"; - -$mw = MainWindow->new(); -$logo = $mw->Photo(-file => "logo.gif"); - - -################################################### -# creation zinc -################################################### -$top = 1; -$scale = 1.0; -$center_x = 0.0; -$center_y = 0.0; -$zinc_width = 800; -$zinc_height = 500; -$delay = 2000; -$rate = 0.3; -%tracks = (); - -$zinc = $mw->Zinc(-render => 2, -backcolor => 'gray65', -relief => 'sunken'); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => $zinc_width, -height => $zinc_height); -#$radar = $top; -$radar = $zinc->add('group', $radar, -tags => ['controls', 'radar']); -$zinc->configure(-overlapmanager => $radar); - -new ZincText($zinc); -################################################### -# Création fonctions de contrôle à la souris -################################################### -new Controls($zinc); - -################################################### -# creation panneau controle -################################################### -$rc = $mw->Frame()->pack(); -$rc->Button(-text => 'Up', - -command => sub { $center_y -= 30.0; - update_transform($zinc); })->grid(-row => 0, - -column => 2, - -sticky, 'ew'); -$rc->Button(-text => 'Down', - -command => sub { $center_y += 30.0; - update_transform($zinc); })->grid(-row => 2, - -column => 2, - -sticky, 'ew'); -$rc->Button(-text => 'Left', - -command => sub { $center_x += 30.0; - update_transform($zinc); })->grid(-row => 1, - -column => 1); -$rc->Button(-text => 'Right', - -command => sub { $center_x -= 30.0; - update_transform($zinc); })->grid(-row => 1, - -column => 3); -$rc->Button(-text => 'Expand', - -command => sub { $scale *= 1.1; - update_transform($zinc); })->grid(-row => 1, - -column => 4); -$rc->Button(-text => 'Shrink', - -command => sub { $scale *= 0.9; - update_transform($zinc); })->grid(-row => 1, - -column => 0); -$rc->Button(-text => 'Reset', - -command => sub { $scale = 1.0; - $center_x = $center_y = 0.0; - update_transform($zinc); })->grid(-row => 1, - -column => 2, - -sticky, 'ew'); -$rc->Button(-text => 'Quit', - -command => \&exit)->grid(-row => 3, - -column => 2); - - -################################################### -# Code de reconfiguration lors d'un -# redimensionnement. -################################################### -$zinc->Tk::bind('', [\&resize]); - -sub resize { - my ($zinc) = @_; - my $ev = $zinc->XEvent(); - my $width = $ev->w; - my $height = $ev->h; - my $bw = $zinc->cget(-borderwidth); - $zinc_width = $width - 2*$bw; - $zinc_height = $height - 2*$bw; - update_transform($zinc); -} - -sub update_transform { - my ($zinc) = @_; - - $zinc->treset($top); - $zinc->translate($top, -$center_x, -$center_y); - $zinc->scale($top, $scale, $scale); - $zinc->scale($top, 1, -1); - $zinc->translate($top, $zinc_width/2, $zinc_height/2); -} - - -################################################### -# Creation de pistes. -################################################### -sub create_tracks { - my $i = 20; - my $j; - my $track; - my $x; - my $y; - my $w = $zinc_width / $scale; - my $h = $zinc_height / $scale; - my $d; - my $item; - - for ( ; $i > 0; $i--) { - $track = {}; - $track->{'item'} = $item = $zinc->add('track', $radar, 6); - $tracks{$item} = $track; - $track->{'x'} = rand($w) - $w/2 + $center_x; - $track->{'y'} = rand($h) - $h/2 + $center_y; - $d = (rand() > 0.5) ? 1 : -1; - $track->{'vx'} = (8.0 + rand(10.0)) * $d; -# $track->{'vx'} = 10; - $d = (rand() > 0.5) ? 1 : -1; - $track->{'vy'} = (8.0 + rand(10.0)) * $d; -# $track->{'vy'} = -10; - $zinc->itemconfigure($item, - -lastasfirst => 1, - -symbolcolor => 'red', - -position => [$track->{'x'}, $track->{'y'}], - -speedvector => [$track->{'vx'}, $track->{'vy'}], - -speedvectorsensitive => 1, - -speedvectorwidth => 2, - -speedvectormark => 1, - -speedvectorticks => 1, - -labeldistance => 30, - -markersize => 20, - -historycolor => 'gray30', - -filledhistory => 0, - -circlehistory => 1, - -labelformat => "x71x50+0+0 a0a0^0^0 a0a0^0>1 a0a0>2>1 a0a0>3>1 a0a0^0>2" - ); - $zinc->itemconfigure($item, 0, - -filled => 0, - -backcolor => 'gray60', -# -border => "contour", - -sensitive => 1 - ); - $zinc->itemconfigure($item, 1, - -filled => 1, - -backcolor => 'gray55', - -text => "AFR001"); - $zinc->itemconfigure($item, 2, - -filled => 0, - -backcolor => 'gray65', - -text => "360"); - $zinc->itemconfigure($item, 3, - -filled => 0, - -backcolor => 'gray65', - -text => "/"); - $zinc->itemconfigure($item, 4, - -filled => 0, - -backcolor => 'gray65', - -text => "410"); - $zinc->itemconfigure($item, 5, - -filled => 0, - -backcolor => 'gray65', - -text => "Balise"); - my $b_on = sub { #print_current($zinc); - $zinc->itemconfigure('current', $zinc->currentpart(), - -border => 'contour')}; - my $b_off = sub { #print_current($zinc); - $zinc->itemconfigure('current', $zinc->currentpart(), - -border => 'noborder')}; - my $tog_b = sub { my $current = $zinc->find('withtag', 'current'); - my $curpart = $zinc->currentpart(); - if ($curpart =~ '[0-9]+') { - my $on_off = $zinc->itemcget($current, $curpart, -sensitive); - $zinc->itemconfigure($current, $curpart, - -sensitive => !$on_off); - } - }; - for ($j = 0; $j < 6; $j++) { - $zinc->bind($item.":$j", '', $b_on); - $zinc->bind($item.":$j", '', $b_off); - $zinc->bind($item, '<1>', $tog_b); - $zinc->bind($item, '', sub {}); - } - $zinc->bind($item, '', - sub { #print_current($zinc); - $zinc->itemconfigure('current', - -historycolor => 'red', - -symbolcolor => 'red', - -markercolor => 'red', - -leaderwidth => 2, - -leadercolor => 'red', - -speedvectorwidth => 2, - -speedvectorcolor => 'red')}); - $zinc->bind($item, '', - sub { #print_current($zinc); - $zinc->itemconfigure('current', - -historycolor => 'black', - -symbolcolor => 'black', - -markercolor => 'black', - -leaderwidth => 1, - -leadercolor => 'black', - -speedvectorwidth => 1, - -speedvectorcolor => 'black')}); - $zinc->bind($item.':position', '<1>', [\&create_route]); - $zinc->bind($item.':position', '', sub { }); - $track->{'route'} = 0; - } -} - -create_tracks(); - -sub print_current { - my ($zinc) = @_; - my $current; - - $current = $zinc->find('withtag', 'current'); - print join(' ', $current), "\n"; -# print ref($zinc->itemcget($current, -position)) ? 'ref' : 'pas ref', "\n"; -# print 'tout '; -# for $attr ($zinc->itemconfigure($current)) { -# print (join(',', @$attr)); -# } -# print "\n\n"; -# print '-position ', join(',', $zinc->itemconfigure($current, -position)), "\n\n"; -} - -################################################### -# creation way point -################################################### -sub create_route { - my ($zinc) = @_; - my $wp; - my $connected; - my $x; - my $y; - my $i = 4; - my $track = $tracks{$zinc->find('withtag', 'current')}; - - if ($track->{'route'} == 0) { - $x = $track->{'x'} + 8.0 * $track->{'vx'}; - $y = $track->{'y'} + 8.0 * $track->{'vy'}; - $connected = $track->{'item'}; - for ( ; $i > 0; $i--) { - $wp = $zinc->add('waypoint', 'radar', 2, - -position => [$x, $y], - -connecteditem => $connected, - -connectioncolor => 'green', - -symbolcolor => 'green', - -labelformat => 'x20x18+0+0'); - $zinc->lower($wp, $connected); - $zinc->bind($wp.':0', '', - sub {$zinc->itemconfigure('current', 0, -border => 'contour')}); - $zinc->bind($wp.':position', '', - sub {$zinc->itemconfigure('current', -symbolcolor => 'red')}); - $zinc->bind($wp.':leader', '', - sub {$zinc->itemconfigure('current', -leadercolor => 'red')}); - $zinc->bind($wp.':connection', '', - sub {$zinc->itemconfigure('current', -connectioncolor => 'red')}); - $zinc->bind($wp.':0', '', - sub {$zinc->itemconfigure('current', 0, -border => '')}); - $zinc->bind($wp.':position', '', - sub {$zinc->itemconfigure('current', -symbolcolor => 'green')}); - $zinc->bind($wp.':leader', '', - sub {$zinc->itemconfigure('current', -leadercolor => 'black')}); - $zinc->bind($wp.':connection', '', - sub {$zinc->itemconfigure('current', -connectioncolor => 'green')}); - $zinc->itemconfigure($wp, 0, - -text => "$i", - -filled => 1, - -backcolor => 'gray55'); - $zinc->bind($wp.':position', '<1>', [\&del_way_point]); - $x += (2.0 + rand(8.0)) * $track->{'vx'}; - $y += (2.0 + rand(8.0)) * $track->{'vy'}; - $connected = $wp; - } - $track->{'route'} = $wp; - } - else { - $wp = $track->{'route'}; - while ($wp != $track->{'item'}) { - $track->{'route'} = $zinc->itemcget($wp, -connecteditem); - $zinc->bind($wp.':position', '<1>', ''); - $zinc->bind($wp.':position', '', ''); - $zinc->bind($wp.':position', '', ''); - $zinc->bind($wp.':leader', '', ''); - $zinc->bind($wp.':leader', '', ''); - $zinc->bind($wp.':connection', '', ''); - $zinc->bind($wp.':connection', '', ''); - $zinc->bind($wp.':0', '', ''); - $zinc->bind($wp.':0', '', ''); - $zinc->remove($wp); - $wp = $track->{'route'}; - } - $track->{'route'} = 0; - } -} - -################################################### -# suppression waypoint intermediaire -################################################### -sub find_track { - my ($zinc, $wp) = @_; - my $connected = $wp; - - while ($zinc->type($connected) ne 'track') { - $connected = $zinc->itemcget($connected, -connecteditem); - } - return $connected; -} - -sub del_way_point { - my ($zinc) = @_; - my $wp = $zinc->find('withtag', 'current'); - my $track = $tracks{find_track($zinc, $wp)}; - my $next = $zinc->itemcget($wp, -connecteditem); - my $prev; - my $prevnext; - - $prev = $track->{'route'}; - if ($prev != $wp) { - $prevnext = $zinc->itemcget($prev, -connecteditem); - while ($prevnext != $wp) { - $prev = $prevnext; - $prevnext = $zinc->itemcget($prev, -connecteditem); - } - } - $zinc->itemconfigure($prev, -connecteditem => $next); - $zinc->bind($wp.':position', '<1>', ''); - $zinc->remove($wp); - if ($wp == $track->{'route'}) { - if ($next == $track->{'item'}) { - $track->{'route'} = 0; - } - else { - $track->{'route'} = $next; - } - } -} - -sub stick_wp { - my ($zinc) = @_; - my $ev = $zinc->XEvent(); - - if ($just_wiped) { - $just_wiped = 0; - return; - } - my ($x, $y) = $zinc->transform('radar', [$ev->x, $ev->y]); - my $wp = $zinc->add('waypoint', 'radar', 2, - -position => [$x, $y], - -connectioncolor => 'red', - -symbolcolor => 'red', - -labelformat => 'a2a2+0+0', - -tags => ['text']); - $zinc->itemconfigure($wp, 0, - -text => "$x".'@'."$y", - -color => 'red', - -filled => 1, - -backcolor => 'gray55'); - $zinc->bind($wp.':position', '<1>', [\&wipe_wp]); -} - -sub wipe_wp { - my ($zinc) = @_; - $zinc->remove('current'); - $just_wiped = 1; -} - -$zinc->Tk::bind('<2>', [\&stick_wp]); - - -################################################### -# creation macro -################################################### -#$macro = $zinc->add("tabular", $radar, 10, -# -labelformat => "x40x20+0+0 x40x20+40+0" -# ); -#$zinc->itemconfigure($macro, 0 , -text => "une"); -#$zinc->itemconfigure($macro, 1, -text => "macro"); -#$zinc->itemconfigure($macro, -connecteditem => $track); -#$zinc->bind($macro.":0", "", [ \&borders, "on"]); -#$zinc->bind($macro.":0", "", [ \&borders, "off"]); - -################################################### -# creation ministrip -################################################### -$ministrip = $zinc->add("tabular", $radar, 10, - -labelformat => "x80x20+0+0", - -position => [100, 10]); -$zinc->itemconfigure($ministrip, 0 , -text => 'ministrip'); -$zinc->bind($ministrip.':0', '', - sub {$zinc->itemconfigure('current', 0, -border => 'contour')}); -$zinc->bind($ministrip.':0', '', - sub {$zinc->itemconfigure('current', 0, -border => '')}); - -################################################### -# creation map -################################################### -$mw->videomap("load", "$map_path/videomap_paris-w_90_2", 0, "paris-w"); -$mw->videomap("load", "$map_path/videomap_orly", 17, "orly"); -$mw->videomap("load", "$map_path/hegias_parouest_TE.vid", 0, "paris-ouest"); - -$map = $zinc->add("map", $radar, - -color => 'gray80'); -$zinc->itemconfigure($map, - -mapinfo => 'orly'); - -$map2 = $zinc->add("map", $radar, - -color => 'gray60', - -filled => 1, - -priority => 0, - -fillpattern => AlphaStipple6); -$zinc->itemconfigure($map2, - -mapinfo => 'paris-ouest'); - -$map3 = $zinc->add("map", $radar, - -color => 'gray50'); -$zinc->itemconfigure($map3, - -mapinfo => "paris-w"); - - -################################################### -# Map info -################################################### -#$mw->mapinfo('mpessai', 'create'); -#$mw->mapinfo('mpessai', 'add', 'text', 'normal', 'simple', 0, 200, "Et voilà"); -#$mw->mapinfo('mpessai', 'add', 'line', 'simple', 0, 0, 0, 0, 200); -#$mw->mapinfo('mpessai', 'add', 'line', 'simple', 5, -100, 100, 0, 0); -#$zinc->itemconfigure($map3, -mapinfo => 'mpessai'); - -#$c1= $zinc->add('curve', $radar, [], -# -filled => 1, -# -linewidth => 1, -# -fillcolor => 'blue'); -#$zinc->coords($c1, [200, 200, 300, 200, 300, 300, 200, 300]); -#$zinc->bind($c1, '<1>', sub {$zinc->coords($c1, 'remove', 0);}); -#$zinc->bind($c1, '<2>', sub {$zinc->coords($c1, 'add', 0, [0, 0]);}); -#$zinc->bind($c1, '<3>', sub {$zinc->coords($c1, []);}); -#my $c = $zinc->add('curve', $radar, [], -# -filled => 1, -# -fillcolor => 'red'); -#$zinc->contour($c, 'union', [100, 0, 0, 0, 0, 100, 100, 100]); -#$zinc->contour($c, 'diff', [75, 75, 25, 75, 25, 25, 75, 25]); -#print join(' ', $zinc->coords($c, 0)), "\n"; -#print join(' ', $zinc->coords($c, 1)), "\n"; - - -################################################### -# Rafraichissement des pistes -################################################### -$zinc->repeat($delay, [\&refresh, $zinc]); - -sub refresh { - my ($zinc) = @_; - my $t; - - foreach $t (values(%tracks)) { - $t->{'x'} += $t->{'vx'} * $rate; - $t->{'y'} += $t->{'vy'} * $rate; - $zinc->itemconfigure($t->{'item'}, - -position => [$t->{'x'}, $t->{'y'}]); - } -} - -sub borders { - my($widget, $onoff) = @_; - $onoff = "on" unless $onoff; - my $part = $zinc->currentpart; - my $contour = "noborder"; - $contour = "contour" if ($onoff eq 'on'); - $zinc->itemconfigure('current', $part, -border => $contour) if ($part >= 0); -} - -sub finditems { - my($cornerx, $cornery) = @_; - - print "--- enclosed --->", - join('|', $zinc->find('enclosed',$origx, $origy, $cornerx, $cornery)),"\n"; - print "--- overlapping --->", - join('|',$zinc->find('overlapping',$origx, $origy, $cornerx, $cornery)),"\n\n"; -} - - -MainLoop(); - - -1; diff --git a/sandbox/textexpand.tcl b/sandbox/textexpand.tcl deleted file mode 100644 index f690281..0000000 --- a/sandbox/textexpand.tcl +++ /dev/null @@ -1,6 +0,0 @@ -zinc .z -pack .z - -proc createItem {type params} { - if 1 [concat .z add $type 1 $params] -} diff --git a/sandbox/texture-bois1.xpm b/sandbox/texture-bois1.xpm deleted file mode 100644 index a7a6e5f..0000000 --- a/sandbox/texture-bois1.xpm +++ /dev/null @@ -1,320 +0,0 @@ -/* XPM */ -static char *on[] = { -/* width height num_colors chars_per_pixel */ -" 256 256 57 1", -/* colors */ -". c #f8dca8", -"# c #f8d4a8", -"a c #f8d4a0", -"b c #f8d498", -"c c #f8cca8", -"d c #f8cca0", -"e c #f8cc98", -"f c #f8cc90", -"g c #f8c4a0", -"h c #f8c498", -"i c #f8c490", -"j c #f8c488", -"k c #f8bc98", -"l c #f8bc90", -"m c #f8bc88", -"n c #f8bc80", -"o c #f8b490", -"p c #f8b488", -"q c #f8b480", -"r c #f8b478", -"s c #f8ac88", -"t c #f8ac80", -"u c #f8ac78", -"v c #f8ac70", -"w c #f8a478", -"x c #f8a470", -"y c #f8b488", -"z c #f8b480", -"A c #f8b478", -"B c #f8ac88", -"C c #f8ac80", -"D c #f8ac78", -"E c #f8ac70", -"F c #f8ac68", -"G c #f8a480", -"H c #f8a478", -"I c #f8a470", -"J c #f8a468", -"K c #f8ac80", -"L c #f8ac78", -"M c #f8ac70", -"N c #f8a478", -"O c #f8a470", -"P c #f8a468", -"Q c #f89c70", -"R c #f89c68", -"S c #f8ac78", -"T c #f8a478", -"U c #f8a470", -"V c #f8a468", -"W c #f89c70", -"X c #f89c68", -"Y c #f0a470", -"Z c #f0a468", -"0 c #f09c68", -"1 c #f09068", -"2 c #e09068", -/* pixels */ -"hhehliieid#hqDqliifiiiiiihllhhkllyykhkhdhlpplhggeeehhilmmmllmpppqDDzqmihhhhhhilmODpmqDphhhihhmpqklllpCqlgllllppkhlqDqlhilqtqlhlqplkhltzplmpppmpmqmmmqmmmmquummqqnqqmquEuumlqtppplmqqqpmmpOqmOthuqqqpmmmmqmmmmmiieeefeeefiiimnqnmnqqEIuqquqihhlmlmmmmmmqqlilihilm", -"illmmmllhhilmmpmiimmqqqpllmppppClopplpppklpplkhhlliiillmopptqCCCmmpmmliiliiihilmlllltLDqqtqplmpmqtohhlollpplopplpmlmlllplmpmmpmqCpllpppmpppmllllmlihiihhhiiiheeiiijmmquuutpqlhghmllilllliqlhmldmqpqmqqqqmmmljmiiifeiiiimebaeeeeeiiimqqmmmmlhlmpmlllllllilililill", -"llmmlmlllpqqplmmmmmnqmmmlllpppyCCtzLNNKUCCKKLCCCDqqqtDqtqzDLCtzCDDAtztDDDDtqqqqqqqCqzCCqCDCqqpqpzCCqpCqpCCtqqppqqpppqqqppmpqtCCCNppCDpptqtqqppmqmmlilllimihhhhhheehimmmqllmppllptqlllmpqmqllpmlpiilmmmmmeeddeeeeieeeeeijiiiifiiilimqqqqqpqpmmpmmlmmmmqqqlmmpmmmm", -"mqttqppqDqqCDuqpqrruqqmmCCDLNLNTUNKLNLNKCCKNUUUTDDDDLLCzqCCCzpppqqpmpqqpqqzqqmpqppqpqqzCppqqpppplpqCCDCCqmpCqpqCtqqqCqpmqppqCDDzCppCCztLCzttqqpqmmmmqqqqpmmmmmmilhlmmllqqmmqpmlmililmppmplmmlmpmmmmmqqmiliiiimmmjiiiiiijiiiiiijjmlmnqqqtmmpmllhhlmmpqpmmmmppmmlm", -"DHMMDqDDDqqDDLCnEEIEDDDDIMNUUNNTLNLsyCClolppCCypmmmpqqpmlmmllmppliililiilmqqqmmmmlihkhlimmppllhilhggilpllklpplltmmllllmmllmmpmppppmmpqqtpqqmmlihllmqqmqnmmpmpmpmqpqutmmquqqqqqmllllpqqmmpmqtpqqpppmqqmlhiiehiiiimjjmjiijimnnnmmmmmqtuqqqquuqpqqqqqtqqqpmtqtqqtuu", -"DDLDtqqqmppqqqqquDEDrqqqpppCCzqCpCClmCCpmompyBplmmmmmmmllllllllpmllmmpmmlmmppmmmCplihhdglllmlhhhhhhhppmlhhhlkhhlhlllhiklhhlkillmpppllmpmilppmmmmmqqqqqqqqquuuquuqDOODuuDqqqqDEDruDuDtuuttqtDtuDqEOOOVPDqqqqqqqrqrurvvuuvuuvuvvuuuuvJIuuuDOOuqqtqqqqtqqqqquqqqqDD", -"pqqpmllmlmmmmlmpmqqqmliimmqCCCCCpCzppzCCtqtzCtztpqqqqppqppllppplmlilmmmmlllliililllmpmpqhilmlihlhllqDCplhhliihlllmmmilihhhhihlmpppllmllllmnqqqtutquuqqquqtquququpCNDqqqCrqqqrrrqqqtqpmpqmpmmmmlmlmqtqqmmmmmmnqqqjiimmjjmqnqqqqqnqqquqqqqpqqpmllhihiilllmhihhhimm", -"qqqqpmmmplillmmlmmquqqqqppqzCtqCzppqpppCllllppqCmqqqmmmpmlmpDNKtmliilmmlDrqmmlmpllmpmlillllplhhihhllllihimllhlmpDtmhdgiliihhillmpihmpihipmppmmmmmmmllimmmliiiililqDqmlpmimmmmmnnlpqqplllllihllhlmqtruqqmpnmqqqrqrqqqqnqqmiiimnmmqqqqqmmpmpqqqqqmppmmlillillmlmpq", -"mmpmllmpliillmmlmpqpqqqpmlmpqqtqpqCppmllllpppDKCmqCDzqlhlmppqqCzpmppmmllipqCqpmqptqppllpplillllmkihhhhllmptqplllmihlmqqDpmiilmqqlililmlilmmjlmmqmpmmmmmmmmlillmmtptqqpmmmmmmnnnmmpqqqqqqppplllmpqpmpnpmmmmleimmimjmjmmiiijmjmnqmmmmpmpqqtqppqtqpmmlpmlmqqmmlmpqp", -"pqqqmpqqppmmmlllqDqqmppmmmpqtDCDmomlllkillllmppmtqmlllmlllllpppsqqqtqqpmpmqqqppqmqpmmlilmppllppllllhilillpppllhlppquDDDDDplhhilmpmlhhhilimqqqmmlmmmmmlllpmmmmpqqpllllllmpmiimmqqllmpqpqpllmmppppqqqqqqmmmpmehmmmiiiiiiiimmmlmqnmmmmmmmmmppmllllltquqqmpqmmmqquDu", -"mpmppmppqqtqppmpmmlhhillhlmmqpqqtqqqppppqtqpqztpmmqDDqplDCtCpqypqqqqqqpqzqqqzqqqCDqptpmmpDDpmqpiqmmmllmppmmmmlmlmilqqpmmiihehlmmqqmmmmnqqqnnnmnqtqutuqqqqqqqqqqqtqtttqqtqqpmmmmntqttqtqqqqqtqqqqqqpmmmliqqnlimnmmiliiiljqmmjmnmmpqqqpmlmllmppqqtmpmpmpmmqqpmpmli", -"pmpqqqqpmmpqmmmmCzqqqqtDtuDDCuDDDCCtCzDzCCDCCDDtLDqzDDLMNOLLLCCCLDLDDDDDDzqzDDDDLLCtLDqqpCCqpqqpDtqpmmqqqqmppqqmqqmqqnppDDuDuqqqpmqqqqqnqnmmmmqumqnqqqqnpmpmpmpmllmmqpmlmmmmmpmmmpmmpmllmppmpmllmlmmmmqpmnpiiilimmjiilmmqnmimmmimmmmllllmmppmlllipqmquuqlmmmqqqq", -"tqtDDLDtMHMOUXOOOOMLLDDDDMHDuDOOpqpqqtqpmqpmpppmDqqqqqptmmptCCCzqqqqzzDDzqmqCzqpqtmpCzppmmmpqqCDzqmmmpmmqppqqqqmtqtDqqqqpmmmllilnpnqqqmimmqqnqnnmmlmmpnpqqnqmqmqqqqqqqpmhhhlpqttolmopqtqtpqppqttqtqqquuEquuuqqqqmmmmmmmqrqmmmmmmhilmlilippptuwtpqrtqqDDquutuDDOO", -"qqmqqtqqmllmpqmmlmpzqmmlllmilmpqqqqzCCqplmplllllmmpzqlhdkllllllkhhhhilmmmlilmmiimplhmpllphhllhhlmliillllmmmlmmmmllmqpmilqmlllmqtliimmmmjmnnnmmmmmpnqqqtrqtqtuuuupmmllpqppppqtuwIIHuuHIIHIIHuuuuHDuuqqrDIvEIFJIJJuvuuuruuxvuvvuqqmqquuuuwqqtIOXOEDIMDOOOODDDqqqqq", -"liliililhihiilllilmqqmllihhillmmtqpqttqplmpmlmppDmiihhhmmpllhhggiihilmqtlhhhihhhmlihlihllhhhhddchedhimmlmllillmliimmmiheqmjhedeeiimmjiimmmiiffijliihiimpmmpmqqquvuuruvxuIxuttwttutqpqpqpttqppmpmqnpmmmmmmmmmqnmnquvvurqruuvxxrqruuvuxuIIwutqqllhhehlmliihiiiilmm", -"ihihhhhihhlililmppqCCmiilillmmlllkhhhlhhhllllppqmihlmilmCqlhhhghhehhimqqmihhhhilpmlhhhhheddhlpleedeimqqqmmliiimmiiiiedeheiliihehimqqidaaaeeiieeeihhdehiiddddeimmmnqquvtptqtttpoohhdgllmlihllllklhhiihehhmihehiiiiimmiieemmqrqmimqqqmllllmpplllllmlmqqlhelmmliheh", -"qqqtDuqqpmqqqtMUqqmqqqqtDuDMIDuDODqtqmptDqqtDqqqpqCDDpmppDOOCmlllllqpklppmlhhhgddhhipidlllhimle#ddddghd#hdddddgheheemjeimiimieeeehiimmiiiiieeimmiieeeiedeeeeeeehiiinqnmiimmqmliimqqrqmmqihimmmiillllqmmqmmmmmheedeiiiililmmmiilljnnqnjjnmnnmmlnqtqplimmlqmmppmmm", -"qqqqmlmmqmqqlhmpqqmpqmpnlllmlliihhhmpqpmLCqCzqpqlllmmmptmpqpmpqDpmpDDqpqpppqmpmpmzqmppmlmmmmmmlhllllllhhhihhhdddiieimieeadeimilihehilqquqmmihiimmmiilmmimifeeheeeefjmnmnmqpnpnpqmmqqqmmpuqtuuqqqmpmqDqpqqqqqqmmmmppqqtutqppmllilnmmnmnnrqqqrqruuqqrqquEIqqqqqqpq", -"qDDDpllpmmqqilquqpmlllllqmlmmllmlllpCLqllllmplpqDphlptqplllihllmmllqCqmhilmmmlllqCLqmDLpqqtppmpqtqqqpqqtppqqpmllmmlmpmhhhilptqpmDuqqmqqqOJEuuruuqruuruuuqqmmmmmmmmpmmmpquuqtqtuuutqtuuqqqqttqppqmpqtDqmmpmmqqmmmpmmmpqqqqqqquqtqvrqrruvEuuruuqqqqDuqmllmuqmmmmqq", -"imtqmlilhhlmllqqCqpmmmmpqmllmmmmtqplpqmhllllmmpptpmlllihqpmppmpmpllqCqlhlllmppmledhhdlphdhhhdddhilhhhlpDqtDCztDLqqpmuqlmqppqqqikiillliilmmliihiiimmjlimjrqqqqrrururqqqnqqqqttuqpqpmmppllllmqpmmplqqqDqllihlmmmmmqpmilmpmqqpqquuqqmjmmmqqrqqqqqmilmmmlillqqpmpmqu", -"CDNONDDCUNNHCDLCLDCqCCDDLCzCDKLNOULCDUUDNDqtCDCqmqDCplmpmlhdhhlpppqqpmllqmllqqqpphmplmqmllmpmlllhhlllhlphhhdddipllilqmlllihlllhgilmmmlmlihiihfhilmmmiiilimqqqmpqmpmmmqpmpmmpqppppllpmlllpmppttqtqCtyCtmplllmpmppmmmhhilmmmlmmmmlqnqqqqqqlmqtqqtqpppqtDHtmptOHDtq", -"CtpppCtqCppmptCpLKCzCLLLCmlppqpppppqqDCqCqpmCOLCONLDDDCtDDCDCDDCmqtqpmppCpllmpllldhlllmplllmpmihlmqDqlhlqqmlhhlpllhlplillkhhlhkliliihehhiiliieieieilihhiimmqmmmmmmmlpqqlqpmmpttDtttCttDIDtpqtuDHCLCqCCqqqppqqpmpmmplilmmpmmmppmmimmqmmmqpqtuttuuCuttDDqpqtqCCtDO", -"CppqCCCCllllpKONzCzpyCKCKypzKCypLqptKDqpllhhmzCpODpmqCqipqCDDqmlqCDDCtqDODtqqppppqmlqtttpqttttppllpqpihhmllhhhhhpplkppkopmopopopmmmpquDDqqqnpmmmqqqruqqtqqqnqnqqpqqmmtqpqtttqtCHqppqtptCtppppsqttCCpCCppqpppppmpquuqqruuqqqqqquutqquHDtuDCttqtppllllppplCqpmlmCN", -"lpsCLCCslkkkkpCCyCCyzKCypplpyplhOpilqqpmpmlllpmllCUDpmpCllllihhlhlmpmmpmpqCqpqDDDXtlpCqqmptqpmlltpmqqmpDppppqqppLCplpplppoppppptDCtquqqntrtqqqqqnmmqqqnqvqqqtuuqpqtqpuDuptCttppptpppollpklpttppplCppptppppmppompuqqqqqqmqqqqpmmmqppqtqpmttmppqpplppolllllpptpppp", -"DCKNNUULNDDNNNCzNYULNYUKCKKCKLKCLLDNUOzzppqqqpqqCzqpmppphllhhhllhhipplllqNqhlmlllmlpqtqphlmpqpmlhhhhltCzqzqtzqpmCCptppptppptsttpppqpmpqtmmmpqqqqimplilmmqpmqqqmiipqmmqqqmptqppptpllpmllmlppppCDtptCCCCCDpllmpmllmmmquuqliqnpmlmummqtqpqCqqpptpkllqCqptCpNHLNLNOU", -"CqCLCCCsppompCLNKNSKLTTKUUTSUYYTLNDOYUNOCDLDLLOUOOLNNLOOzCCqtCqpqppqqpppmqmhlhdhlllhhlhghhllllhhllllhlllCtzqqpmlpmolplolspstpptompnppmqqqpmmmllilmmmilmmiihilmlhimmmpqtpmpppppppmpptCCCHtDNDDONDYWNCCLNONtpppppplilimliiilmilehnlilqqmmqlCDpCNNHNUNCCCOOCCCtCtpq", -"olpsmpplCpolmpCLpppppqpmppllpDzpqqppDCqCzCCppmpCCqqztqqCpqpqzCqmOODLDDDLDNCDDtqDtqqppqqmtqCqtqqpqzqplillllllpmpmppppppppplpppppoDCDDztCDqqqqqqpmmpqpmmlmppmpqqqpmmmmpDqqqqqDOUOLNOOLDtplpqCqpqqmlllpptqqqmllllpqqtqqqqqtuDuuuutDDtDELDtDCWVCqCqpLtmlhhhlllmmpmll", -"ppCLtCCtppppopppOLCDKzzLLCCCLTNCqzqzDzpqCqqpppqzCppDCmlqmpqCDONCqppppmppqpllllmtqztqqCtqpqqCCCCDqCDzqqpmqqqCDDDCCCCCCCzpLCCNCGHCqqqpqpqqqqqqqurqtutqqttuqquuuqpqntDruDLDDqqqzqpmillllllhmqqqptqppppqCCpkmpqqtqquqmqqqqqqqqmmqmmqDqpqCqqqlmlmlhglihlqzqDOCDCDDDCq", -"ihmmihlilmmmpmpqpmlpmllpmqqpmqqqptqCLCpqpmmpCDNDDqqNDppCpqDCDLLOCCzCDDDDLNDmlqCpppqmlmllhlmqqqqzppppqCzqCCCqCzqqpppppmppllllllmlpppmpmpmpmmpqmppmmlllmpqmpmllilimnqqmmnqqqmmpqqqpqtqqMODqtztqDCqCqmmpmmmhmmpmiihiiiimmliiihimlimmiiimmpnqCtDONtLDDDDCmlmmmmmllil", -"DtCtpmplmmmmmqqqmmmqpmmqmqqqpppqilmpqpimlllmpppmpmpqqmpqmpqmlllllmmppqCqqqCphpqhmpqppmpmlmpzzpqplmlmpqtmpmmpmpompmpmppppzpptptCppqqqqqqqqqqmqqpmlihiiimppmlhhimpinqniiimmmqqqDLOqqnmllmlmpmmmmmmlhllmppmqqtnpmpmmmmpqnmlnpmmqqmqrpjlmnpqpDCmpqmhihilmmqqmmmmmqqq", -"qmnqmmqmqqpppmpmlllmliillmppmmmlmppqCplpmppppmmmlpqqpppqpqpmllllppqpqCDCpmqplqCmhlmmmmmlilpppmmmmmpmmpppmpppqqCCmqppmppqplmplmpmlhlllmllmmmmpmqpqpmpqppqqpmllpqunqrrqnqrqqqqmmmjqmmmmmmqqnmmmmmmqDDMDqqmmmmiiimimmmmmlmlhieimmhiqnmjimiihqqlmqqpDrqqmqqqhhiimmmn", -"lhlmmqDqmllmnpmlquuqmmmlilmmqqpmppmmmlhmkmqqmptDlpplllmmllllpqplmqqmpqCqOppqllqqmmzppllilmmqmmmpmpppllmmlmllmlmmmmllmlmmmllmllmlllllppmllhihihhehdhiihehihhiilllffijifiifiimmmmlqmqqqmmnmmliilmmilillmqqqqqmiiieehiheeijlmlmqmiliiiimmmmlmlilhiqimmiimjhmmmqmmml", -"qmlilmptlpCtpollkllloohkloplkklpqmmqqmmmmmmmlmqzlmqDVtlimmmtEDqmmppqqqqCqpmpqqpplmqzDqmlhlpppoopppmllpolkkllkllplliillmllmllillmlillmmpmmqqmiiiimiiiliiinnmmnqqrilmmmmmnuqnmmmmimiijmmlillmpppppllplilmqutmmmmiilimillmmlihllmlimmmmmquummmllhilillillllnppllllm", -"qtppptDCCLOLtCCCDNCpCCCCCCCDCDNNMEOOPMDEnqqqnpmmqCqmqnpDDtpmpmmlqqCCtCCDzqpmmpqCmmmpmpmpllppppopzqmllllklllllllmlllilmmmmpqqqmihiiilmmmmqqqmmmiiifhijmjmlmiiiiiiimmnmmmmqqqmmmmmmmmmjmlimmppmlllmpqllilmqqqmqqmiiiiiiihillmlllllmqnmimmmmllillllllilmqqmpmpmpqqu", -"NMDDLDLDLOUNLCDNCDCtDCtCCtCCNNNLDDDMLDDDDDDDODqqtDDDDtqNMDtqqtCttCDDCDLNDDDtpqDLtqqqqqsqpqCLCCCCzLCzpCypklkhhhiliihhilllmmmmmlmmllpmmmmmmmmllmmiiiiiiiiimmmmmmmmmimmmmmlnmmmmmmmjjmmmmpqqtqttttpqtutqqqpnqquvurqqqqqqqqmmmpppmppruqmmlllqmlllllimmmmpzqqDEDDuDHO", -"nppqqqpppCDCtpplppppCtmppppptqqpqqqtqqqqCqnppqqpmqDDLzpqpqDDDMMDDLLNLLOVqCCCCtztACqCqzqpCCCLCKLLLLLDKLLKCCCtqqqqppmmmpmpmmllllmplmmpmpmpqmmmmmihmmijmlimmjmmmmmmiiimqqmmmmmmqqnqnqqqnquEutuuutttpqutqqqqqqmmqqrqrrqrquuuqtutqttuqqrqqqnpmmmpquDDDDtqDMICqCtqpmpq", -"pmqnqqtztLONLNCCtDCDOLCCCDLDCCCtLLNLDCDLqtpmllpqpqplttpplpqsqCplmpqqpqCCpmmpqqplqmlmqqmimmppppppqzzzyCKCCCCCCzqpmmmmpmmmqqquqmlihlmmpqquvuqqqqmimmmqqquvqqqmmmmmmmmqqqqnqqqruuurDEIEqqqutuqtqqplmpqmpmqpmmilimmmmmmmmmnqqqmppqqpnqqrtrtutuDutuDODzqpzDCmpmppqqqu", -"OODDDDDCMOTLHNONLLCpCDCDNNNONLNNMOOLDLNOOUOODCzDLNCtLNLHDNCzsCCpmppqppqqDpmlqqqpqmlimpmmlpppppppqzzppppollpmppliiilimmmmqqqqqmmmmmpqqqqqqqqruurqqqqqqqruvvurqruurtrruruquuuuuuruuEEuqmqrtqpqttqptuutqqpmmqqmnmnmqqqmmmqqqpmmpqppuuuDuqqqtDDupmqtqqmmqqqpquDDuDHO", -"DqqqqmmlpqppmpppqtpmqpqCCDCCDDDDpCCCCCCCCDLCCqppCNNLUUNLNNCCCNOCDLOOEDDDDqppqCtqzqqqqqCqpqqACzqqzDLzppzyCptpqqqmppmqqtqqmmmmmmqqqqqpqmmmmimqruqrrqqnmmmnqnnpnqqqurtrqqquqrqqrrqnqqqqqqtuqtqtuDuuuwDutqqmmmqqqqqqrruuqqquuuttuuuuEEEuqqmqlmpqqqDILLDDDNDDtqqppmpm", -"lmmpqqttmpqqtCtpqzqpCCqzDqmpzCzplpCDCCDCCtpppqpplCpopppCppplpCClpqqqplilllmmmmllmpzDzqqqmmqCqqppzLLzzCCCCCppqqmpmmmmmmmmlmqqpmmmlliimmmlpmmqqmmmqnnmmimqmmmmmmjjmpnqmmnqqqqqtuqqDDEEDuuDHuqqtqpmlpqqqqmlhihiiiimelnnlimmlmmlillpmmmqqqqDIODDqtqqDDCqmqqmpqppmlll", -"mmmmqtqmmpqpppuOptLUVLqqpCtmpCtmppCNODppqppqCCqpsqtpCCNNoppppCCpqpqCDqtCqpqpmlheelmllmmilliihihimmlillllkhllpmllmmmmmmpqmmimmqqmmqplipqmmlmmmimqqmlqqqmqqquuuuuutuuuqtqtuEOOEuqqqmpqqqlhmmmpqqqqlmllmlmmmmmmmmmimqrqmmmmmmlllllmmmmmqquuqutqqmlmlqqpllmlmmpqttql", -"mmpqqqtuttqqmpptmlppqpppCDLtqLODNDLLKtppCCCCDCCCCCLNCCCpqCpppppoqmpqqqqqmmllliihhimmqpmmlmlihhhilmmmpplhghkllliiiilmiljlqmmmiiiihililiiliimqqmmnlhilmilmllimmmmlmmqqmmpnmqqqqqqqqqpmpmqqpmmmqqqqppmppquuuuurqqnmimnmmqqmpqtqqqqtqqqnmmmmmmppqttuCqpnDDtmppmqqqml", -"mqruuuDOOECqppqtDqqtqCDOELOLDDMUUUOONDDLqCDCCCqCNKtqCCDLNONDDNCqqmmmllmplliiihhhilpqDqmlimmmiiimilmmmplhhhikiiiilmmmmmminqqmliimlhlmmllmilmqqnmmilmmmllmmllmpqmlilllmlllilillmpqquuqpqDOutqpqpqqlmlmmqqumqqqnqqqqqqqqqqqqqtuttqqmnmmmllllmmmmqtDDqmtHMtpqqquuttt", -"qqtuqqDDutqtqqqtqpqqqqqzLDDODqCDCtqCqqCNOUUVUOUVUDqtCLNNCqBqCtCtqqpmmmpnDLIDtqmmmmqDLqmmmmmliiimimmmomplkklillilmmmmqqnqmpmqnqqrtqppmmqqqqqmnqqqqrutqqqqmlilmnpmmmmpmmmmpppmmmpqqqCtqquDuuqqqqqqlllllmmmimqmqquurqjmmqqqmqqqtqppruqrtqurqqqpqquDDtDDDqqupmptqpmt", -"nmmmmmmmmmpqqqtpqCqqtztqCqpzDqmpqqqqqqCEqzDtqqqCDDLUVODDDLDOOUOOMLDDDDDDqqqqqppppmpDLqqqqmmmmmmjililillkllllllmmqqnqnqqqlmmnqquuquqmlpqmunmlmmnqqtuquuqppmpmppqqpqqqqtqqqrqtqtqtDHDOODDtnqqqqqqqlmpmpmllimmlimmnihhimqqmlllpmpqqqqqnqqqqqttuDDDDHEOOtmpDtqpppill", -"qmiilmlihllmplmmmmlhehhimiippmlimmpqqqqLqqqqqqqqqmptCqzDmmlmmmmmttAtqCqqqtDCDEVXCtADqqpqqqmnrDErDMOONDtpmpqtqpqqqqmmmmliijmmmnmmlqtmmqqimmlimmmipmmpqqqmuutqmqqtnpmqquuDqtqquDuuLDtCDHuqpqqrqnmmllmpmpmliliilmmihfjqqqmlmmlllllmiiiiimmpqqtqqpqpqqqqpllmpmmmllll", -"qmmmqqqpmpqpmllptCqmmmpmmllmmmlliiilmmmmiifhhiiilhhiilqOqpmmpmllimmmmnqpmnnqnqqDqCCplmmmnmmnrrAAimmmlihhpptqqpmqqnmlmiihiimmmiiihmmmmmmliihhimmillimmllpqmihhimppmmmmpqqqnppnpmmllhlpmlhmmqmmliillllllllqqqqqrqnmmquqqmqqpllllllmmmqqqqqmpmlllhilmpmmllhhhkhlpql", -"rqqqrvuuuDutqpquzDDqqqqmtDuqpmqqErqqnmlilihiiliiihilihmDpmllmihimmmmmqrqquDDqihehlmlilpqqmmiieeeeehddehhhlmpmimlqnmmmmieeimmmiimlhilliimihedimnmihhllehmplhhimqqqmlhlilltqmllihhllpqDtqmhiiiiimmllihiiimmmlmmnmhqqnqnmuJqnppqtqtnqqqqmlihihhhimpltODqpmlpqtptOIt", -"pqqpmppqmqpmpCCpDDqlmllpmqLDqpmmtmmpqppqqqppmqqpqqmllmpmqqquqpqmlmilmtzpdihmmhiehhlpqmmmlmjimrqnlliiihhiliiedeimhhlkihklmllpplklmlilmmlllqnpqqquilpqpmmmmihipuqlimmiilmiehhehimmpplmquqtqqtHqhiqimihhmqqlimmmmmqhilmmllmpmmmmmmluqpmlmpmlmpruqttqqqqmptIXDmilppp", -"qqDDDDztlqtsptplCDqlpqqtLCqCDCqplqqiimmhqqqqqqqqqDDDDDqqqqqpmpnqmpmmqqmhqqqqqlmhdehhiheheeeeeiieiiiiiiiihiihehimhklllhhhplpttpmpuurqqpieilliiihmpmllmqqqlpqpmpqqquunmqqqtrttqtttmqpptqpmqDODplllmmmiiimmmmpqmmlmllmqqpmlutpmmppmqtqqqtttqqqqpmmmmqqtqqqDDDtDDDzp", -"mpqtDDplmpzCCCqsmCqptCplqlllpmllqNIqpqqllmlmppqqqDDDCqqlqqqDtqpmqqqCDLuqmDqqpmqlllillihiilihiiiiiillllljlmpnlmmqlmpqqqpmtqqqtmpqqqqqqmidmqmmmiimtmihllllmmllmmmlnrqmlmqmlmmppmmmlmmmqtmmqDOIuutqqqqpmmmlqpmqmlmmmllpqmmltqmmqtqtlmpmmmmquqpqpmlpmmpppqtqDtqqCDDD", -"ODqzDLDCLtpqCCCNCDDLULqDCqqDtppDHuqttqppmpppmmmmlmpmqDLDqqqqqmllihilquzqlqmlmqDmqppqqqqqqqqmmmmmmmqqnmmmmqqqqqqqpqquttqqqppqpmlmmmmmmmieimmilieiqplmqqmhpmlmptqmlmrqnqmmqqtutqtuppllqqptplqLDqqDvEvurtqqqqnpmqquDuqqqttDuqppquDupuDuqqqqqqpmqqqqmqpqqqqqODCppqLO", -"VDqCMHDD0DppqqptzppDLqCYCDNUUzqDLCpzLDCqCDDCpplllmlilmpqqmlhhillmmllmlmmqtmmpqCqllmpqpmpmpmmmiljlmpmpmmpmmmqqqqmmmmmmmmmiimmmmmqpppmpmllelimpmllilmpqpmmhmqqmmqtjqqrqqqmqpmmlillutqpqppqIqtOOtqHIOEutrqqqpqqtqtutqqtqqquDutrutqmqDDDttqtmmpqqqqqtuqqtDDuDOOMLDDL", -"CqmtCqppLCqptCpllllCDllDppqqCtmlzLLpC0UtpCLLDCptqtqpmpmlpmpqCqqmDtqqqpmlqqlpnmqmlllmmmlimlmmmiiihimmmlmpmllmqtqmqpmllllimmmmlllmqmmmmmmpmpqquqqqmppmmmppmqqppqqqqqrqqmqqIqqttqtDqqquDuqDOOODDOODqqqmmmlilmqqtmmmhimpplllqqqqqpmllmppnqqpqtuqqtqqquuqtEHtqtLNDCtq", -"qqCOMDzDqCCCCCCppDLOUqmCqDDqqCtplCKppKCkhoCNLCKCpqCDOU00mqDUXUDqCpptppppqplptlppqmlmppmlmmlmqmllimmpmmmqpqpqqqqqrqpnmnmmqqqmmimmlmmmmpqqmqmmpmlmuuutpqqqxutruIutuEEDuuuEqpmqODqtmpptDtqDpqqptDtmqqmllmlimmptqmlllmqutqmmllppqqqqqqqqtDuqtDEtqqqtmqqqqtqqqqtqpppt", -"DqDOODDUtUUDCDCtLVNqCNUVCU0CpqLOsKTNKBployNTKCpompmlpqCDCqpqDLDCOLtzCtCOUDpLNppptpllpmppmllqqqmjpqtqpmqtqqrqmlmpqmmmmqqqmnqpmmqrqqtqqqqtqtmilihihhlmmppqmpqpmpqqmnquqqqtpiltDtlhqpmmqmpDummuOtqtqququuuqtqqqqpqquqpqqqqpqquuutuHOuqqtDumpqtpllqqlqtqqqtmCDNLDCqq", -"qtzDDLDDCqtpCLCppmpDLDqpVNDDDDLOKNUKCNLWYCyKCpoC0mlqlpzlpCDqpqCqptNUNzsLKKCHNDCUNDtDHDqtqqqmqDDqplmpmppmqmpphpuqqqruuuqqqqqnmqqqlpmlpqqqpqplhhihhimpqqqqmhhiquqpimmnqqnqqpmllptEqqpqtDqqtpqNPODDODqpqqqqpqqtqtqtpppmpppppmpmpqqqqpqmmpqtrqquDDutJEutuIDqDOUONUOC", -"qqppqDLLLLDCDNCqplpqDCDCNCqzCDNOUKCBKUBlNKCKKKKNUtCCqNOCqCCCqpllCpCNCppCtCppCCCCHqptDDtquHEDDOEuItuuuuutqtuIuDIuvuIIvuqqiiillmmquuuttuwupqqpqtttqqqqqqpmmpqqqqquqqqqqtuuIIDuuuDItEPODtDPUDtDHCtDutqqpqqqqpqqqpppmmmpmmlmlllllllhqmpmpnqqDtqDDutDuutqtDDttDqllpqm", -"DzqqqqqttDCCDNNNqppqCCCDAppqCDDCpCYNCCsKNKCCCKCCpDDCCOUDOCCUULtCNKCCCpCKCNCpCNKsLtpqCCqppqtqpqqpppqqmlplkipplppillmppmmlqqpqqqqqttttqttqtttqpqtqtqttqtqqqtuuqpqtqqnqqqquutqpqpppltDDpmptqqqDDqmmqqutqpqqpqqpqqpqpptqtppmpqpqppliqpqpqqtqtqqpqmqqqutqmpmpENDpmqCt", -"qqqqqqppqzCCCCLNUOLLDDLLtqqqqqpqCCKCLTCCCNCBCCKBpDLCCLCNppqDNLDNYNLNNNTWNTNKTUNNUDtCDDtpDDDqqqDDqptqomplqttpmppmqqquuuuutqpmqqpmmppmppqptutpppppmqpqqqttqqmpqqpmmmmmmmqmmmpppmmmmpquuqpmmpuOHqpqpqtqtqqtqqttttqttuuuutqqttttuttqqqmqqtqqtqqqqqqqEIOuqqtqqqqppqpm", -"lmpqCCCzDNDCpqszNLHCCqtqtCDCqpqtLCGstCpoCCCttNUHzCCDDqtNpCDCqCCDNKGCKNNTKNNWYGBNWUONNNDDUODtDOOIttuuqtutuHuqpqpqllppqpllmlllppplppqpppqppqpmpqqqqpmpppqqpmlmqqplnqpnpmmmlpqqppppqqpqDDtputqqmpqDqqqqtuttttqqqtqtqtqppqppqqqqqqqqqpqqqqpmmpppmppqquuqpqqDmpqqqpml", -"qqCqDDDOLOTDCCCtqtzqpqztqCDCCDDDstOCoppDCHCpCDNCCtCLCtCMpNOCCLNNKGCCCCCCGCKWWCpWNNNDDLNNutqqDDtqqpqppqtplpplmlhkmppttqtttpppppppmttqpppppqqqqttpquqqqqqqqquuutuuquuuttqqlpqqppqqqqqppqqDqqqqqquDHDtDDMHDutttqpqpqqpmlmmpqpmlppmppmppqpqplmmmpnpmpqqpmpqqOONLLDDD", -"OOOLDDDLDDNLDNNLLNODDLNLzCDDLNOLNtCqH0NGDHDDCCtpCptNCCNCoppptCLNKKKKKKNNNNKNTKGYCNCCCLHDDDCDDDtqtqpppuupqDututmpolptuwuwttqpppppqtutqqtqttuttuqpqqqutuuutuIxuquuqqqruuuuutttuuHHtuDutqDIqtHOOOOOLDDDDDDDtqqqtqtqttqpppqttqqqqqqpqqqqqqqquuuquIIHEEDuDEDuNEDNDDDD", -"DLOOLCztCDLDCLCCDLLqppqqNDCCNVUDHLXNDODOCCHNOHCtNzNLCNUpCpCNTNCNGNNNNWYYNTKCNNNWWONCHUODOONDDtDDHutqqHIqtOuptplpqttHIHHHuuwuwIIRuIOOIIIOuDIIIIutmmppmpmmqqtqqpmmqmqmpqquuqmpuOIuqqqqutqmttqqpqtqpqqqpppqqqtqtuuwuuuttuuututuwuutqqqtqtuIDtqptDEDuuttDXOOtCCDNLDD", -"mqCqqpqqCqqDDqqqNppqmlpqpmmpmpmlqDOW0UtDDDMOOVVOMOUNLVNCDNDLNLNLNCHUNCtNNNONONNNWNHNGGNNWGCHNNHHquIuuIDtuIOIDuutIuuOItqutttuuttptpqqqttututqtqttqplimmllllilhlmpunmmmimqqlhlmlllqqpmllqtqpqqtpmpptNptpCpptCtppppHIHutppqqpqquuruqttuRXItqqttuutqDMDDDDCqqqtzCCCs", -"tDDDzqCDDpmqqpmqplpplpqpillilpmmlpmtDtqqmppqtDHDDOOOUY0UNNTOUUUUNUUNOWYWWOQQOWRW1WTWNWWN0WNNQHCHDIOIHEutIDwutqtqpmpppmtElllmpqqtqpppmlmppppqqqqpuqppqtqpmmplmlppumimlilmqlhmpppqpmpmmmpqqqtDDtqtosCoptHCsCtptttppplllmppqmmqqqrullmqtqpmttpppqttpqCqqqzqpppppppl", -"CCCqtqtqUDtLDCCDCNLzpCDlpqqpmutlmqpipmmpmpqppqqpqCDuDODtDDDHHNONUWYOW01UWXWOOQXWWNNQWW1WWQQXUQOWIIHOIuttDuqqppppqpmpmlpuqqmlllllqpmpmlllmlmpqppmlmmmmmmmqqqqpppqqmiimlimqmlmpmqtppmpqtqpqqtDDtqqqCqqpCDDNDCtCLDtplhhllqqplilmmqrklppmlppqppmmpqtqqCqpqppLCqqCDCt", -"DCqqqtzCLCqCDCqCLKCtllphmppmmpmhptmhllllqqqqpmmlmqqqpqplppppqtCtCttCCsptCtpppppptoossCHttCHDtttDutqutppqqttmlilmmlmppmllqpppmpmpqqpqppmmpmppttqpqqtttttuttttqqqqqqqrqqquqqqtuttuDuDDIDDDEHEOIMHDHOCHqODNOONDNOONwtpllpqtlliiilmqllmplpqtllpppqqqqDDDqqmpDqppCCCt", -"NLDCKNNNDCCLNNLCNCCDzptCplpttpmlimlllllllppmmmplmmqqqqqpmpmppqqtpmmtuqtqDDututuuHsppptDtDwDtppmppmmqqmlppqqplhlpqpquuuttqqqqtqtqqqqqtqpqqqqquuuutuuuutuutuuutqtquvPIIuuIuuIOPIIOIOXOOOIOOOOHIOIILNCOCWOUNONUOUOUDwuttqtqpmpmlmqqlppppqttmptutttqtCDDDDCDCqptCLLK", -"OTUTUUUUNTUWUWUW0LNYONVWOuDPVuqtpqqqDqmpmqqpmlmlpqqqmpmppppmppppqDDqqOEplllllmpptpopptHHtDtqmlpmlllppppqptuuppptIuuuHIuuqtttqppmqqpqqmpqqpppmqqqmppmlllmqqqqqpqqquIvqmnqqquwHDHuuDOIuttDIDuttDDttCtDCDCtCDNONCNOHIOIDuuIuIEuuuuuuuuuHHEDIOOIHDHIOMOUOMLNOONOUWWX", -"CHNNNNNWCHNNNNNNUNOONLODUDDHDtqqOIDQVDqDtDDutqpqqqqqqmmmqqpppmppquqlmtqiqqpmpppqhhlllpuuqtqmmmnmppppmqqqqttttqqttutpmmpplpqttututqnqnpmpmnqqmmmppmmmlmlmlpmpmmmpqnqmmllilmpmqqqqqtqqppqtDHDDIOIDqtLNDtqqqtCDtqCOIHIDHuDwDIIuttuuHDHIIIHIOROOwDIOXODMOHDDCDLCDDLN", -"sCCNGCNNNNTNCKNWLTUNLOUCDDtqCDIHDttOWDtVtDODCDDDqrqqqqtuuqqqmpqpuqmmmqqquuqpmmqqttuHuuIHXWPHvIIxqtqmpqtppmmmpqqpqtutpqtuuuuuqqppqqpqpqqqquuutqqqqqpppppqpmppppqtrqnmmnqqqpmpqtqptqppqqqqpqtquHDqqqXO0LONtqqqqqCOHuppmpplqttmllmmmptuttttttutqtuDOqqtDDtCqtCCtpst", -"tCCtstCNNCtspstCNNNLDCttDHDDutquDDDOOVOHDDDDDDDIrvIJIvuuPuuIRItuODqtuEIEQIuqtuuuqtqqqtuuvurqqqqrpqqtttuEtutuIIutqppqwDtpppllmmmliiihmqqqmmmmiihhhhhilmmmqqtuuuutrqqquurqqqtIHuttuDuuuuHuuuttuttqDtmtNODqqtCDCttCqqqtqtttpmihhllopppmpmqtutqpqtttqtDOODCquW0NCDCp", -"pssspstCsssCHNCGCNUNHDDtppqtqpqtODCqtDDDqtCuCuDDuuIEuuquqqtuDttuDqquOOIIEuquuuqptqquxuqtuqqqqqqnpquuwuuuqpmlmpllilmpqplhmmlllllmtqmmmqqmmmmmmmnnpppqppppqqqtuuuuuuuvuExuIuuIIIIPQROOIHDHDuuDIIDwCtCDUXUODDHHDDLOOIHuuuuqtqpqppqpqquutttqpppqtqqtpqqtttqpCuCtCCCt", -"CCDCttCCtCHNOUONpDNLCCCtqtqqqppqIODDqqDDMHMDDtqqquDuqmpqpEWXOItqIuEOIEutIIuIJIxuIuuQWRuxqtqrrqqmlpppqttpuqpllmpplptqqpmmpqtpmlptuqmmmqnmqqmqtrttmmmmlmilllmmmpmpnnnqqqmmmmmllpqptttqppmlppmpppppqqDDDDDDqtqtDHOXWVOIDDttutDwHttttuHIIIDwOOIIIIHuuDDDDDDHDCHUXOtp", -"CHDHCNNOWONNNHNDGUWXOOOONHDHDtuupqqqqppmINODtqqpuDEEqqqtqDHqppqtuDuuuqmquuttqttuutptuttqqqqqqqnqqtqmpuDtutpqqttuqqqpmpqtppqqlmpqqqqmnqqtuqqqqqqmmpmlmmpmqqpppmmlmmpnmmmlpquttutqmpmpmmpppmpppmmllmqqpmompmmpqqDLIutqtqqqtttttttpttttttDIIDtqtqqtqqtqutDCqtDW1YNt", -"pppptDOXWODttqtttNUONDHNutuDIHIIODHDOOIDqqttqqttqqtqqqppltHDHNHtmpmpmlptuuuqpmqtwHuqquuupmmpqqqquutppDIuqpqqtqqquttqtuuIuttqtqtuqruuurvIvuqnqqmmppppppqqqtqqpppmqqnmmmpqmqtqpqqmsqsqttuututtqpppmpqqqtqttqtqqpqpqqpppqppttCCppppqpmpmqqppllllpppppppqqppIOHqptGt", -"pppppttuttqppppplptppomptqqtuttuDqmpptDttDuCqtCDqpmqtqqqlptCDtplqqpppqtuPQXOwttupuuplttqqtqnqqtrqtqqqutqtquIHtqtuttuIIHDIuttuuutuuvurqqvurruuvrrtqqqpppqqppmpmppnqqqqquvIIIuuuDIttutuuwwtuuuttttuDDDDDDODDDDDDqquuuuDDuDNOOOHCCCqttttqppmppqttqqqqqtqtqtHOHpkppk", -"uttqqqppqpqqttqqCNDCtttqtsqqtqqqODtqqtDDMDDtqqqqDDDCDOUW20NCpCLWOIDIDuuwuIIIuqtqtwIwuuwuuuqtqurtqttuttttxtuIuqqtmlmpqqpmpmlllpmlrqqrqqqnqqrruuuuuutqqqqtqqqqqqqtruuuuuEIDEDutqtIuuwuuuuuttwuuuuuDDDtqqqDtqtDHDDDDCDDDHDDDNONNHGHwuuHIwutttuuuutqtqtqtqtqlttttDHt", -"tuuDHutqDuttuuuuNOONDDHutqtuHuHHDDDCqqqqttqpmmmpqqqppCN0WUUXWLCNROOQOIuuttttttttuqpqttttttqqqqpmpmmllilqpmlpmlhmmpmlmpppqpmmmppmqjmqrqnmmmqqnmmmmmllllllmmllllllmnqnpnpqqpqtqpmqppmppopmppqpppppmpqmmmqummmqqtqqmmmpqqppppCCsppsDDuuDDIIHuuwDHIIIIDuuuuHODtDHtCN", -"qqtuvIutvuuuuuuIuPOIEIIEOwIOPOIPOOOutDHDODqqpppmptutmpmmlpqppmpplptqtqpppqqqqqpltqmlpmpmpmllqplmmllmppqqqpptwtqpqqtqqpqquuuttqtutppqtqttqqtqtqpmmquuqqmmillmmqqqlmmlimmqmpqqqqppqquqmmmpmqqqqqqqmmpqtpqtqqqqpmpqqlptutpmllpqqpllmppmmppmqqtqqqqqpqqqqtqtuutpqtuq", -"mpqqqqqqlpquuqmlmprqqqqpqqpttqttDDDttDDDOODDuDDDuHIutqppppqtppqqpDODtqqtmppqtDDDutqqqqppqtpputqutuutqtuuIuwIIIwIuwuuuuuwuwxuuuuuuuquutquuttuuxutqqqqmliilmmllilmlmmllmmmpmmllmmmmpnmmmmmmmqmmmmillmmmmmqqpqqmmmqIqmpqpmqtqpqpqqttuuttuuuqqqqpmpmqttqqqqmmpmmqqtq", -"mpmplmptqqqtqqpqmmqmpmpmpqqppqttmppmpqqqqpppqqttIIIDDHIuDHIIHIORtLOHCtCDtDDCDNNDIIHIHDuuIIEIIutwqtqqpmptqqmpmmptpmmmpqqpmmppmmlmliillilhmlllmpmmmmmmmqpqiliiiiiiqpmmpqpmqqmmmmqqqmppmqqqmqqqqqqqmlmpppqtqqpmplmppllpqpmlqpmmmmqtmmpmmqqpqqqqmpmpmqmpppmhlmqpmpqp", -"tqqpmmqqqqmpqppquuqpmqqqqttpqtuqpqqqqqtqpmmpqtqqqpqqtqtutuDDuDHODtqqDODqLHDuCDDtqtqtqtqquttqqplmmmpmllmpqpmlhklmppllmmpmmpqtqqppqpqttutuppmmmmmmpmmmquuuqqqqpqqtuxExEIuutuuuuutqrqqruuuuuuuuuvIIqtqtruuuvuuuuuuuqqquIutqtqttuttupqpmppmpmlmmmmmmqqppmqmlmpqqpqmq", -"uqqpqpqplmpuqqmmuqqqqqqtmqqppqtpqpqqqqpqqqqqpmppqqtqpmqqppmpmpqqpplltCqppppmpqtplmpppmpppplltqmppqqqmmquqqpmpqqqtqmpqqpmllmmpmlimmpnqqqmqquqqqtuqtqqqqqqqqqmmmmmquuutuuuqqtuutqpqqqqqqrqurqqqqqqqqtuutuqttqtqtqqHuqqqqtttqtuHuttuqqtqqqqqqqpqqqqtqqqqqqplmmpmqtu", -"qpmmmmmlqpqquqqqqqruuuuuptuuuutqqqpqqpppqqppmmllqtDuqpqDqqpppmppmpqplmplllllppqppqqqttqquqmpttpqmqqpmpqtmmllmppmqpmppmmltqttutqqqqqqqqqmillmlmpqqnmmmmliillmillllpqqpmqmpmpmmmmmllllllmmmliiliillmmpqqmliililllillllllmmqqpqppqquuqqqpmpqpqqpqpmmpmmmpmmlllmpmqt", -"qmllllllqmllillqmqquuquuwuDIIHDHDDDHDDuDDDDDtqtummpqpmqCmmmmmmmmmpqppmppppqppqpmppppqqqpttmlpmlmmmmmmmqqpqtqqqqpqtqtqtqpqqpmpppmqqqqqqmlliiilmmlilililmmlmmpqqqqqqtqqqtqmmllilllhiiiihilihhiilililmlmmmhllmlmqqmhlmpttppuqqpqpqtuqqqqmmpihhehhhhhlllhhlhmllmpmmm", -"pqmliimmqppnplilmmmmmlmutqqttqqutqqtqqqtuDDuCuDOODDLDCqDqqqtqtqqppppqDtpmpppqtqputqqttqpuuqqtqqututqtqtuqvIutqtqqtuuuqtqxurttrttqturqurqqmllmmieihiihilpmmqqmmmmmpmlmmlilllilhiiiimmilmpqmllmiiimppmpqpmimllpqpmppmllmqqpplmmlllmlillhhiliillmllimqpmlllihimqpmm", -"qqqpmpmpmmppmpqqqqqmllquqppqppqppppmppmpumpDDpmqDLOMDDDNDDDLLDDDDHEHHLOOuDDDIONDuuuuuuuwtuttqqpqqqqqrtrqpmmpmqmmqpmqtuqmpqttqmmmmiilmiiiiimiiiiilmmlmmpnmmmmlihlplilmllhhillpmmlmmmpqqmmqqnpqplmtuqqqtqppmpmpmmmpmompppmlhillhlmillillpqmlmmpmlilmpmqqmmqlmtupmq", -"uutqtqtqttrtqqqtnqqmilmqllpplpqqlmmmlilhpmmtqllqpqqqqqqqCqqqtqpqqCDDDDCDCttCDLuppppmmppqmpmpmllliiiiilmmmqqqmiihlhilmpmllmmlhhhlmmiiiihimmmmpnqqmqqmpqqqqpqqqmnqqqpqttpmpmpppppppqqqqqqtquqquqqqqtuttuuquuuqtqqpqtqtqqttpppmpmptqqqqqqqumpqqqpppmmllmqtumlmqqpqt", -"pmpmmmmmnqpmmmmqpmqqpmuwmmtqmputmpqtqqpqmmmpmlmpmpmppmpmqpmpmlmmppqttqqpmpmlmpmkmmmlllmpmmlllllhmmiiiihiilpmlihilllmpppmllliilpqqmlilllmlmmqnqqqqqrtquuqqqqrqqquwuuuxuutuuurtrttqquqqquuuuuuuuququvuuuuuutqqqqqqllpppquItqqqpppqqqqpnppqpqtqmlmmtpmlmmpqutqpmmqq", -"qtqqqqppppmmppqqmqmmmpqumpqplptllmpqqppqpppmmppmpmmpmppmpmmpmlmplmpppppmppppppmlmppmlllmplllllllmliihiihimnqmmmmlmmpmmmmpmpmpqtuuqnqqqnqqqruuqqqllmlmmmmlilmlilmmmppmpmmmpmmlmpnlmmmlilmqtqqqqmqpqtqqpqqlllmlmpqmmpmpqtuuuttqqtuuuuuuuuuuuuuutqtuutqtqqquIuqptuu", -"qtquturuuuutuuvxuurqqqqutuuqpuupqqqqpmmmtqqmpqqlpmlmppmlmmomplppppppmppppqqqqtppmmppmmmlppmmpmmmqnmmqqqqqqqqqqqnqttqqpppqqqqpmmmuqqrrqqnmqurqqmmiiilmqqmqqqqmlmplllillllpmlllllpmpqpmlilmmmlmlilillilmliiilllmpqppllmmlipllmmlpqtqtqtutumpqqquuuuquuuutuquuqquuu", -"iillmmpqqqpmpqpqqrtqqquuDutttIIqututttuuDDttuDtpqttqtqtqppqqqpqtqqqqppqqpqtttttqtttttttqtuttqtttvuqqqrqnqmnpqqqpqtqqpmmmllmpppmlmjmmmmiiiimmmiiemmpquvxuuuquqqqrtqpppqqttuuqqpqqqquuuqqpmqmmqmlmlmlmptqpllmmlmmqplhilplhllikhhhhihiillmlmlillilitmlmmlmmlmpmpqpl", -"hlillmpqlliililiilililmpmhlllmplmllmqqqqqtqqtqqqttttttttpqtttqqtqtCtttttDNONMOOHuuuutttutuuttqtuuniiiiiiiimmmmmnmllihhhhhilmmmpmihiiiheemmmmmmmmlmmmpqqmliiliilmplilmppmmpqpmlllmmmppmmmqtqpqqmqpqqqqrtqmmppmmppqqptuuttqtqtqpmqppllmmmmtqqpmlllqlillhhilmlmpmid", -"mmmmmpmqpmmpqqqpqqmmliiilhlllllmlilmqqplhilplhlmlmppmlmmpqtuqpptqCDDDDCtpqtqtqqptqpmlmpqmpqpmlqtrmiiiqqqlmqqmmmmtqpmmpmmppmlllllnmmmmmlmnmmmiimmqqpmnqmiihlillmqmlllmpmllmpqpmlmmlmmnppmqqqmqlillmmllllipqtqqpqqqpqqqppmllpttuuIuuqqpqqpqtqqmmqqqmpuupmmqmpquupm", -"mppppmppmpqqqqpqmpqtqttqqpmlllmpppllkhhhlmlllilllhhhillqhhllpmmphiimqqqqjmqqnnmnmmllmmmpmpnmmpqqmmqqqmmqnnqvvunqqqquuqtqqqqqqququtqqqpmqllhimmihhimmpmmlheeeheilmilmmhehmmmmmlliiiiiliiiihiiimliimmmmmmmimmmmmppqqqqpmlmlmmlmlmmlmppmpmmqppmppppmmpmlimmppmmpqqq", -"ppqqttuuttttppmppqqtqtttqqpqqpppuqqpqpmlllmllllmplhilllpplhihllqmmlliiieimnnqmnqmmmqqqqiqutqqqqqqqrrqqqqqqruuqqntqqqqqquqtqmqqqpqmpqqmlmpmmpttqmpqqqquuqqmmmmpqqqqqquqpqqqqqqmmimmmmmnmmmjlimiieiiiiimmmlilliiihhehiiehhihiihiklhhilllhlhhhhllmlmpqmlillmmlliiih", -"hilliihllmlllikidhhhhhilllmlpmmllllmmppmppppmppqpmlllillilllplmpqpmmlimmmmqqmmmnqqqqtqqqtqqqquqmqmqqnmmnqmmmmmmmmmmlihimmmmliiihillpmlhhillmmqqpnqqqqqqqqqqqqquuqmpqqqqquuuuuuqtqqqqqqqnqqqrqqqqqqqmnqqrqqmqppqqqmqqqpmqhihhikiilllllllihilllllihhiheddeiimlmlli", -"lllllllhihlihhllihlllillehhlihhhhhhllmmpmmmmllmlmpmmpmpmpppqqppmqqqqqqruqurnqmnnmmmlimmmmqmmmqmliiiiiiimmmmjmmmnqqqmmmmqmpmmilihilmppmlihillmpmpmpqmmqqqhiihehimpmmpmmmqrqqmmqqummjmmmmlmmnqqnnqqnmmpnnpmpnpmpqqqtrutqqqqqqqtqqttqqqppmlpplmmllhlmmpmmmmllmmppqq", -"mpmpqqqttuqtqqqqhililhhhmlmlllllmlihikihihhhhhhhhlmpmptuIuqplilmpqtqqmpqqqqmmmmlilqqqqmlmmlmmqmiiheiiilmhiihiiilmmmmllmmmmqmlmlipqqqqqqmpqqqqqqqmqqtuqqmqtqqmquuqmpmqmpqtqqqqqqqmmmmmmmmmqqmmllmmiimmqmmqqpmmlllmimqqnqqqqmqqqtqqqtqqqpmqqqqttuuqqqqqqqqmmpmnmqm", -"pmpmmppmqqtqqqtttqttuuqpqtqqqqqqmmlllmmmpllllilihlmllimpmmliihhiiiliiheeililiiiimmqqqqpqlmllmmmlmmmmqqnqqruruuurqqqqqrtquuvuquuuqqqqqqqqmqqqmmmmmqqqqqqmlnpiilmpqmnpmqqqqtrtqqqmuuqqqtqqqqqqqnmmnqqqqqqqqqqpmpmpnqqqqqqqpmmmqqqpmmppqqpqihhhilllmmmmllllmmmmpqqq", -"qqmpmpmmlmmqppnqqmlmqqpmqqqqqqqtqqqquuxwqqmpqqqqmmlilmmmhhimmlilhlilmlliljlilllilmliilmqmmmmmmmmqmmqqqqnimmmmnmlmmmmmqqmillihilmmpqppqpmlmlmmmllmmqqqqqpmtrpmntrmppmmmmmlmmmmllimmmmmmmiiiimmmmmmmnnmjliillmmmpmqnpnmlmpqqqqquurppnqpqqpuutqqqqqqqpmmmmmllmqqqqq", -"mlllmmpmqqtqqqppqmlmquqmmlmpmpppllmpqqqqmmlmpqqqppmmtxIuutqppmqtqqqqtqqpqqnqqnmmqquuuuuuqutqmpqmmmmnnmjmmmqnquurqpmmpqqmmqqmmmqqmqqqnqmlqmqqqtqqqtqqqqrqtvxqqtuvtrqqqqqmnmmmmmqtmmiiiiiimliiiiheiimmmmmmppmpppmlmmmmmlmqmlilmqpmqqqqqnpmqpnppmliqmmmmmqqmmqqqpmm", -"uqqqqmmmmmmmihimqmpqqtqqqqqqqqqrqutqmqqtqqqqqmllqqpmmmqqqqmmmpmmmmqqrqmlillmmmmmmmpqqqqmmljmqqmimmmmlimmmmnpnmnmmqqmmpqqmqnqmmmmlmmlmllmiiilmmmmqqqqmmiililqqqqqmqqqqqpqpmlilmpnmmmmlmmplmmlhilnlnqqqqqqpnpqppppqqqqqqqqqqqqqqqqqtqqqqpqmqqqqqmmuqmmmmqnmliiiiqu", -"uuqquqqtqqqqpmpqmmmmmqmpqqtqqqqqqqqqqqtqqqnpmmmmqqqqtuuutqqqqqqpqpqqqqqmpqqqqqppqqqqqmmmmmliliihimmmmimmmmmmmmmmmqnmmmmmmmmmmmlmmlmmmmmmmmmmpmpmmmmmlmmmilimqpmpmmmlmmmqnpmmpqnppqqqqtqqmmmqqutqnqqqqqtqpqqqtqmlmmjmnqnnqqnmmnpqmmmmmmnpmmqquuuuruqqqqmmqmqnqqrx", -"qpmqqqqqqtuuuqqquuqtuuuuvxuurtququtquuuqnppmqpqpqqpqqqqqqqqqqqqprrruuurqqqqtqqqquqqqmmmmqmliiliimmqqmmiiijijmmmmnqpmmqqqmqqqqmmmmnmmmmqqmqpnqnqqqqmmmqqqmmqqqqqqutqqqquutqqtrutqnpqruuqmqpqqurqmqqqqmqqpmmpppmllnnpnqqpmmmliliiimmppqqqqqqqqquuuqqqqqnpmmmmqqmqr", -"lilmmpmmqqqqqqqtqqqqquuuqqqqqqqqqqnqtuutqqqqqqqqvurqqutqqqqqqqqqutqqqqqququuutttqqqmpmpmqqmlmmppnqurqqmmmmpmmmmmqqnnqtrqnqqqqqmmpmmmmpnqpmmpmpmqqqqmquqpmmpqqmqqmmmmmpmpnqmqqqqqmmmpqqmlmqqmihlqmqpmmmmmppllllmpqqqqqnmmutrtrquuqqqqqqqqqqqqqpmmmmqqmmqqpmmmmilm", -"qqqqtrqqmmmqqmqrqqnqqqquqpqqqmqnqmmmqqqnuqqqqqqquuqmpmnpqqqqmqqqqqmmjmlmlmmmpmpmqqqqqqpqpmmppmqmmqnqqnqqnqmnmmmqnmmmmnnnmmnnmiifiliiimmmnqmnmmmmpmmmpqmlehiiiiilllmmlliiihiiimmmmlllmmihlmmihhquurqqqqtquqqpmpppnnmmmiihiiiiilmlnqpnpmmmqqqqqnqqqqqqqrruqqqqmmqq", -"rurqqtqqqmmmmmqqquqqqqqqqqrqqqqpqmmmmmllmmmmlimlmihheiimmmmmmlmnqnmliliiillmmmmpmqqnpmmmmmmmmliiiiiimmmnmmmimljljifiiihimmnmjifemmimlimmqnmmliiihiilmmmhehhilhimmmpqqqmmllilmpqqqpmmpmmlmmmmpqquuuuqquuuttttqqpppmmmmmmjmmmmmnqqqqqqqqqqqqqqqpmmnnqrruqnqnmnqqru", -"pqqmmnqmqmmmmmmmqqqmliiiimmqmmliqmqqqmimiliiiiiiilmmimpqmmmmmmmmqqnqnnmmqqqtttttqqqpmmmmmpqpmihhhehiiimliiiiiiimmjijjijmnqrqnnmmqqqqqqqqqqmmlilihlmmpqmmpmmmqqmqmqmqmpmmqqqqqqqqpnqqqqpmqqqpnqqpnqpmqqqpmqpqpollqqqmnqnqmmmmpqqqpnmqqqqqpnqqqmliljlmqqmmmliljmmq", -"mmmmmqqqqmliihiimmmmmiiiimpqqqmmilmqqmlmmmmmpmmmiimmlmqqqqtqqqqqqnqqqqqmmmmqmpmmuqqqqqttqqqqqmliiiiiiiieliiiimmmnnqrqqrvurvurrrrqrrrrrrqqqqqnqqqqquuuuuqrqqqqqqqqqqqqqqqmmmqqqqmmmppnpmpimpmihlqlliiimlimlllllomqnmjmlmmiiiiiiimiilililmmmqqqmmimieimnqmmiiiiiii", -"qnmmqqqnmmmmmmlitqmmmmmlmmmqqnqqqqqqmnqqqmqqqqqqqqqqqqquqtqqpppptqpllllhqqqlhehlmmmmmmmmmmmmmlmpjmmmilmqqnqqqqqqqqpmmmqqqqqqpmllmnmmqqpmqpnqrururtqqqqpqmiiilmmquqqmlillppmmlllliiiimmmmhihehiiljjmimiimmmnmmijmjiiiimnmnmiiijiimmmmmmqnqqmmmpmlmlhimqpmmmppmmmm", -"qnpmnmmmqqqqqnqnrqqquuurqurrqqqnuurrqqqqxJuqnmmiqqqqqmqqmmppmlmlmmmlmmpmllmllmqqxuuuuuqqqqqpmlmmmnmmiijmiiiimmmmmmmmlmmmlmmpmmmmjmmmnqqpqnqqqqrrqquqqqmmpmllihiilliillilnqqqmmllillmqqqmmmmmmpqqmnnqnqqrqqurqqmqmiijmnnnnmiijmjimjmjmmmqmmmppqqtqpmpqqqquuuuqqtq", -"npnqqqqnqrrqmmmmqqqqqqqqmmmqqqqqnqqqqmmmmqqmmtrqmijnqqqqmpmppmpmhlmlmpqpqtqppqtqqlimqqmlqnqmmillmmmliihiiiimmmmilmlmlllmmmmmmlmljmmmpqqpmmmljmmmmnqqqpmmqmmmmllmqqqpnqpmlmqqqmmllmmpqqqpuuuuuuuuvuvruruvqruurqqqmnnqqrqqqnnmnmmjmmmqmnpmqqtqnpqtqmmmmqqmpmmmmmmm", -"mmmmmmnqmnqnieiiiiiiiiilnmmliiiiiimmmmmmmnmiimqmihipquuuqqtuttqtqtuuuwEHEuuqqqplihhimmmmilihhhhemmmmnqnmmmmiijiimmmmmlillmllliilmmmmmqmmmlmiiljjqqmmmqqrqqqqqnqqpmmmpmmllmpqqqqqnqqqqnpmnpqqqqmmuvvrrqqnqruurqqqnnmnnnnnnqnnqqnmmnmnmmmlmqnpmmlmiiehilihmlllmpml", -"iiieeehemmpmiheihiiiilmqqqmmliilmmqqqqmmqpmmmlmmqmnruurqqtuuutqtquutquDEttqpqqqmpmmpmllmmpmlimmliimmqqmmmmiiiliippqmmlliliiiilmmmnmmmmpmmpqqnmmnurqqqqruqnqqnmmnmmmppqpmmpqqtqtuqtqqqpqqpqqqqmmlnqqqmmjlmmmmmmmmmliihhiimmmmmmmliilllihheeghllllihhhhilililmppml", -"miiiilmmnqqqnmmqqqpqpqqqmmmmqqtqqtuqqqqpnmpqqmquqnpquqqqmqpqpppmmpmmmmqqqqmmpqqqqqqnmiimmmmiilliqqqrqqnmqnmmmnqqqqqqqmmmmmmmmpmqnqmmqqqpmqqqqnmmqqqnqnqmqmmnqmmqutqqquqqmmpmmpqqmmmmmmmqmqmqmqmmmmnqqqqqnmmmljmmmjiheeehiiiiiiiihiijmmiiliilqqtppmmmppqpmmmpmmli", -"mqqqqruvqqrqqqqnuqqqqqmmpqpmmmmmqqqqmmmmquqqmllmiiimmmmmllllllllmmmmpqtqqqpmmpqmqqqqqmpquuuqtuvtvvxvuruuqqqqqqqqnnqqqqqqqqpmqmmmmmmmmnpplmqmmliiiilmmmjmmmmmmmmqpmmmqmlhhiiliiillmmmmlmliiiiilmmmnqqqruuuurururummmmiiiliiillilimmmpmmpmqqqtqttqqqppnqqqqttqqqqq", -"qruuuqqqquqqmmmllimqqrqmlimmmmmpmjliiillimpieiieiiimliiliillllmpilllmqmmllliimmpmlillliiimlhiqqmmmqqmmmmmjmmmmihillljlmmliiilmlliiihhihhmpmlieeiiiiiimmqqqmmliiiihilpmmhehhhihiimmqqpmlilillmpqqqqnmmmnqnmpmmpmmmmqmmlmmmmmmmmmnqqpqqqpmlmpppmppmmmmllmmqqqqmpqq", -"mqqqmqrwqqpmpmmmhhhimlllhmlilmlmqlhhhiiilpqpllllnqqqqqqptqqqqppqqpmmmmmpmmqqpmmmmmmmqqqqmlmmmmmmmqnqmmiimmqmjeeihiiiiiiimiiiiiiieihihhlmlmpmllmnqrqmmqqnmmmiiiihimmmmqmimmmqqmmpmppmmmqqqmququutnqqnpnqqmmqmmlmlpmllqqmihhililihliiiilihlllpmllplllllilmpqqpmpmp", -"qqpnqpqqqnqqqpmmmmmlmmmlqqqmmpqqqqmmmlmlmqqqquuquruqquuvqqtttqtuuuuqtqqqqtqqqqtrxuuxvuuuxuqqqqqqruuruqrqqqrqmmmjieiiiiiiimlmmmmnqqqqqqqutuuuqqqqqqqqqrqqnqnmqqqqmquqtuuqqqquqqquqqqtqqpmqmmqmqqmmmmqqmmmmmmmlmmqllililihiliililihlllmmppplmqspllmmpqqpmpmpqppqqq", -"qmllqqmmmpmqqqpmqtqppqpmqutmppmqqtuwuttupmllmqqquurqquvIqppqqpqtqqqqqqqqqnqmqqqqmqqqqqqmuqqmmqqqqqrrqqqrnqnmmmmmmmjlimmmmmmmmqqqnnqnmmqqqqqqqnmjmmmnrurmmmmmnqqnqqqqqqqqmmllmlmqqqmjlmmmqmpmmmmilimmqqmihihhhimmmmmpmmlmmliiiliihlmmlppqppoqtqplllmppmlmlmpmmpmp", -"pmlmqqplpmpmppmppqtmmtqplqplpmlllmpqqtqqqplllppmmmiiimpqqqmlkilpiilmmmmmilmqqmmillmmqqpmqmihilmmmmmmmijmiihiiliimmmiilijljmmjmmmimjmllmplliiiiieiiimmqmiiiiilmmmlmmmiliillljllmmqmhehilmpmmqlilhiiimmmliliihihiliilmmpmmqmmlmmmmmqtqpqtqttttutspqqpmmmqtpqqppmpm", -"qqppqqpmmmllmmmmmqpmlqpipqmllmlmlllmpqqphiihhhlimmmiimmmqqmlihhlilmmmmmlmmqqnpmlimmmqqnpqmliiihhjmmiiiiihiiiijiimiieffiiiiiiiiifhfhieilmqmmiiiiiihhilmiimmqqmmmmnpqpmmiheeehehiiilmqqqmlmmtqmilmiillmqmlqpppmppmmmmpqqqquuqqtuuutDEDtttuHDHDGCDCDDutqtDIDDuDutuu", -"DDuDuDttutqpqqtqqttqqqplttmhlmlptqmpqqqpqttqpqppnqqqqqpmlmppplhhmmmmmmiimmmlmjmmlilmmmmlmliiilihiijljlmmmmmmmliiiieieiiiiijljmjmimmmlmmquutqnmnqqqmqnpqqqquuqqquuruvuqmmqqqqqrtqmpqquuuqpqvxqpqqqqnqtuqquqtuuuttuutruxuuuuutruuuquDtqtttCCDtptCtqtDDuDCqHDCDLDLH", -"NDCCDDDCLDCtCDCCuDuuuuutuuqmpqqqqpmllpmmpmliilihmnqnpmmllmpqqpmpqqqqmmmlmmmmmpnqqqqqtqtqmlillmmmmmmnqnmqnqqqmmmmnnmmmmmnmmnnnqqnrqrrqquEuuuqqqnquqquqqqrqqquuqqqutquuqqqmqqqqqqqqqqqqquvqquuqruuqqqtruuuqqqqqqqqqqmpmqqtqquqqpqqpqqpppplpppopppplmqpmpqmzqqtDttq", -"pmlmqCDCztqqCtCqHuuDHDDIqDuuIIutututtqttuuqqtIIuuvxvvxurutqtttuIuuuuuuqqruuvxvxvququvxvxurqmqqqqqquurqqqqrrqnqruuurqnnnnmmnnqqnnijmiillmmqqqnnqrmmqqmlmpuqmqqqmlqmnqqqmqqqqqmqqqqquqqqqqqmmqmqqpilmmpmmmtqmlmpppmmqmmmquqquuqmmqqtpppppllpolpsplmqqmmpqpqpmpqpmm", -"llmppqpmqqqqqqqpruqqquupptttpppppmquuupmptuuuutqDDtqppppuuIurruquuuurqqquuuuqtqquuuuuuuEvqmmqqqmqqtqppnqqqqqqmmmqnieeimmmmmlmjiiiljmmmqtqplhllpluqpmmmpmmqqpmmmpmppqpppqhmtqqpmmpmlpqpmhpmpppppqpqqppppmtqllpuqpnrrunmmqrtqqtpplqtqpmmmlpquqpmppqpllmpqqtqpqqDtq", -"qqtqqpqpppppqppqqtuqqqqqqqqpppqupmlppmllqmlllmpqpppmmmlmimqqppnqmmqmpmmmmqnmmmpmqnqnnnqqqmmilmmmlmppmlihjiimjiiimmmiilmqqnnqnqmiiimllmmqqqqppqtqqqqpmpnpmqqmlmpqlmllmpmpqqqtqppmmpmppppmlppmmlmpppliipqtqqplmqpljnnrqnqrmmlppppptutttuuttuutqtqqttDuDtqpqpmmqqqm", -"qtqpmmmqtrtqqtqqquvuqqtuppmlmppqqppqqqpputpllpqqpmpmpmpmhlpqnqqpmmmmmmqqmmpmmmqmmmmmlmmmmmmmjlimhilmmmmlmlmmmmjmiiiiimmmmmnqqnmmlmjmmmmpmmlllpmllmmmmllmmmpmmmnppmllpppmppplmmllllmpmmmpmpqpplmmpmlhhlpqllllmppmrrrvvvuItututtuDuHEuuuHuuHuuIOIDOOHMDOEHDDttDDtq", -"DDHDutDOqqqppmppmqqqmlmqppmpsqplllpqtqpmtpmpqpplqqqpppmpmqqqqqqqmmppmqqtmqqqqqqqnmnnmmmmmmmmmmmmllmpquqqmilmmiilmmmllmmljmpqnpnmnnqqqqqqqtqqpqqpqpmmpqnpqtqtqttqutpqqutqppmmppppmppqqqttttttqtqtwvwwuuuutttqtuuuEvvEEuuEuuDutuDHHEwututqtttuDIHuDDqqtqCtDutDIOOD", -"qtutqDIOOOOODHOOPOPIPIIIuutuuHutppqtutppqqqtutmltqpmmmpqppqqpqqqpqqmqpqqqqqqmqqqqtqqqqqqmmmqqqmlmmjjmmlimmmqpmlmqtqpnqqqqqqqqnqqqqurtruuuvutqtutEuqtuvwuuuuvIvuqtquuututquuutqtuuutuuwuuutqtuuttuuDIIutquuqqpppqqnqqnmmqlmpmlpttpqtqtqqpqquuuqpppppqpmlhlllpqtuu", -"lmmmlpqttttqqqDNIvtuEDutOuuuIOOOIHDuDuuDHDHEIIHutttqtuuDtutquuvuuuuuuuuuuuuuuuuxEEvurqqrqqpqqqqmvvuuruvvuuuuuutuqqqmpqqquuqqqqqqmnqqnpqqqtpmlmmmuqmmqtqqpmqtqqpmlppppmmmpqttqpmptqpppqqpqpmmpqpmlllmpmmpqmlllillmmnqnmqunqqpmqtpqtttqtqpqtDIHuDItquuHIDIutqqtqpp", -"qtqqqquDDDDtqtDOEutuuutqutttuHIOHuttqpqtttttttutDDDHDHDDtuuuuIIIDEIEvuuDuIuuuEIIuuuutqtqqqqmqqqqmmnmmmqqqqqqtqpqllmllmppuqqqqpmmmmmmmmmmqtqpmpppmmmmmmmmllmmpmmpmmllmomllmpmmlllmmmlllmpmpppmlmmpppqtttttppqtqtqqqqruruIuIuttHuttuutuuuuuuHIOIOXOIHDIWY2WPOHuttq", -"ttqttDDDuDtqpmqtuqqqtpmpqqqtttttqpqttpppmpptpqttqqtCtqpmpqqqquqqqtqtqqqqmmpmmqqqmmmmmmmqmmmmlimqnnrqnnmqillpmompillllmmlqqpqqqqpruqqpmqqqqtqtqqpqtuutqtqqqquuquIutqqtuttqqqqttutqttqpptutuxuqpqutquIIutuutquutqpuqqqqqqqqqtqtEItqtttuOWXHutqqqtDtqtuuDwtuutqtuuH", -"qqtuuqtqDtuDDDDODDEHDttutttptDtptpptqptOQHuqtpmllpqlpV0QuqqtqpmpqqpmllmpmquutqpqqmmmmmmmllllmplhmmjiiiimillmpptttqqpmppqmpmquuqqqrrruuuuuwuuuuttqquuDuuuuuuuuuIEHuuuHEwuItptuutuIIuuuuuuIuutuwutqtqqtqqtquqpputqrqnqqmmqqtqmquupqqquORIuqpmpppppptuDIItppqqtqppp", -"qtqtDtDutqDDDtppuuuDDuDIIOOHOWXHtttHIDOY0VONDCtqtLOODHDutqqqqppqlmpmppqtutpmmmpmmmmppqpmqqqqtqmlnnnnmmmnmmmlmpmptutqqqqqqqtqqpmmqmmmmmpqqqqtuutquqmmmpqtipqqtrqqlpqtppqutqqtqpmpllllpqttqtuqpmtutqtpppqqtIIupquwqqpqqpnquvtpptuuupmlptDumpqpqqqquuttuDtmmppqtuuq", -"qqqquDHODqtqqquEttqqttqtDHHHNXODODNUUHHOHNHHNHDGLQYYXNCDODDHDuuItuuHIIOROIDHHIDuwDwEIIwutttuuuutvuurqqqqqqmpppqmlmmmlliimqqqmmmpmmmmmqqqqqqqpqqpqqpqquqmmmqqmplipqutqpqumqtqppqtutqqppmpqqppqtqqqtqqmptuptuqlmpmpmqqqqpqtwJIuuuwuwDxDuDHquIDuIIHuDuHOPHttqqtHIut", -"qqttCDDDDtqtqtOYuqpqqqpppttttHHsONNOHtqsqtqpqCCCppCNCtqqtqtDutqututuuuDDtuuDIDtpqqqqpqpmqqtttttuvvrrqrrqrqpmmpmlllmmmmmplmmmmmmmnqmmpqqqtqpllmppiipuuuqlqqqmmmpputpmmplhlpplipuuililmqqqlllptqlhlmmmlmpquutqttqmqpppqqqqtuPQPuuumtIOIuuuuDIHutuupquIIHuqttpqutqp", -"DIODuDtqtDEOHDqtDtqqtuCDptDDDNNCCtCCCCtCNHCppqtpCNONOYWDqtuDDqqqtqqpmpppqmpmmpmpqtpmmpqpqqqpmlmlpmmmqqqquqmlmiihjllllmmnmmliiiiiqmmiiliillillmpqhiiillmmhiihilmqupmllllipqmhhllltppllhhhlpuuqplmpqttqqqtuuutuwupqqqqqtuuqqpqqmmttttqpqHOIHuIuqtItuIOIutttttuuHuw", -"uDODDODtODOOODDuDDuDDDDHtNNNNOOHDDDDDNLDUUHttCDtlpppCNDpCDOOODuDDDtqttutqttttqpmliihhlmlppmllllmmllilmmlmmiimmmiiiheeehimiiimmmimiilmmmmlmpqtqppqpmlmmpqquIxuxuuqttqpqqtqppmmpmlmmpquwwuuuuttqttutuuttqqqttqqpqquuttuxIJIxvIxuvvuuqqptIXutqtqptDutwuttuIuuuwuuuu", -"mqtquDODODtDIOOODDDHDtDDDOOHNONNWUNNNNNGHONCLONNCCCCDNDCtCDODtDHDDuDDDDDuDDEODqmqttqtIIuqpppqttttqpmpmmimmmmmnnqmmmmmmmmmnmqnqqqnmmqqutqquuutqppqqtuuurtqqtqqqmmmpqtqpqtqppqttqqtttttqqptplmptqpqpmpppmltqqtqppqttuqtuIIuqtqqpmmpmommmpplpmllpqpmlllpmptpppmppll", -"lpplmtqpDtqDOECtqtDENDOQNUWONWWOUNOUOUNDNWUNNWUCYUNNLtCODDOOOEOVOOOOOVOOWODDOOOItIDuuOIDIutttuutuuqtuuuuqqqnmmmmnqqqqqqruuvurqrruuuruuqmpmplllmpmmlmqqqqquqqpquutqqtIwqlpllmpmptpqqqqtqqqqutqquxuqqquuuttpllpqmllmplmqtqIvumimpqpmllllmlmEHmpIIpqplpqpppqpmptttq", -"mmmmqqqmimmqmpmjlpqCDCqmDNDCLLNUUOUWUOOOOUVUOLOWONOMNLOUHDCtDHHtHuDHOIDtuuqtuuqqqqqppqppqmmpqqqquqqqpmpqtqqtqppqpmmlllmppqqttqqqutqtttttqqqttqqpmpqqpqtuqqtuutDDOEuqqmpqnqqqqqqqqqqtqqqqDtNOHtqoqlmqqtqmmpliplhtmlmptDDHtHtpsqttqptutmtutuuuqqqqtqppppqqpqqpmmmm", -"mqmmnqrqmmmimmmqlllppmpllpmptCzHCCqCCzCCCDDCqtzCDDCtmpppqtttDHDtqqpmppmlqtuqmilmqmliillitqpmqquuqpmqmlmmllmqtqtuutqqqttuqtutttttuuutuuuDtppmppppqqqqpmmlqmmmpmmlqpmpmllmppqpqpqqmmpmpmqqplpqplplmilmmqqplmqtuqpqtqqtuDHDtDtppppttpqtqptuqttqqppqqqqqmmpmmqqppqpl", -"pqpmppqqqppmlpqqlmpmqpqqlmpmzqCDDDCDDDDMLDDCCztqCLDCtqqtmppqtttpuuttpppqqqpmqqmiqmlhiilluqmlilmmmmpmmliimmpqqqqtqppmpqpppmppmppqmpqpllptqqplllllmppqqpmlppmpquqmqpmppmmpmmmmmmppmmmmlmppqmmpllppqmlmpquqttuHuuHDHIIOOOIOOQOtHHDHODuDuHOHIOOOHIHIOODDDuttqtuqqDtm", -"uuutqqqpllmlmllhpmpmpmppqCpptqqCCqqtzqCCLDCzCDCzpppqpqtCmppqttpppppmlmpqmiimpmlitqpmmlmmqpmhhilhmmmmllilpmpmplmmqmmompmlmppmpmpplmppmlpqppmppmlillimpqpmmihiptqpmmmpqmpqllllmpmmmmmmllmmtplpllllqqqqquIuutDIuHPIPVWVQOWXQYXOXWW0WRWQOWYRYWWWXUXWUWUXOOMOHVUMHOEq", -"DNINDttttDORQOutillmllilqqmlmpmtqpqqtppptqpqqqtqqqqqpppqtttttttqtuuuttuDuOXOuqqvttqtqpqpmpppqtqqpmmlmmmmmpmpppppqplmppllpmmlllmpppqqtqqpqpqtqpppqpmpqqqpqtpmpqqptqtttqqqpmmmppppqqqqmqpqtmqtqtuturuvuJOuutIWIDItHNONHNU0NWTNTWOWOUWUNOWOWONNHNGDOOPUOOODDXYQOOOH", -"HDNOOODDtDHOONHDtCDCtppppqmlptzNDCDLLCqCCzqtCDCCLNLDDDDCHODDtuCtqtttqqqtuIOIqmnquuuuutququuruxIuquqqquutquuuuuuuqqppqqpmqqppmppqtqttuwutIHuuuHIDIuuuuDuDIIIuuIIDPIDEuuuHIDuuuDutEIMIDuDDPDHUODNqpquvDIOuuuIDtuDtDDDDCDQWCONGHNNWNHNOHDNHUNNHDDHCHLHODDDDtLPODDOO", -"CttDNCCCNNNNNNONOUXUMODLqCttDLDODCCDDDCDLNDLLNLMCDCCLDDDDLHttuDtIOIDuuuuuuqquuuquuuuqqtutuqpqtuquuuqtuuuuxxuuuutwuwuuuIxHIIIuwvIIIuDIOIDIHDuwDIHuDDHDDHImtqqtDIuDttqpmpqOIDHEIDuEEDDDuDDODuDtqmlmmqtquupDHtmpqtDttGDDGDNNNHCGNNWUCGNNGNNWWNNNNNNLDLDDCCCCCCLDqCO", -"NtpCHCtCDCCCCtppDDNDCzCDCLDzDCqCOLLLNLOONDLDDDDDDDLDLLHDttCqtttttqqpppppmmqqnmnqmqppmmqqqqmiiqutqqqqqqqmpqqqqtqqqqtttuuHuuuuuuutDttpqtttpqptqqppqqtqqppmlmppqDtpIuqpmmpqppmmtqqpqmmmmmpqDqqDqqplimqqmqqipuqlppmtpqttttspGNCsCCGN1CCNNGNHNCCtGCGCDNDCCCqqODDLDtqD", -"DNUCppCUKspppCCpDpCDmtLpCqmlpqCDlpqptOOLDDCtzpplppCDNDtCqtpppllpmqpiilmmmmpmmmqqqmlmpqpqplllmmpqqqqiimqqpqplimtqmpqpmpqtutpmpppmpqpppqqqpmqqsppqpqttpmpqqplmlmpqqpqpppppmpppqttpmqqqmlmmqppppmllllmmqqtuqtuutqtuDOODsqLWDHNUWNNGCCGNNCCCsCCKCttCDOCzOMCCOzDOLqCz", -"pCCCCCCCpCUNpCLCDpqCpqDqmtNODCDLOUOCqCDCqqqpqpppmppqmpmmtpmtOQHtmpqtqqplpqqqqqqrtqqquqqpmllmpmmmqqqqppqqmmmlllmplmppmppqpmpppqqtmmmpmpppppqqqppqlmpmmlmpmmmppmpppppqpqqqtqqpmpmlmmqnmmmqmpqqqtqqurquuuuuqppqtutqHNLCtDONCCGNHNN0NKNOUNNTXTNNNKNWLLDDLtmCLtztCNDp", -"CCKNLNLNlCKLKNTpCqqCzpqCCDOLCqCNDOOzpqtzqpqqqpqqpqqppCDtqplpuOuppmlmppqqmmmmmmnmihillliimlllmmlmqmmqqqmppmpmppmmlllmpmmmlmmmppptppqpqtqqtqtttqttqqqqqqpppppqtqqqqqqqqqqtpqpmppplrurqqqqutrttqmlhmmllmmmmmllmpqqpqqqlmCCpqzCCppCWCCCKNNCNUNDGDNNUNCLUNqtLOUNzCNCm", -"NUNKCCLTNqCCDUTCDDCDDqmqOLqpqppmpLUOOOUNDCCqppqqpqqlpDDCtttpppqtutmpppquDuuuurqqtttuuuuxuuquuuuwqmpuuqqqqllqqpmpppqtqttptqtqqqqqtuttttttqpqqtttuwuutttqpqpqtutqttqtqtqtquuuuwEIInmmmmmmmmmqqttqqurqqqtttqquttqttDDCqqLDqmtDLpppLCCtCqppCCppCCCCpCmCUCCNLCUUCqzDN", -"ULCzqzCLZNLUKzCLUNDCLCtLNCqCDzmllpqqzCqmLDCDzpqCCLDqqNHqqHODqtHODDDIDqqqEDDDruqnmmqqqpqqmllmpmppmmquqpqupillpllmmmpqqqpmqplllppmtqqtqqppmlmpqqqqtqpqqpmlpmpqqqqtpppmmpmpqqpppmmpmqmmljmmpquuvHuuIvuuuqqqqtttqpqtAOMDrEDqCDLNDzDNOLLDDCDLCqCNOLCqllpCpzLpmsppqppZ", -"CplqNUCpLpzUNCLCUODztDUXDDLOLDDUDLNDNUODODCLHDCDDONLOUODptCttDttqtDqppmmmmmmqmnmlmpqtnllmmqtuqpmhhilihimqmmmmmpplmppppmpplilmpqpqttttqqptpqttqptppmpqqppmpmpqtquqqppqttuuutuqpptrqrqqqqquqqtqppmmmmmmpmmplilqtplmqqqmmmmqqqqqqqDDCDLDCLONDDDLDCDpCLqpCClCCllCplD", -"zqzLUULmmmpzLUMzCzCqpLULLCCDCCNVptCqqDLCOCqLOLCDpppqCDCtmpqpqtphqqpilqqmmqqtrqrupmmtqpmlpmmqqpmmhihhhehhpqqpppqqqqtutqtqttqttutqtqtuutqpttquutqqmmppqtqqpmpqtqtutqqtqtuupppmplmqmmmmnmmmililmpqtqqqqqtuutplpqtqmmmnqnmmmjlimllmqpmptqpqDCqqqqqCDCTUKLCzpTUCmKtlp", -"mDSULzpqhDYLlzNzllDDmDNlCpmDLtmllqDCqCqpLpmCDtmpDqqCDqpmpttqpttppttqDXIlqrDEDruEIuttuuuuIutqqqqtqqqmmqmmimplilmlhlmmllllmpqpmlhhlmpqpppmlllpqppllllmmpmpmlpqtqtqppplmmpppmmmlhlmmmmnqqqqpmmmmpqtqqnpmmmilmlllhhhjijqnlimlmqqmmlmmmpqpmpqmmpqqqDOlCLCNpoKq0LoCCpN", -"qmqqDOOOuMOIuqDICqpCOOCmDCqpCqplmqpmtqqMDqtuqpqHCCCDOOHuOMEDurDEqqqpqtqputqqqqquqrurqnqrqqqnqmmqmqnmuvtqpmqqqmimmmpnmlmqmmmppmllihimqqnmmmmmmmmmnmmnmnnqqqrtqmmqnmjmmmmnlmlllmpqqlmpmimlmlmmpmlmmquuqmmpqmmmpqmhjijimnnmnmmnnmmmlzmlmpDqllmqqlmmlllmmlmphlmmmpmm", -"mmmmmqqnqturqtuDDDCDNODCOMNLOODCHODDDttOIDOOOqDOONCqtDOOqtuqqpnmqqpmmpmlrqqqmlmqmmmmmmqrimmmqqnqimlhmmmliihmmmmmmjmmmmimpqpppmmlunmmnmiimmnmmmmmnnmnmmmnnnqqqmmmjjlmmmmilililmqqmilnmlmmqmmqqmmpqqqqqpmmmlmmqqmlmnnmnruuuruuqnmnqLplllmlqqqmmiiqqmlllmqDIDtmlmmm", -"mqpqpmmmmmqqtDMOmpmpmpmpztztCzqqqpqtqqqqpqCDDpptOODCtqCDqqmqqqpmmpqpqquqpmmqqquEqqqquqmmmnmmqqmmmqmiimmmmieimqqquqquqqqqmpqpmllpnpnqqqqqnqqqnnmqrqnnqnnquqqrqmilimjmmmmjlilmmpqppmptqqqqutuDutqqqqpmqqmmmmmpnpmimpmliiiijmnqmimqlCmpmptmqDDqmmpmllqDDtqqpqqttttq", -"qqqqmmmpllilmqqqpmpppqqpppqqppqqpmqHqqtpmpqDDqqqtCDCtqtDDqpmqqqqhilmmpqtmmmlmimmqnmmnmiemqmimmihmqlehihiqliilmmimjmmpmmmtrtqtqttnqrrqmiiiljmmmmmmmnqqnqqqqqqqqmlmmljmmmpqqqtuuuuqpquqqtpillmmlllqmhehlmlihhhhiedaeeeeiimdeiiiiiihllmqqDqlqDqpqqqpqqqtqqtpquDDDqq", -"qqqqpmpqqmmmmmmpqppqDLCqpqmpmmtCDptDqqqmqqqtDtqqpqqpmtMWODqmqqqmuuDtqpqqutqqqqqqIuqqquuuimpmqnmqimmimlimmlheiihedehjiilmhedhhhhhlmmmiheeddddddeeeeimmmliiheilmmpjiiiiimmimqqmlmplippmmpicdehhhhdlhddeehiiheiilllqqqiheedmlimmihehlhpplmhhqqpimmipmpqqpqqtqmpqqtD", -"mmmmmmmmppmpqqqqpmmpCDqpppplmpzLDqqqppqtCtqtqqpmttCtppqtpmpquuqmllllhedhihiiiimmiljmmmliiqqmmqqqmmpmqqmmliiilmmiimmqmiimliklmpmmimlieiileeeeeddeeeinqmilmilillmpijmmmmmmhlmlihhihhllklmlhlllppmmiiimmllihiehhiildhiilmqqqmmmpmihdlhmplpimtqlilmihlpttqmmplhillmm", -"hhhhhhhhihlillmmpmppqqppqqqpptDDDtmpqttEtDDtqpqqqqtqpliiilmqCDqmllilmlllrqmpmlilimquqmhehmlhiiheililmihhimmlmmqqmmmmlihiililllllurqiheieimmliiiiiimpqpmmqpqpmllmjmnnmmmmmqqtpmmqllllllplhllllpplpqqqrqmmhhhehehelmplillmmllpqpppmmlqDqDqtqqmmmmlmliiilpDDqmlkedc", -"qmmmppmmqqqqmmlllllihhilhhhhlllllmliqlelhlmlhhilmlihhilpmllmmmmlmllmqppqqpmqqqqqnqqmihimqunmmqmlimiimleeelmieimqiiimnqqqlmmpmlllmmmlmmmmiliiiiimlimqqnppmmmpmllpmmmmmimnlmmpmmmmllplllphllplmpppuqqqtqqmqqquEDuuDOEtppppqpqqtquDOOqDCqqlmmmpqqpmllllpllmUtlkilpq", -"qqppqqqmqDCpmqqpmmppppmmppmmllmtqppqpmmllillllllhilpqpqtqpptDDttquDIDuqqqquvuuqqpqqpmqqpuqppqqqmmlimmmilmmiimplhmimqqmmmqqpqppppnmmlmmmmpmmpmllilmqmqqpmmtqmlpplmmmnnmmilpqqmlmpllpppppqppqCCtqpmmmmpqmmlqqmqqqqmmlmmpqqDqtDDtqqODDqqqqqtCDDDDOODDDCqqtCCCLPODqt", -"OMDDMNDDOODuqqqqppqqDDtqqqtDDqtCDqqqqppqqppmqqqqmmpnpmmpqqqDODOOODCqqqqquqqqqqqqqqqqmpmlpmmmqqqqIuqpmllmuuqqqqniqmimmliiiillppqpmlilmmmlrpmmmlmqmqqqmlillllhhllhiiimmmieiihhhilphlpqzCCCpppqzpppihllmmliimpmmmilmlllllmmppqDDqplmpquLDDCqqqCqqCDCLDCqCCDMNDNLCDL", -"ONNLDLONLCCCDLDDDCDDLNLDNCCqqppqqutpqDDDOEDuqqqqqtqDutqqptDDqpqCuqmmppqtqqpmmqqqllllmpmlmpqqqqqtuqnqqnmqnqqmqqqqrqmmmmlmqppmmpmlmppqqqqqqqqqqqmpimqmiiiiquqpmpmhmmjmiiihliliilmmhhlmommmpmpppmmlhiimmllilqqmpmlmlmilmmmqmnquqqleilmqqqqmpmlmpmqCqCLCCDLLNLDCCCKO", -"qzDCCCzDCmpLUOLNUOLDCDLOLtmppqppqCqmpDODDHDtqppmmmqqqnpptDHCqppqDttpmlliiiilmljlllllpqplhilllklihilmqqqmmpnqquuurqqqqmqqqqqtuHIwDuDuDDutqquDuqqmquurqqtqqqqppqpmrqqnmmiipnppqpmlpmllhllpmlmllllllmpmihiimmmmqqlmiiimmmmmmmpimmmiiihhililmllllllmpCCCCCLNCCCLDCDL", -"ptDDCqCzDqCLULCztDDCmpqDppqNUOzpqDDpmqtmpqqqqpmpqnqqqpmlmmpppppqpqqqqpqqpqqqqqqnmllllmlhlllilihhiilmmmlilmmmlmmmmmmmmqqqqqquIIIDODDqqqqntqqppqqqqnnmmmmilmpnqquurqqnmmmmnppqqqlillihllmpmmlllilhnqqmihhlmmiimmhelilmiheeiiiiimqmmmpqqqtuLDDLCzqCmpzqpqCqzCLDCCCC", -"mpzzqqqtztqDDCpmlmCtpmpqCqtDLDqptDtqpqpmmpqtmmlmpmmqqqmmllllmpqpmppqtDIOEuuqqquuuuutuuuqqpppqqqpmmmmmmmlimliiiiheimmmmmmmqpqppppDDqpmlmlmmmlilllqqmmqqqmlmppmpqqmnnnmmnqpmmmpnpmmmmpnqpmtqqqqpmpqqqmlimmqpilqmihmiimjeeelmjlmmmmdhiillilmllmplllpqCpmompCDCppppp", -"pppqztzCqCCzCzCqpqzCCtzCODpppmmpqqqqqtqttqtqqppqjmlmqqqqtDDttHDtODtqqqqpqqmmmmmplmllllllllmmlllmqqqmmqqqmnqmqqqqmmnmmpnpehllmmquDuqqqqpmhlmmmmmhijjjmnmjmmiiihhhiimmmnqrqqqtuDuuEHvDIuuquuuturtqqqqpmmqquqqquqmqqmmnmjmnrnqnnmmjqrturqqtqqqCLLKLzCCCpqCCNLKzppzp", -"LDDDCLOUNUODCLOLOLDCDLNOCqzqCqtqDttttqtDmpqtqtEPIDuEEDDDqtCqpqtztpmptDqmmnqqurqquutplpmpmppllhlpmqqqquqmmmmmmmmjqruqmmmmmmmlllptuzutuuqquuqppqtrqrurqqqnpmmmmmmmimmnmqqrqrDOOOIDurqqqqqqqqqqqqqqqmqmmpmmmqmpqqqEErnnnmmqrqnqrqnuqqqpmqtDODzCCCzCCNLLCTUUNUWUNUUN", -"nDDmpDLDMMLDUOLUCNNLNUUCLKNUNLKNCNULUUULNCCCCppBOErqpqqqmuummqutOuqruuuuIuqqqtrtqrurrquvuEJuqnqqrrqrurqqnqnmmmmmppqpqqplpppppptDKCKKKKCCyyKCCByytqpppqttpppppppppppppmmpqqqqqmquvqqnnqqnnnmnqnmmmmmnqnmmmmnqqqqqmnqqqnmmlqtllllolqCqpliqpmpqzpllmmtqpqqCCDCpoqCC", -"mmmmmmpqztppCzpqplpCCCCyppsCCpqCpypppKCsplopypppmmmmqqqquEIttuDvEuuurqqqqqqquqqmimmmjjmmqruqnmqqmjmnqrrqvuuqnqquqqqqtuqpllmmlmptKLLLLSTSNTTTKByBqpmlllmppqtuDtttKLLCCqtztqqqqmqqruqqqnnnqmmmmmmjmmmmqmmiiljmmjiimjmmmnpplqppoppCqCqqqppCLCzCDCqqOMDDzqqqlmqCqplk", -"DrCDDqzDDCqzLDqCDCCLLpptCqCCCzCCzCCpCNLCCzqCCCzqDDDDDEDDDDutqqttqpqppllmlllmpplhmjmmmmmmmmmmljmiiiiimmmmqqrrqqnnqqqpqqqpuuutqqqqCKLLKCKKCKTKCyCKDCtqtttqqCDDHDDDMNLLDLDOqqmmqpmmnnqnqqqnrqnnnqnqmmmmmmmlmmmilllijijmmmqqpqppqspCLDCzDLDLVNDDLDLDDDCDDDCqDDNCCCCq", -"nqqqzqtzDLLNUOLOUONOKqqCLCCLLCCCHLDDNUUNLNLLDCCCUIDtqttqtqqpmllmilllillmlililmlljiiijmjimmjiiiifliiiimmmiimmnmmjlmmimmpmqtqqpmppzzCCppmppyyyyoyCtqqpqqtqttDCtqtqKKCzCqDDqpmpmmlmimmnnmnqqqnqqruruuuuuuuqqqpqpnmqmnqnpnpmqpmpColBDCpmCDCDNLCCqCqCmpmqqCDCDCqpptCC", -"immlmqmlmqqCDqpCpzzpmqCzqmpqqqnqqqqqzLDqqqCqmmpqpmlimmpqmmlmlillmliilmpmtqmllmmqiiiiliiililillihiiiilmmmqmiehjnqlmmmmpqqhmmmlmpmqqzpmllmCCpoooollllooolopppololpqqppmpqpmmpmliimilllilmmmiiimpmpllllhihlpmmmmpqqqqqqqnmlqplptmklqqmlpmpqCqqqpqppqqtqqppqllpqCqlk", -"muqmmqqihllmpllpmqqilmqmliimmppqilmmpmmlqqqlihiilimppqmplllllmpppmlhlpmlppmlllihmmmmmmmmiiihilliiihiiiiiqmiiiimmimmmmnqqmqtqmppmmpppppplypllomolppomplolplolllppppmmppqqmmpmliimmmmliillmllllmmlqqpmpmppmlllmpppnqqrqpmilmppqpklpCplpppCqCzqpqpmpqzqmlmpllpCCtol", -"nqqmmqmlmmllqplmmpqpmplimllmpmmqmmpqpmmmqzqpmpmlmmlmmllhlmmllpplmmlilmmlilllilhlimmmmiiliimliimlmljiiiiimjmlmiieijmlmmmqqqDpmmmhqpmmpqppplompppppolllllkppppppppqpmpqqppmpmpmlmmppmmomllqpmmpqpmpppplllmppppomlpmnnqqmmlippmppllqqpmpqqLpqCqpppmlmmpmmmpqmllllll", -"qmlmqmmmqqlmCqmlpimqDqlmmlilmmllpqqqmmmqilmmDMDqDqpmlllipttmmpmlmpqpmmpmllllmpqtmmqqmmmmqqqqmqqmmmmnqqqnmmmmmmliiiljimqmmuDqqtqqDqqtqCqmpqtppopppppppspqppqqppompmpmpqqmpmmqqpmppmpqzqpmmmmpqqqppqppllppppppmpolqqqqqppmiqplolllppllpqqCqCzpmmpmillmpqpqDqopppop", -"qnCEqllihlpCCplmqmlmqmmqtmmpqmmqimqqmmmmlnmlmpmmilmmppqqlmmppmptqquDttuqqpmplhmqqmmqmiiilmmqmmlllmmmpqqupqqqqqqqmqrqqqqrqqqqqmqqqpmqDOtmtHDplttplppppomoolloppmlqqqtrqqqqtDqqDDqppmomlmllptCCzppppllpplllpppplmpqpmqDDmllmqqqqqpmpqmpLLmDCqCqqqCuqmpqCqpqqpptDCp", -"ODDDqqztDzqDDDCCDDDLDqtDqqpqqpqqOqmlmpmmmpmmqqmlqqqqqqpputDEDqppplpqqtqppmlmllmtmiileelmmmmmlhhimmpqmlihiheeddeeeeiiijmmqqqqqqpnqqqqtDqplqCqpqplopppptCCCCCCCCGCDqqpqpmllmmlmpmmppqzCCCDqyzzCCCCDDqpCtppDCCCqpppqqDDqlllmpmmlmppqmllipCCqppppppzOOMDDqpmCppCCppt", -"AqqmlmCmDqppzqqqlqLCppmpzCCCCDCCOzqpmmDUqCqqLDqmpqqCqCqzqpllllmpmllpqzqlDCtDDtCDtqDODuDEuDHDuuuHruuuuqqqqqqmpmqqmnmmmmmnmmqqruqtquDuruDtDDutqtDDqtttqtDDqqtCtqtCEuqquDDqtDDtCDDCqCzCCzCzppllmppzlllhllilpmlpqCCtMDCDODDtqAttqDDDDpqtppzDCqqzDCDLqDDDqpmptmptCmpC", -"DDDzqDDqDDDOOLCCzNUNzCCCpzzqpCzpDCDqlhhqmqpmqpmmlllmppmpDqmlptHIODLUNOODCqqDCqmpmhlnpmmlhimllimpmpnqqqquqqquuuuururqqqmmeehmpqmmillillmmqpmmompttqqqpmppppppppqqqpmpqDDDqzCqqzCqppqpppmllllompmlpppptCsthhghllppmhhlqqmillmmpmmlplpzqqCzDCCDLDCDpqDDqqCDMNDLNHKO", -"DDMLDLMmzLUYUOLOKNTNLNNTNUYWTUYUUNLUUNDLCUUUNLNNVUOUULHDDCDHODDtllqqmmpmpllpplilqlillmpmlmpqmllmlmlihillhhllmmmmqnqqrqqqmpnqqqpmiiihimmlilmtqplmmpqpqppqmlilmmplmmpnmmlmmpmllmplppqCqqpppppqtCtClpmpqqqqtqpmlhihhmqqmlilimpmlihhihhehpDppmmpplllmpmmmmmpCDCtCLNC", -"nnpmillimqqCqppDBpoospypsCGCCCCCppppppqClCLLDtmpCqpqCqpqlmpmppllppCDpqCCqqqDDppqqiilmqqipqqqqqppmpqqqmmlliiilllmmmnqqqnmqqqqqtqqurqqquuqpptuuqttqtutqqqpmllimpmlqqutqpmqDDtCqCzCqCtzCtpptqppmpCDqtqtDDqDttqqpmllllmqpmllDDCqqtDDpppllDLlmlllmlhhiihhhlhhlplllCtl", -"qmqqiilmpqqCpmqCBolBBooBBBKCBoBKCUUzhghhpCCCCCppCpmqCqqClllllmppmmqCpqCqtpqCqppqqmqDtDtmqqtquuDulmpqqpqqppmllmmmpmmljliihihiiilmqqmmnqmimmlkilpqtqtqqpmptqqtqtqqqqqrtruDCqqqpppzpppplmplmpmlllpCilihlllpilmpqtqqqppCOODqztqpmqDLDCLDCLDptppqCqpmmmpqrCtqpqtqCNKt", -"qqDDpimpqqCDCtqqCooKColyCCBCBosCpKColppkCKplpCppUzpzzppqlpCtqtqpDtCDtCDtzqtzplmpqpqqlmqqtqmmmpmmmpnpqquuqqqttqqprqmmmmmmmmmlhilliiiiimheeiihhilihiiiilmmillmliliiihhimllmmllllllhihllllpllppmlpqlmlilmmtmllmqqmhllmpmhlmqqqmlilimilllmDUzqqDLDzqqDDLODCqmppCCtCL", -"LDLLDtqCLDUUCqLCLCqttqptDDCDDtCDqCLDCDOUDDDCDLLDuDEHuqqtDOEtqCuqtutqqqmltmlqtmllimmmimqmiilliiilnrnjiifbmnnjjjjijmmqqnieeeeeiiiijjmqqniiedeeehiihilhlilhhhiiliedheeehiiiiiimmmmimiiiheemllmqmeellhddhlliihimttqmpmppqqmllqpmplhpppllhhlmllmpqppqCpmlllqNqqqCLLDC", -"tqpqqppqpmqClmNVqpppmpmpDCtCttDNLDCqpqpmpqCDLDCmDqqqtuqpmpqmpmmilmpqtqtqpmlppmmqpquqqqpmlliihiiinnmjjjnmfiiffiffmjmmmmjijiijnqnqqqqnqrqqmmliiilmqpmihlmmmmpmpmlleeeiiiiiqmimmmidaeiqqmqqmmpqqmpqLqmlmppmtplhheddddddhlhhhmhhihhipqqqqpqCilpqpmlplllmmlillllllmpq", -"ppmplillllqDmlptmmlmmllmmlillllpCplilmlhllllpCqptplmpqqnhlmlmtpmppqtutqqtqpqpmpuquuqqqqqrqqmmlpmmmmiimmmifihijmmjmjjiijmiiiimmnnnnnqnqrrEurtuDEPqqplmmpqpmpqqqqmnqqqrDuujlimqqrrqqDEDmiihlmqppqqDqppquztqqmmmmpqmlllmpmlCDplpplhhhlllhhghlzDqllmpllllmpphlpqpmpq", -"qqqpppmpllzDplhdkhhllllltpllllmpqmllmpqmmlhlmzDCmqqpmpquqqppqDDuqtuutqqquqqpmmpqqqnpmqqquutqqqnpnqrrrrqnnqqnqqrnmmmmiimniieeeeiieiljlijmheeeeillqqqqmlieihiimmmmqmmmqrDErurnjmmqjmmmiedeeilliiilehhlmmmlmpqqppmplmppppppmqqqCODpqqqqqqpmlmtDCpmpplhhlomlDqplhhpL", -"ppqCCCDCCqpppmmqqqqqtpqqCqpqtqptDLCppqtpqCqCDCqlmqqqppqtDtqmpqpmpmmmmmqqqmlmmmllillmmmmmpmmmmliheiimnqnquuurqqnmmnrnmijmiifeeeeeeefieeiijliiheehehilmihhdeddhhhhihedehilqqmmleeeeeeihhiihhlihhhdddddddddddhhhededkmmlilmhlllipmhhhhhllmppmppqpmmCtzDOOCpqqqqqmmp", -"mpqpmpmmppiimppCzqqCzqpqplmpqtqpqCqmlllipmpllmlhmlhlmpmliiilllheiilihilmliilpqpmiilqqmliihillihdeadddeeiijmmmmmiimqnmifiiifeeeeeiieeeehieeeedede#.#dhilmheddeehhhiehehedaddiqqldiiiiiliidhhhihhhlihedhhlehihedhhdipmhhhllllhdhlhlhhhhlmpqpillhhhhhhlpzqpllpCDpll", -"ppplihlhdiklpidllhhhhedhlllqtqqpiilhhihhhihedhlmlihilmlhehlmpmllmmqpmlmmqpqqtuqqpmqruqpmmmmmqqmmqmmilhilhhiilmppmmnmmiiiiiiieeehjiieeijjhfhehiimllhihdddihhehhiieeheiheeeeimmmieadehiilmhehllhhlmmmlllqqDDqmihddhhhhdcddhdilhlCtilhhdhhlCplhhhhhhhdhlqDCmhdddhmC", -"mpmlhppqlDLOUCtUqmlllhhlhhhmqplhlllllmliimpmllllppqpmlmpttuDuqtqtuEIvuuwuuEuuutqvuquuuuvutuuxIxuuttuutqtqqpllmmmqrqqmnqqqqqqmmmmmmjmmnmlnmljimmmmilmmiilihehhlmpihhiimmphlmlhhipqqmiimmmlhlpqmmpilpmmliliihihhhhdhdhhilpqhlmhhlehilllhlmCqmlhehlhllllllehhlpqmlp", -"lllllllllpqqplmmzLLqqmpzqtCCCCDDDMOMEHDDtDLHDqDDEEDuuDEIOOEDDDtqqqtpmqurJIxvuuuutrtqquvIuuqqqqnpqtvIIIuuuuxutqtuxvxvxxvvrqqnqnlinqqqmmmnmqqmmqtmpmpmpmpmmmpmmlilpmimpqmimmqpmlmmnlilmppqqppqtqmpmpqqpmpqppmllmqqqmpqpllmhpqplpqqlllmlmmppmllllpmpppmpllhlllpqppm", -"CDDDCCzCCCDLCCCDCLLKLLDUCDDCqCDLDtCqCqqmqtzqqqpqtqqqqppqqtqqtqmmlmmmmllilmmpqrtqmmqqqqqqqqqqmlllpmlllpqtutmpqtqmurtrqqmmqmmmqqnmnnqrnqqrmnqnqqruqqqqqqqtqqqqmpmqmpmmqqtqqqqqqqpqqnqqqqqqtqqtttqtqqqqpqqqpmpmpqqDqppqqqppqCDCqCCDDDDNDCDNMNDNDDDDCDDDDLDLCDDDCDCD", -"zCCCDqCtztztqzCCqzmpzqmmmmpmmlptqmmpqqqqqqqqqqmmmppmpmmmpmmpmmpmqqtqqpmmiimnqqqmmmmqmmmlmpmmlmljllhimmpqpmllmpmlmmmmnqmmqmmlmmqmmnnnmnmnqmnqmlmqqppmpmpnpmmlmllmqqqqpqqttqmpqqqqpmnqqmmqmlmmmmpmpmmmmmpmqqmpmpqtqqppCDCqqtztzCDCtqtCzqpqtqCCCCzqCzCCDLLOCDLDzqCD", -"ppqpmlmmlllllppmzLzqzpikhlllllmpmmlmpqqqqqmmqqqmpmpqqqqpmppmpppmqqqmlmmpllmmpmilmpmmlmmmmmqmmilmllillmmlhilllllmmmmmqqqnqmmjlmjlmmiimjlimmmmmmmmliiiiillmmliehiltqqppmmmmllllmmpnmiihhmqqqttqmllllilpqpmpmlilmlmlpmlmztmlllmpqqpqpqztpmplpqqqqqpqqpmpppmlmppplpq", -"qqzqpllpllmlmpqmpKzzzpmpmpqqppqqpmlliliiqpmpqqpmqqqpmpqpmpmpmmmpqqnmmmqqiiiiiiiilmmmpqqtmqqqmiiiqmheehiiiimmmmmqqqpqmmlllmmmmmpmieeimmmmimmmnuqmillhiliiqqmliillqqmpmplhhhihhhlmqqiieimuDDDzpmlllilmqqpmllhhhhillmllllpllllmpqpqqpqCqpppmmppppqqCztqplihlllmppmm", -"qCCqpmmpmqqpqCzpmzzzzmlmpqCCqqppmmmlllilpmlmpqqpqqmmlilmmmmllllinqtqqqqqmmiiililmmpqqmpnmmqmmlmmqmmmliihmlilqqqmqqnqqqmmmmpqqqmmmjmmmnnmmqnmpDqillimllllqpmlliimmllmqqmihllmillpnmmiiimmmmihhlpqmmmpqqmliiliililllmlllllpmlppmpmmllmpmmmlllliillDCDCqpllmmppqqpp", -"pqCqplmppCCqpqCqLLLzLCmpmlmmpppmlmpnmmmqmmmmnqqqqpliliilllmllilmmqnqnqqmurqmpmnmpqqqpmmmmmmpmqqqmquuqqmmnmmmqqqmmmmpqqqqmpqqmmmimmmmmmmmqqqmmqmillmmmmmlilmllllllllmppplllpmmmpqmjiiihehhihhiqrCmlllilihlmqqmlllilllllllmlllmlllpllmppppmmpmlllmzqzqpmplmpqqpqpp", -"qCDCqpqCqDDpmpzqKCzpLLpmlillptzqmpqqmllmqmpqqquummmlllpmmpppmmpqqqqnmqquqqpnqqqqqmmmmmqtutqnqqpmqqqqmmqumnqqmmmmmlmmmmmlmmmmmlliifiiimjmqmmmqqqummmppmmmlmmmmpmpmmmmllllmmmmpppmunmiiihiiiliimlhllhhhhhimqHDqlhhlgdlmlhhlhhllhllheghililllmlllllplmllllmlpppmmpq", -"hlyyzKmhlyyzyKKKCLKKCCDLttqtDMONArADEDqDqDttDONCODuuDEuuuurruuqmrrrrqnnnnmnnnnmjiiliiimmmmqqqnnqqnmjmnnnmmmjmiifhiilmmiieiiliihhfeeflmmqquutpttpimqqqmmlqpmqqmmqlplllmllpolllopshlmlhlllmllllhlmpmlmptqlllihhhhlehhlpCqlhhhhilqzqttDtpmlhppmlilqpmllmllpppmpppll", -"zKSLKSKKzKKSLKSSNTONLLNLLDDNDHDuAqzDzqqqCqtqCNDtqnqqqqnpmmqqmmlijiijjjjiiifiimmmmiiiehiiiiimmiimjjiiiiiiiiiieeeieeimqqqqilllihedeeeimmpqxupqwIwsHDDDEIOIDuHEHuDIqqtpqCCpppsspoopLqppqqplpmmppmlpmpmlmpmlmpppppmllmpmlmllmmmllllmlmmmmpqqmmllpmlmpmpppmppqqqqpmpm", -"U0YYLDKCUSUTLLLLLLLLCCqplllmpmllmmmqqqqtmpmlppplllmmmlmmmmqpmliliifeiiiifeeeijmmmlieiiieliiiiheihiiihehinqqmiiimiimmnqqqqnqqpppmnmmnnmmmqtqqspttqpmpqtqpqtDtqqqpzCCCNLCpCLNLCCCCLCqDCpmqpptDCtqqqqtqpqpptqppqqppptCqqqDDCDDDDCqtCtqqtqDDCuqqDDqtDCDDNDCqCLOLDNU0", -"hllppypzKDKzCzypCpppplihmpqttqpmmimmmmlmmmlmomllmlmmlmllmpmmlilimiiijmjiiiiiimnqmmiimmmmmmliieeheiiiiiimmqnmmimmmmnqqqqqrtuuuuutuqnqmmiilmlkhlllmllmqpmhimmmmqpipmmppCplppppolpCmpCqmllqpqCLDDCCDCLqzCDCCqpqpppqqpmpCLLDpqpqpmpppmpppmmmlqqmpmqDCqpqzqmlqqpmlihl", -"hhhmpplhllllllmlppmlpllhmmliheddmmmmmhedhlllllhgllhkllllmllkilkhmiihiilimmmmmpmmmqqqmpqqmiiihehiimmmmmpqmmmqquqqqrqrqqqqtqqqqqpmnjljmllmmlhdlwsdhhlllihhdhhhptqlmlillmmlllllkloplmlhltphlmpppqqzqzppqCqqqpqqpmptmlillmllCCtqppqqhhhiiiliimpmpppDDCCzCCqplllkhhhh", -"pmopCqlhllllllkhlklllpmlttqpmlllqqqDtnlmllmppllhqplmpppltpmmppppmpmmpqqqttuutqqqqquqqnqqmmlmnpnqtrtqqqqquqquuvuqurrqnmnnmmlmmpmlmmimmmmqpqpltIHplmmlihllmllmquplqmmmmomplpppmllllpmhlmphillillmpmpllmpplllpqplllllplkhlmllhhhhllmlihhllplmilqqmmhihhhhllmllmpqpp", -"hhhlqqtqCtqpqppmlmpppppqIDDutqtuDDDMODDDIDHOOututqtCDDDCDDHCDDDDuDDuuuHIuvHIutttruqqqpnqqmmqtruuuuqqqqqqqpmmmlihqqnmmillllllmppmqnmnqnqqmqtuutqttuHuuuuIuuuwDuqqDtqtqpqulllmollhlqCpllmppqqpmlmlommmlmllpikmplhlpppmlhltomllllpqqmlihhililhipplhlmpmlpqpqpmhhhhh", -"ODqtttDNDDDHOOOHLNODDCDDUWPODuqtVUMODCtDtqqtqppqptNOOOONtDNNNCDHDIOEttDOuwDututuqqqmqnmlmmlmnqmmqmllmmpmlillllmmiilmimmqqqpmppmlqpnqqqqqplitulhlhimppmlmpmmtqppqCDDDtnqCDttqCHDCDqqqCDCqDMNCqtqpmptpllliNmhlppppplhhhhllqtppllmpqqqqppmmmtDtDqmpmqCtqqCDzCCtpqDU", -"OHCtCDtqtCDCqtqCtzCLDDDHEDDDqmmqDDDLOEqpmpqqqpmmllpDNCtNqtCttqsppqqpmpqIpquutllpqqqqmlmpmlmmmlililmmihiiilmpqqqpqqqmmqpqmpqtqtqpnmpqruqnqmmllmqtqplptqphlmqtqqppjmqAqilqLqmtqqCqqppqqqpmtpmpqCCtpqCDDDtqtCuqpqDOttuCtttIttttttttDCuDOVOOHMLMUMDMHLNMNNLOLLOMUULC", -"CDCtqttCDtCtqqtqCqmlmmqDDuDtqmpqOOOUUODqtqqqqqttppqHDqpCNCqplppqtDHDtqtDttuDtpppqquEutqmqqqqtqpqpqqqqqpqmpqmqqqnqqqqqnqquutpmmpltqqquuuuqpqqtttqwttuutqquHIIutqqqqDDAqmtDmpqlmppDqmlpqqpDzppqqqqCqqqpqzClpqtqppqppptttqqpqqpqppmqmmpnppmqqqCODqCppqCDDCLDLNDCDCq", -"qDILDqDEODqqppmptqqqplmpmlmmqmquOOVWXOODDIHDuuvIDtCDNtpmpmhhhhlppqDDtqtuHDIIuqqutttqtqqqtqqttqqtnpqqpnqqqrqqqqutrqqqqtqtuuuqpptqqqqqquuuqqpquvtqmppqqqtuuDHIIuutrqquunqquqqtmmmpODqpqCHNDDqqpptqDCpmppqClmptttqqpmpqCqppppqqqpppqqqqpqqpqtqDODpqDqzLLLDDCDLDCCDD", -"tDDDqpqDDtpllilhhhlmllhhlilmmmquLNOUONDDDDDIHDDuNDDLNDqlmplllllmntDEIuDIIIOIHuuIOvttuuwutqtuuutuuurqruurqtrtruuuqtruuuuvtuHuIIutqqmpqqqtuqmmqqqntqqqtqtIqtqplhhdmmmqqqqqEDDEDttqCttqtqCDLHDCqtCDLCztqzDDqpqqCDDHCtqtCttqtttttqpmppqqqqCDqzCDMCqDLCCDNLCzDLNCzDLL", -"qqpmllmpDqmiilhimlmpqqqEqmmmmlmntDNNDtttqqttrtqqtqtDEDqlpmpmmliilmqtqquuuuEIvuwIttquuHtpttuuDutuuuuuurqqqqqqqqnmnnpqqqtuDDEHOHtpuuqqqqquuqmlimmpupppppqqpmpmpmllnmnnrrruDqrODDqmqCNDttDHOODDCDDDDDDLNLNDLDttDDHHCDLLDzqqpmpmmllliilllmmpimqqqpqOLCzLOONNOODqqCqp", -"qqqpmqpqqtqqpqqqlmpmmlllmlllmmmmptCDtqqqqqpmpmtumqqqtDqililiillllmpnmmmmqqqtuqqummlmppmlqmptqppmnnnmmmmijmmjimiiliiimmpquutqquqpuqmmmmpmqqqmliljlhdhilllllmpqttqjimmnnmmqlmqqqplpqDtmlqDCCtqqpppppCDDCztDCDCCtqpmpDULpllhhhhllmmlmmmmllilmmlmlmDCqtDLLDCLCzpCCCq", -"CqqCAtAqCzDDDDDLttuDtmliliimmmqqppttttqpqqnpmqqummmmmqqmmmmmpnqqqqruutqqmmqqqqqqtppmpqtqpmllllllmqqqnmmmimmmimmjlllllmqqpqplppsqtmlhmmmiqqqmmimmlhhlppmpppllihegjmmnmmmmnmmqmmnmlllkhhllqqppppmlmmmpqppmqqtDtppmlmqCCmliehhilmptqqpqqqpmpqmllilqpmlpmllippqqqDCq", -"mmqqqmmmnqDDzqzqqpmlmlpqqqqqqqpqpppqqppplmpmpmmpnqpimqtmpmqqnmliimqqqqnqmmmqqmmmllmpqpmltqppmlmpmnqrqmmmmmmjmqrrqmmmmqtumqqqlpptItmmquqmqqmmimmmqqpqqpmlppmpptqqnrururrnuqqqpqtupptqqpppqppqtutpqqpqppqpptqqqqpppmlmppmltqpmlllmmlmpqqpmlliippmtmpqztpqCmqqpllll", -"hlmppmllhhlillqLmlmtqlimlqmmpmmqpCOUNCqtuHODttuItpqtCtttqtqtttppqqnrrruruqqruuqqqqqqqruuqqmmpnqqmqnmmmiimmiliiihhilllmmmqtqqmmlljimmiiilmqqmllilmllllllltqpmmmpmmliilliihihlqtqDDCDDCpmqtqqtqqtqDCppzCzzzLLCppzqzCDCpqCLtCDCtCDCturuDDuqtDqqDLCqCCCCCDCqCCqpppqq", -"illllllllhhlllhghilqqliilmpqqqmptCCpmlpqpqtqpmqqDtpqqqqqppqqttDDEDuuqqqqqqrtqqqqqquuDIDuDuuuuuuDutuuqqqpmmmmmmmmppqqquuIuuuqtqqmqqnmmjiinqqmpqmlpmppqqtqtututttqqmqqnpmphihmtqpqmllppmplpmlllpppqpmpqqpppmllmDCplllmtDDCzCzqmpmmmmljlllimqpmppqDKppzCpmpqpmmlill", -"pmppmllhhllmtqpmlmpqqpmmmpilpmiilpppolllllmmllllplllmlppqppmlmppqqnmmmmmmqqqmlilmqqqqqpmqqqqqqqpmqmpmmmippqqtutqqqnpmmmpuqqqqqqmnnmmmmmmmmimmqplmppmppmpmqtuuqppmqqqqqmmqttDOHqttqpmpqplllpppllllmpmpmlllpmlllmpqpllllhhqCCqppppliiiilmmhmlmpmpDpplppllmllllllmm", -"llppqpmlpqqpmllmllmlimpmCqmlmllpppCCtppmppqqqqpmpmlpppqtttqplpmmmmmmmqqqquuuqpmqpqqplmmqmmpqpmlmmlmmmmllnmqqqqqqqqqmllllmlilmmmlmljmmmqqqqpquuqplmpmlllllpqtqpmhmmqqmmlmpqmptqmpqqpllmldlllihdhhlmmpmlllmpplihlmhhhhdhlphhhdehilmmihilmphlhlqqlikhllllpmmllllmmp", -"illmqttqCDLCqppqpqqppqqtOOCqtqtOTNDCDCDDHDDDHuutDtDHDDCDDLHDDONHDIHDtDDIDIOOIuutimpmlmqtmpqqqpmmhiillljmmmmmmmlimmllilmqmlllmpmmqnpmqqqpqmqtutpmtuuHuuuImpqtqpllmqqqmmmmlmllqmlqlplllppmDtplhlpqqtqppppqtmhltDqlghhhllquppmllpttqpliiihillhmCphghophlpqltpmlllmm", -"ODtqqDLNtztDUUOLDLOMOMOMOOMOLqmDNNLLNCqpqtqqqqqpqtDOODDDqDDCDDHDDLHqquNDuuDuDtttpquqqqppqpqqqqpqmpmqnqpqqpqpqmmmilililmmqpmqqqqqqqnqqqqnllppmlllillmlllhlpqqqpppqnqqpmpqmqpqDtqtpppmpqttDDDDDDDDtttqqttDDtmtOOCqutqtIHtltttmlpppuqqqpqqqqDDCDpmCpCLtzNLtDDtqtuDI", -"0ULCDLDLCqppqtqpDCqCqpzNLLCCDplpCCNNOLplpmppmommllqDDDCCtDCqptqlmtqpmqDtppttpplpuDIHDuqpuututuDDuuuuuuuuqqqqqtqqqqqqqpqqqqqqqqqpmmpqtuttqmpqtqqttqqtqppmmpqtqqpqqqqqqqqmpqmpqmpqqplllmpmpppqCtppCqpptqtttDHONttttptDWVHqHOHutttttttuDILOLNLOUCCOCLNTOLOLLDMOOUXU", -"qppqCDCqmmpmmqLVUCpppmtVLtqzNDzOUOLNUODtuCutttuupqDNNCtDDOODDLDCtDNtptDDtDHupmptlllilpqmpmmmmpqtmmmmllilmmmmpmqmpqqqpmpmtutqpmmmrtquuvuqqpmpqttxtqtuuuqtuHIIHuuuqquuEuqpuqplmmpDOqlptttqHqlllqttppllptqppmpDDtplklptqpppllppppmlmqmpqppmppmCUCmpplpONppNDDDDDuqq", -"qCDqqCDDNDDNODCCqtDDCDLOCDLOLDDCNTXUOCCCttDDDDHDHDDDOOOLDHNOOOONDOODtqtCuHOHtpppmpmlmpppppppqqqqpqqqmmqqqqqmmmmlqqtqquutJurtrutqqqqqqtuutqptutqlmpqqtquuuDIDuqtquuurpqqqqutqqtqqDCqqtDDDLHCtqtCDDDtqtDHtDppqtqqDutttttpqHOItqtpptqqqtqqCqCDKDzpCCCCLUDCqLUOtqttq", -"tDLCqzCCODLLLCDDCDLDDDNO0OztOUUOLTUWUNDOCuDDuIEHDDNOUVOOOOOONNDDOOONDCDODHIDtlllqqtqtDDDtDDDDtqtuuuuuuuuqqtqtuuqqququuvuEuuuuuuqtqqqqqttppmpptttHutqqtuDDIOOOOIOJIIEuuuuDDDDtqqptttqqtCNtqtqtqqqtttqtCCqtttqtDHCtttDHutDtHtttuHuODuDDDDLpCCCKtpKCCzCCCDLDNDqqtDq", -"DLDDztCDLCqqqqqqCCtzCCCCNCpCNULpsCDCtCtCqppqpptqpqtDHDDCDCCDDNDDDDDqqqtDuDHuqpppptqpqtqpmqDDtqqtuqqqqqqppqqpmmpmmmmmmqqqlmmpqqqquqqpqtqqqplhhllmpmllmpqputuDDIIDEuuurqmqquDDIDtqDLOHCtHVONDNDDHDCNONODOOCONtCOHqDDHODDtDDDtqtCDDIDCttqtCCLNNUTLWLLNUUNLOONDDDDDE", -"qCDCtzCDDqppppppppppqCqqpqCCqpppptCCCpqqqpqmpqquqpptCDtppmmptDDCppppllmmpqqtttqtttqptqpllppppmommmpmpmiilmlihihhilllllmmililmmpmqmlilmpltqpkhhllhehilmliqqpqtqqptmqqpiipilmpqmllppqqllptDCqqppqtpqDDtCttDNDDtCqpqtDHCtptttttqttCtqpmppmpltzKNCCLpBDNLqppCqpqpppq", -"ppqtqpqqCCqpqqqppppqCtpspCCqllsDoppqppplppmpmptDCqpmtCqpqpppqqppqrrrqqqpilmqqquuDDHDIOODIDtqpplkmpqqmlllillllmmmmmmmmmmptpmmlmlluqllmqpmpmpllllplmppmlllqqqqqqpmrtuvqilqqmpqqmlihlllhllptqpppllpmmppzCqmCqCDzpmmkmtzqqqqpqpqqCztqpppqqpolppCNCopCzppmlpqqpmppmpq", -"mpqqpmmpqqppqCqmllpppqpqqqstCtCCmpppqppppppppquIOtqqCDtpttqqttqpqtuDuqqqpqqnqqqqtDDHDNHHNDppppmlmqqqpllmilmlmppmpllmlllmmmmllmmmtqpmpqppmpppllklppmliilmqpqqqqpmqqrtmllqqppqtqppmpmpqqtDCqtDDtpqtqqqLOLqCqqLDppCmpCtztztqpqpqppqtqppqCtppCLNTCopCCCCCpqCpppqqtqq", -"ppqDCppqCqqpqDCppsqsppsCCszCLLqoNNDDCCDDuDDuuuOUUOOHOOLDqqttCCtqqnqqrrqqrqtrtqqqpptppppqqpmppppppqqqpmmlmmmilmllmllmmlilllllmmpqmmiihhhhpppllkkhllihhlmpmpqqqqmmmmpmmiiliehmqplmlllompqqqppCtqptpplmqLCpqqzCCCzDqDDCCCCqCqmppmpqDtqpqCCqptpCKsloppqCCppmmmpmqtqm", -"pqCOLDDONLDtLOOCLNNLCCNUNNCCspsqLCppomppppqpmptupptqqppqppqCtqqtnqqruuuuqqqqqrqqipppmpuDpqptqqqpuqttutqqpqppmpmmpmmqqqpqqqqqqqqqutqpmmllqqppomppqpmpqtqqqtDDuqppqqqqqqqlmlltDqpplmppllmptmlmpmtMpmllpCCqlpCmmqqplpmpqDCqqmlmmpCOOHqppCLCpszCNLCNUCCzCzqqCLIDDOEq", -"qDDDDtCqzCCKDCzyHLCCCDCqDCDLtmllpllmqttqqppqtqppqDDppqDtqqpqppptplpzppzqlmpmmlpqDDDDNOODpmlllhklimmmmmmmimlilmpqmqqpuqlmIumliililllmpqqquuqqnqmmmqqpmlihlmqutmlmmmqqmpqqqquuuquuuuqquuuuIIvuuvuxqutuDOMDDEDHOUODDHHDDNODCCtttDNLuDEIEEIODDDDMLMMCqqpqtttptCqpqCC", -"pqtqqqqtqqqzCzppztqqCCqlpmpqCCDNpplomqqptpptDCuCpqtmmppmttqqmlilllpzpCLDDDDtttquONDCDNDtCtttDtDHEIEuqppqqqqmmmqpqqqqqqqqtqpmppqqpmmllpqqmqmmmmnmimpmlllimmqtqmmppqqqmiilqpqquqqqqqqqmpqqvutqqmmlmmmmqqtqqqqqpqqmllmllpppHODDDNIDqqqmpmmmqqqqquDDmllppqqtqplpqDtm", -"mqqppqCzCpppzCBpmpqqqqmlCqppzLOLOLDDDDNLDDCDLCqqLOUONLDCCDLNCpqtppCDzCDCUNDuCutqODqppqqpONDDtqpqtqqqmmmmmqplllmmllllhillmlmlmmmmpplllilmmmmlmnmmlmmmmmmllmpmpmmqmmpnpqqrqqqquqqqqqmpmmmmtqqqqqqmppmllmmlqtqpmmmpqqtttqtqDIDtuDutuqppnppmmmilmmqpttqpqpqptqppCDtl", -"uDqqpqqqDzptCLCpCDLNLDCqDNDqtDDtDDLCCzCDLDCDDzpppqtpppmlmpqqDtzCCCLNCqzpDCqqqqquCqplmpppqqppqpqqqqqqqqtqppqpmppppmqtmptqpppppppmqppllllmppmpnqqmmpqpqpqpqttDutuDquutqqqquqquuqqqqqqnqqpqqqqtuuuuIODuuDDupqqqqttquttqqqtttttqqqpluuqqtuuqDuDDDILDDDDDDttqCDODDDDu", -"UOODDDDHCtpzCLCpqDDCqCqtpDLCqCCqpqtqppqCqppqCtpmCCCqqqqqtpmpzqtqppCLtztpqttqpqDDtqpppqqtCqttDtqtDuDDDutqquuqtqtquqHIqtIuuuuqqqqpqqqtqpqqqnqqqqqqqqtqqtqqqqutqqtqqqqmmmmmqpmmpmmlmpnpqmqqqmqmqqqqlmmmmmqpmlmpqqqmqmmmmpqqqqqqqqpmmpqtqppqmpmqqppmpptqtCCuqHODttLU", -"qqplhlllqpppCCpplpqmllmplpCCqqppqqqqpqtDtpmqqqppmpmlllmpCqptCCCCppCDypqmpqqqpmqDqqqqtpqqDttCtpllmpqtuqqpuDutqqqpmpqqpqqtqpmmppmmmptqqqpqmmmqrrqrmqpmpnpmmppmpqmmlillmppqpmllllilmmpmqqqmqpmmpqpnqqtqmpmmliimqpmimllmmmqqqqqppqmmllqqpmlmqqtqutqqlmpppqqtpqCtqCHO", -"DDtqppqtmppqCCppqCDtppqCqqqqqpmpppppppqCLzptzqqppmppmpqCmmqzzqzDCCNNCpplmpppmppqttptqpptplmqDtpppqqDLHDDqttqqppmpqpqqttumlklmplklmppmlmmlllqqqqqllmllmmlqqqqqttqqqmmmmmmqmmmmmpqpmqqqpqqmqqqruuuqurqmlihmmmqqpmmlimpqpmqmqqqmmqqptttqpppplmmppppttqqpmppptqpqqtq", -"qtqmlmllpqCCDCzppzDCmpqqDpmpqqqCzqpqqzCDDtqzDCDLqqCqCCDLCNUVNDDOLCUULCtpqpqqttuuCqqttqDDLDHOOLtmDqCDDMDDtDEDuuuttuqpwDuOutqtuHuqilmmlllmmimmqnmnmpmmpqqpmmpmmqqqmpmmpqqtnpqqqqquqqtqqqqqppqqutqqqquqqmmmmlmqqmmqqqtuuqpmqquqnpqqttqqtttqppppqqtuDDDqpppqqDNDplpp", -"qtttuDuDuDDNUONCCqppqDOUUDCDNDDDCDDCqqCLzCCCLONCCCpqCDLNLOOCCDLLNCCNDCtpttqtDIIItDCqtDtqtCDNDtqtLMLDCDDODDHLDutuDDuuDDOOVqtDDDOqqtqtqqqqtqqqtqtuuqttuuuDpqqtDutqpquwuuuuHuuuutuDDuuuIHuDqquHIDuqnquqqqquqquruvvuuuuvuqruuuvxuuvuIwuHIIwDIDuDOPODDUOHOMHODOUICtCD", -"IIDDDDCtDNNNOUUNOLDCDLOUDCDLLDCqmqLLOLNLHDzpmqzqqqqCLOOOCzLOLCCDCCLUHDNDOODDuttqDDDCDNONqDDDtzCDLDtqqqDDDHDDuCuDtqqqqtDDDtqqmtDtpqtDtutuqqquuruuquqtuDtuqtuDuDuquIODuDIIIDuDuuDIIDDIOIIIIIIIOODuvxuEuvEIurqqqqqquruuutquvutqtuvJuuwIIIHwutqtIOIDtOODNNDCNOONDttD", -"IDDuDwDCDDOOUUOULCqqzCDDXLtqCCDOUULCzqqqCLLDztzCqpqzDLLCzpzONqmzppCHpppplllmpqqtllpmpqqqmptqmpptppqCCtmlDCqpppttttttqtDHtDHtltODmmmppqqqqqquuuuutqtrCuAtqqqqqtqtDHDutDHOOIHDutIUOIHOPOOOutqqqqtttqqtrtqmqqqqqqqntqquurtqqquuuuuutsqCIHDDHuttNOOHLOONVODNONOODDCD", -"qpppqqqtptHUONGNqpllqDDCUCmlmpCLLCmlllmpmCLLtzCLMLLLNLDzODCLLqqCCtNUCqtqDtutqqqpmppqtttpltDDtpmppqLOLzppqqppmpqqqtqppppqpqtpmpttqmpmmmtuqpqtqqqqppmmpqqqqqqqqtDDqqqppquDtuDuqqtOutuDDuDDtqppppqqqqqqqmmmmmmmmnpqmmmqqpmmlmqquupmplpttttqtqppqqppqtpptCtDDqqDCplm", -"ppmpppolppCHNCCDCqpqCONMNDDLNDDCCDLLNLCqNMLCpzOYYUOLUUNLUUMLCLCzCtDUHHNDOOIDttqqttqDDDDDDOUODtqtMUNLCqDUpttqpqttqCDqptDDtppqtpmCDDDqqtuDmmmqqmmmlihillmmlllmlmqqmppmpquDqqqtpmpqqqpqtqqtqtqpmpmpmmqnmmjmmlilmmiilhllllllmlllmpppppmpttqtDCppqCqqttqqDCqDDCDODqmp", -"qtttuuttDttDDDNWDCqqDOUULDCDNDDCLMNMLLDLLLDzqpqLpmlmmqzCpzCqzzqllklpmlmlhhklmptuqmlllppDttqplllmCCzCpmqOpqCqtttqpqtpqDHDttqtLtqDqzCDCqmpmmpmpmmmmllllmpplmmmllmptqtqquDCDDHEDtqDDDDDDDHOuttqqmmleimmiilmnnqnqqqqppqqqpqttqpqtuDuutuHOOHDONDDNONLDOOOUHCDOOUUOHCt", -"pqquuHDuutqHNDCNCqmppzDLtmillllmhhhilmzLllmppihelhehhillmmllmlihlkopkhklllllllmpqlkhhlmplhhgdhhkmllmpllpipqpmqpphhhhhomilqlhmplllmmpmmllqmpqqpqqtqqqqqqquuHDuuDEuDDtuDIDOOOODuDDIHDIHDMODLIDttqtnqqqqqqqutruuvvvqtttqptDtttDDHDtCtDOUOLDCqqqqqqppCCttqpDpCtqppqp", -"mpmppmlklllCDpolmllhlmqCpmpqqpmlhlqzpmllzppzLCzqLDzpqqpmDlillhhlhkmpkhmppomlhhlmlkhilhghllhlllmmpihllllphmpllppmhlhdhmlghtpdhpmhmlmllmpqqqqquruuDuuuuqpmmqtqqqtDqtqqtDOOuqqppmmppmmpmmptmpqppmmpurqqqqqnurrqrqqqllmplhlpDqlhklmlllpCDCplqqpppmllpqpmmlqVlqtliptq", -}; diff --git a/sandbox/texture-paper.xpm b/sandbox/texture-paper.xpm deleted file mode 100644 index 35f805b..0000000 --- a/sandbox/texture-paper.xpm +++ /dev/null @@ -1,87 +0,0 @@ -/* XPM */ -static char *on[] = { -/* width height num_colors chars_per_pixel */ -" 32 32 48 1", -/* colors */ -". c #f8e0d8", -"# c #f8e0d0", -"a c #f8e0c0", -"b c #f8e0b8", -"c c #f8d4d0", -"d c #f8d4c0", -"e c #f8d4b8", -"f c #f8e0e0", -"g c #f8e0d8", -"h c #f8e0d0", -"i c #f8e0c0", -"j c #f8e0b8", -"k c #f8d4d0", -"l c #f8d4c0", -"m c #f8d4b8", -"n c #f8d4b0", -"o c #f8ccc0", -"p c #f8ccb8", -"q c #f8ccb0", -"r c #f8c4b8", -"s c #f8c4b0", -"t c #f0e0d0", -"u c #f0e0c0", -"v c #f0e0b8", -"w c #f0d4d0", -"x c #f0d4c0", -"y c #f0d4b8", -"z c #f0d4b0", -"A c #f0d4a8", -"B c #f0ccc0", -"C c #f0ccb8", -"D c #f0ccb0", -"E c #f0cca8", -"F c #f0cca0", -"G c #f0c4b8", -"H c #f0c4b0", -"I c #f0c4a8", -"J c #f0c4a0", -"K c #e8e0b8", -"L c #e8d4b8", -"M c #e8ccc0", -"N c #e8ccb8", -"O c #e8ccb0", -"P c #e8cca8", -"Q c #e8c4b8", -"R c #e8c4b0", -"S c #e8c4a8", -"T c #e8c4a0", -/* pixels */ -"h#kyGCmmmmvmvyjjyyCpjvjvuhhivjia", -"LmymvvyllyyithLvLyvjvpihjjyli#kg", -"CDCQyyCCGyikyCCCyLyNMxyyyLmulyRS", -"NqmvjyCyvuimLLymmCpmmjmCvyyCOAGm", -"jvliivvyymiyjCCpvmjmjvjjmyyCCvij", -"uvyvCiiujixCGmyjymvmvljyCCCvvuuj", -"yyyllBxmONyjyxukxBlxlBCrCjiljkwK", -"pyCCyQSIDDmymCyyCGCRFIzCLmmyyOTT", -"yyjvmvyjuuvxlijvjmmjjjjeijjyjDmj", -"vyvjuiyjjhllliiixljjullylmLjaivv", -"vihhivuuhiuhwxCGCvhkvvyyCyujvjuj", -"CopCCxCCpmxCQCCmxBmLCCCyyyCpCCxy", -"ypmmyyyyyvyyLCyCCRDmyyvymCyvyjpv", -"vjvjvjlujiiiyyCyDjjKjjmymmvjvyvb", -"jyliiiyyxiijymyCpmymNCBjuKimmliv", -"mwhipyliavjjvyCCvmyyuuxmyijyjvmy", -"yjlDNGvmKmmyNLyyCCCCHRSyylyyCCQG", -"jmCsOyyGymyCyjyQyryDnmCjvmyjmmyy", -"NHHyyCyjyjmyCymyyiiuvvuyxlikyyjy", -"mmCymmyymyrCyvyyyimuyyxhhuCmjyQE", -"GCmCyyjmpmmmmvxxliyylkllCmyDSCmy", -"yyCNNNSPCyCCmyByCyyCMPDDOTTRJRTL", -"yppmyCCmyyylijypjvmymCmmDyvmnmmj", -"vymCymvvjlvjyymmvmmCmmvvjyppmiyy", -"CCvmjpjyxlymyyCyyNmjmyvyCyivyyyv", -"CpyyNNyyyyOOCmyvyvCpmCyyyOyLCCCC", -"pypNmxilypDzppymyxdmCyvymDpyLyyy", -"yydhlxyjmyyluvlltiumjyyymjvvjlku", -"cgljjyvpiilyihxyyjvyyyliiiikjyml", -"xymNpihiLChlyyymmyCylixvxiyCjl.t", -"NPREmxyCGCyGryCCCCyCCCLmCypLyLmm", -"mygfxyzHbypvjvvyjKjrHRbjvLjbtvbe", -}; diff --git a/sandbox/trash.xbm b/sandbox/trash.xbm deleted file mode 100644 index 0370f11..0000000 --- a/sandbox/trash.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define trash_width 16 -#define trash_height 16 -static char trash_bits[] = { - 0x00, 0x01, 0xe0, 0x0f, 0x10, 0x10, 0xf8, 0x3f, 0x10, 0x10, 0x50, 0x15, - 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, 0x50, 0x15, - 0x50, 0x15, 0x10, 0x10, 0xe0, 0x0f, 0x00, 0x00}; diff --git a/sandbox/triangles.pl b/sandbox/triangles.pl deleted file mode 100644 index 23dc1f0..0000000 --- a/sandbox/triangles.pl +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/perl -w - -use Tk; -use Tk::Zinc; -use Controls; -use Tk::Photo; -require Tk::PNG; - -$mw = MainWindow->new(); -$logo = $mw->Photo(-file => "logo.gif"); -$papier = $mw->Photo(-file => "texture-paper.xpm"); -$penguin = $mw->Photo(-format => 'png', - -file => "xpenguin.png"); - -$top = 1; -$zinc = $mw->Zinc(-render => 1, - -borderwidth => 0, - -highlightthickness => 0, - -relief => 'sunken', - -takefocus => 1, - -tile => $papier); -$zinc->pack(-expand => 1, -fill => 'both'); -$zinc->configure(-width => 500, -height => 500); -$gr1 = $zinc->add('group', $top); -$clip = $zinc->add('arc', $gr1, [50, 50, 399, 399], - -filled => 1, - -fillcolor => 'Pink:40', -# -fillpattern => 'AlphaStipple4', - -linewidth => 0); -#$zinc->itemconfigure($gr1, -clip => $clip); -$gr2 = $zinc->add('group', $gr1); -$clip2 = $zinc->add('rectangle', $gr2, [200, 200, 450, 300], - -filled => 1, -# -fillcolor => 'white:100|white:0', - -fillcolor => 'white:100 0|black:100 100/90', -# -fillcolor => 'white 0 |blue 20|blue 80|black:0 100/270', - -linewidth => 0); -#$zinc->itemconfigure($gr2, -clip => $clip2); -$view = $zinc->add('group', $gr2, -tags => "controls"); -$zinc->lower($clip); -$zinc->lower($clip2); - -new Controls($zinc); - -$cv2 = $zinc->add('curve', $view, [], - -linewidth => 2); -$cv3 = $zinc->add('curve', $view, [], - -linewidth => 2); - -$tri2 = $zinc->add('triangles', $view, [50, 50, 300, 50, 150, 150, 300, 150], - -colors => ['tan:50', '', '', 'red']); -$zinc->contour($cv2, 'union', $tri2); - -$tri3 = $zinc->add('triangles', $view, [150, 150, 50, 50, 150, 50, 300, 50], - -colors => ['grey50', 'blue', 'red', 'yellow'], - -fan => 1); -$tri4 = $zinc->clone($tri3, -colors => ['grey', 'red']); -$zinc->translate($tri4, 100, 300); - -$zinc->contour($cv3, 'union', $tri3); -$zinc->translate($tri3, 0, 300); -$zinc->translate($cv3, 0, 300); - -$zinc->monitor(1); -$mw->Tk::bind('

', sub { print "perfs: ", join(',', $zinc->monitor()), "\n" }); -$mw->Tk::bind('', sub { $zinc->remove($arc); }); -$mw->Tk::bind('', sub { exit(0); }); -$zinc->focusFollowsMouse(); -MainLoop(); diff --git a/sandbox/xpenguin.png b/sandbox/xpenguin.png deleted file mode 100644 index 1b1d352..0000000 Binary files a/sandbox/xpenguin.png and /dev/null differ diff --git a/sandbox/zinc.tcl b/sandbox/zinc.tcl deleted file mode 100644 index a798e3b..0000000 --- a/sandbox/zinc.tcl +++ /dev/null @@ -1,284 +0,0 @@ -lappend auto_path . - -package require Tkzinc -package require Img - -set top 1 - -#memory info -#memory trace on -#memory validate on - -image create photo logo -file logo.gif -image create photo logosmall -file logo.gif -#image create photo bois -file texture-bois1.xpm - -#set r [zinc .r -backcolor gray -relief sunken -tile bois] -set r [zinc .r -backcolor gray -relief sunken] -pack .r -expand t -fill both -set scale 1.0 -set centerX 0.0 -set centerY 0.0 -set zincWidth 800 -set zincHeight 500 -#.r configure -width $zincWidth -height $zincHeight -#.r configure -drawbboxes t -set view [.r add group $top -tags "controls"] - -frame .rc -button .rc.up -text "Up" \ - -command {set centerY [expr $centerY+30.0]; updateTransform .r} -button .rc.down -text "Down" \ - -command {set centerY [expr $centerY-30.0]; updateTransform .r} -button .rc.left -text "Left" \ - -command {set centerX [expr $centerX+30.0]; updateTransform .r} -button .rc.right -text "Right" \ - -command {set centerX [expr $centerX-30.0]; updateTransform .r} -button .rc.expand -text "Expand" \ - -command {set scale [expr $scale*1.1]; updateTransform .r} -button .rc.shrink -text "Shrink" \ - -command {set scale [expr $scale*0.9]; updateTransform .r} -button .rc.reset -text "Reset" \ - -command {set scale 1.0; set centerX 0.0; set centerY 0.0; \ - updateTransform .r} -button .rc.quit -text "Quit" -command "exit" -grid .rc.up -row 0 -column 2 -sticky ew -grid .rc.down -row 2 -column 2 -sticky ew -grid .rc.left -row 1 -column 1 -grid .rc.right -row 1 -column 3 -grid .rc.expand -row 1 -column 4 -grid .rc.shrink -row 1 -column 0 -grid .rc.reset -row 1 -column 2 -sticky ew -grid .rc.quit -row 3 -column 2 -pack .rc - -bind .r "ZincStyleConfig %W %w %h" - -proc ZincStyleConfig {zinc w h} { - global zincWidth zincHeight - - set bw [$zinc cget -borderwidth] - set zincWidth [expr $w - 2*$bw] - set zincHeight [expr $h - 2*$bw] - updateTransform $zinc -} - -proc updateTransform {zinc} { - global zincWidth zincHeight - global scale centerX centerY - global top - - $zinc treset $top - $zinc translate $top [expr -$centerX] [expr -$centerY] - $zinc scale $top $scale $scale - $zinc scale $top 1 -1 - $zinc translate $top [expr $zincWidth/2] [expr $zincHeight/2] -} - -# -# TRACKS -# -set track [.r add track $view 6 -tags track -leaderanchors "|0|0"] -.r itemconfigure $track -position "1 1" -.r itemconfigure $track -position "10 10" -.r itemconfigure $track -position "20 20" -.r itemconfigure $track -position "30 30" -.r itemconfigure $track -position "40 40" -.r itemconfigure $track -position "50 50" -.r itemconfigure $track -position "55 60" -.r itemconfigure $track -position "60 70" -.r itemconfigure $track -speedvector "20 0" -.r itemconfigure $track -symbolcolor salmon -speedvectorcolor salmon -leadercolor salmon \ - -labeldistance 20 -.r itemconfigure $track -markersize 20 \ - -filledmarker 1 \ - -markerfillpattern AlphaStipple4 \ - -markercolor salmon -.r itemconfigure $track -labelformat "120x40 l0l0+0+0 x80x20+0+0 x40x20+80+0 x40x20+0+20 x20x20>3>2 x60x20>1>1" -.r itemconfigure $track 0 -filled 1 -backcolor gray -bordercolor gray -relief groove -.r itemconfigure $track 1 -filled 1 -backcolor tan -bordercolor tan -relief groove \ - -font "cenapii-etiquette-m17" -text "AFR451" -.r itemconfigure $track 2 -text "WPY" \ - -font "cenapii-etiquette-m17" -.r itemconfigure $track 3 -text "400" -filled 1 -backcolor wheat \ - -font "cenapii-etiquette-m17" -.r itemconfigure $track 4 -text "-" -filled 1 -backcolor wheat \ - -font "cenapii-etiquette-m17" -.r itemconfigure $track 5 -text "450" -font "cenapii-etiquette-m17" - -.r bind $track:speedvector ".r itemconfigure $track -speedvectorcolor red" -.r bind $track:speedvector ".r itemconfigure $track -speedvectorcolor salmon" - -set track2 [.r add track $view 4 -speedvector "-20 0" \ - -symbolcolor salmon -speedvectorcolor salmon -leadercolor salmon \ - -labeldx -20 -labeldy 20 -leaderanchors "%30x30" \ - -historycolor MistyRose -lastasfirst t ] -.r itemconfigure $track2 -labelformat "a3f110+0+0 a3f110>0^0 a3f110^0>0 a3f110>2>0" -.r itemconfigure $track2 0 -filled 1 -backcolor tan -text "BAW452" -.r itemconfigure $track2 1 -filled 1 -backcolor wheat -text "450" -.r itemconfigure $track2 2 -filled 1 -backcolor wheat -text "KMC" -#.r itemconfigure $track2 3 -filled 1 -backcolor wheat -text "" -.r itemconfigure $track2 -connecteditem $track -connectioncolor green -.r itemconfigure $track2 -position "10 0" -.r itemconfigure $track2 -position "-20 10" -.r itemconfigure $track2 -position "-30 20" -.r itemconfigure $track2 -position "-40 30" -.r itemconfigure $track2 -position "-50 40" -.r itemconfigure $track2 -position "-60 50" -.r itemconfigure $track2 -position "-70 50" -.r itemconfigure $track2 -position "-80 50" -.r itemconfigure $track2 -position "-90 50" - -# -# WAY POINTS -# -puts "creating way points" -set wp [.r add waypoint $view 1 -tags borders] -.r itemconfigure $wp -symbolcolor bisque -leadercolor bisque -position "-100 120" \ - -labelformat "40x20" -.r itemconfigure $wp 0 -bordercolor bisque -text "NCY" -tile logo -filled t -set wp2 [.r add waypoint $view 1 -tags borders] -.r itemconfigure $wp2 -symbolcolor bisque \ - -leadercolor bisque \ - -position "50 160" \ - -labelformat "40x20" \ - -connectioncolor bisque \ - -connecteditem $wp -.r itemconfigure $wp2 0 -bordercolor bisque -text "MPW" -set wp3 [.r add waypoint $view 1 -tags borders] -.r itemconfigure $wp3 -symbolcolor bisque \ - -leadercolor bisque \ - -position "200 140" \ - -labelformat "40x20" \ - -connectioncolor bisque \ - -connecteditem $wp2 -.r itemconfigure $wp3 0 -bordercolor bisque -text "ART" - -# -# MACROS -# -puts "creating macros" -set macro [.r add tabular $view 10 -labelformat "x40x20+0+0 x40x20+40+0" \ - -tags f0borders -connecteditem $track] -.r itemconfigure $macro 0 -text une -.r itemconfigure $macro 1 -text macro - -# -# MINISTRIPS -# -puts "creating ministrips" -set ministrip [.r add tabular $view 1 \ - -labelformat "60x20" -position "10 10"] -.r itemconfigure $ministrip 0 -text "ministrip" -sensitive f -set ministrip2 [.r add tabular $view 1 \ - -labelformat "60x20" -connecteditem $ministrip] -.r itemconfigure $ministrip2 0 -text "ministrip2" -sensitive f -set ministrip3 [.r add tabular $view 1 \ - -labelformat "60x20" -connecteditem $ministrip2] -.r itemconfigure $ministrip3 0 -text "ministrip3" -sensitive f - -# -# MAPS -# -puts "creating maps" -videomap load "/usr/share/toccata/maps/videomap_paris-w_90_2" 0 paris-w -videomap load "/usr/share/toccata/maps/videomap_orly" 17 orly -videomap load "/usr/share/toccata/maps/hegias_parouest_TE.vid" 0 paris-ouest - -set map [.r add map $view -color darkblue] -.r itemconfigure $map -mapinfo orly - -set map2 [.r add map $view -color darkblue -filled 1 -priority 0 -fillpattern AlphaStipple1] -.r itemconfigure $map2 -mapinfo paris-ouest - -set map3 [.r add map $view -color orange] - -mapinfo mpessai create -mapinfo mpessai add text normal simple 0 200 "Et voilà" -mapinfo mpessai add line simple 5 0 0 100 100 -mapinfo mpessai add line simple 0 100 100 0 200 -mapinfo mpessai add line simple 2 -100 100 0 0 -.r itemconfigure $map3 -mapinfo mpessai - -# -# Clip -# -puts "crée les clips" -set clip [.r add rectangle $view "-100 -100 300 200" -filled t \ - -linewidth 0 -fillcolor darkgray -visible f] -#.r rotate $clip [expr 3.14159 / 4] -.r lower $clip -#.r itemconfigure $view -clip $clip - -.r add rectangle $top "-5 -5 5 5" -filled t -fillcolor red -set topclip [.r add rectangle $top "-400 -400 400 400" \ - -filled t -fillcolor lightgray -linewidth 0 -visible t] -.r lower $topclip -#.r rotate $topclip [expr 3.14159 / 4] -#.r itemconfigure $top -clip $topclip - -# -# CONTROLS -# -proc borders {onoff} { - set part [.r currentpart] - puts "part $part $onoff" - set contour noborder - if { $onoff == "on" } { - set contour "contour oblique" - } - if { [regexp {^[0-9]+$} $part] } { - .r itemconfigure current $part -border $contour - } -} - -.r bind borders "borders on" -.r bind borders "borders off" -.r bind f0borders:0 "borders on" -.r bind f0borders:0 "borders off" -.r bind track {puts "Entre dans item"} -.r bind track {puts "Sort d'item"} -.r bind track:0 {puts "Entre dans champ 0"} -.r bind track:0 {puts "Sort de champ 0"} -.r bind track:1 {puts "Entre dans champ 1"} -.r bind track:1 {puts "Sort de champ 1"} -.r bind track:2 {puts "Entre dans champ 2"} -.r bind track:2 {puts "Sort de champ 2"} -.r bind track:3 {puts "Entre dans champ 3"} -.r bind track:3 {puts "Sort de champ 3"} - -bind .r <2> {puts "%x@%y, item: [.r find atpoint %x %y]"} - -proc finditems {cornerx cornery} { - global origx origy - - puts "--- enclosed ---" - puts "++ [.r find enclosed $origx $origy $cornerx $cornery] ++" - puts "--- overlapping ---" - puts "++ [.r find overlapping $origx $origy $cornerx $cornery] ++" - puts "" -} - -bind .r "set origx %x; set origy %y" -bind .r "finditems %x %y" - -.r bind all <1> { if {! [catch {.r find withtag current} item] } { \ - puts "<1> in $item" } else { puts "None" } } - -# -#for {set j 0} {$j < 20} {incr j} { -# memory info -# for {set i 0} {$i < 10} {incr i} { -# set a($i) [.r add icon 1 -image logo] -# set b($i) [.r add rectangle 1 "10 10 1000 1000" -filled t -tile logosmall] -# set c($i) [.r add curve 1 "10 10 10 100 100 100" -filled t -tile logosmall] -# } -# for {set i 0} {$i < 10} {incr i} { -# .r remove $a($i) -# .r remove $b($i) -# .r remove $c($i) -# } -#} - -source "controls.tcl" - diff --git a/sandbox/zinc.test b/sandbox/zinc.test deleted file mode 100644 index d5ce7fe..0000000 --- a/sandbox/zinc.test +++ /dev/null @@ -1,154 +0,0 @@ -#-*- mode:tcl -*- - -if {[lsearch [namespace children] ::tcltest] == -1} { -# package require tcltest -# namespace import ::tcltest::* - source [file join [pwd] [file dirname [info script]] defs.tcl] -} - -proc setupHier {} { - set view [.r add group 1] - .r add rectangle $view "50 -150 100 -50" -tags "poly rectangle" - set model [.r add group $view] - .r add curve $model "50 -150 100 -50" -tags "poly foo" - .r add rectangle $model "50 -150 100 -50" -tags "rectangle" - .r add text $model -text "UnTexte" -tags "title" - .r clone $model - .r clone $model - .r clone $model - .r remove $model -} - -load tkzinc3.1.so -zinc .r -pack .r -update -setupHier - -test FindItems-1.0 {Test subcommand 'all' with no args} {} { - .r find all -} {2 3 16 19 18 17 12 15 14 13 8 11 10 9} - -test FindItems-1.1 {Test subcommand 'all' with top group} {} { - .r find all 1 -} {2 3 16 19 18 17 12 15 14 13 8 11 10 9} - -test FindItems-1.2 {Test subcommand 'all' with top group, non-recursive} {} { - .r find all 1 f -} {2} - -test FindItems-1.3 {Test subcommand 'all' with inner group} {} { - .r find all 2 -} {3 16 19 18 17 12 15 14 13 8 11 10 9} - -test FindItems-1.4 {Test subcommand 'all' with inner group, non-recursive} {} { - .r find all 2 f -} {3 16 12 8} - -test FindItems-1.5 {Test subcommand 'all' with inner most group} {} { - .r find all 8 -} {11 10 9} - -test FindItems-1.6 {Test subcommand 'all' with inner most group, non-recursive} {} { - .r find all 8 f -} {11 10 9} - -test FindItems-2.0 {Test subcommand 'above' with id} {} { - .r find above 9 -} {10} - -test FindItems-2.1 {Test subcommand 'above' with tag} {} { - .r find above foo -} {18} - -test FindItems-2.2 {Test subcommand 'above' with tag in group} {} { - .r find above foo 8 -} {10} - -test FindItems-2.3 {Test subcommand 'above' with tag in group} {} { - .r find above foo 2 f -} {} - -test FindItems-3.0 {Test subcommand 'below' with id} {} { - .r find below 10 -} {9} - -test FindItems-3.1 {Test subcommand 'below' with tag} {} { - .r find below title -} {10} - -test FindItems-3.2 {Test subcommand 'below' with tag in group} {} { - .r find below title 12 -} {14} - -test FindItems-3.3 {Test subcommand 'below' with tag in group, non-recursive} {} { - .r find below title 2 f -} {} - -test FindItems-4.0 {Test subcommand 'atpriority'} {} { - .r find atpriority 2 -} {3 19 18 17 15 14 13 11 10 9} - -test FindItems-4.1 {Test subcommand 'atpriority' in group} {} { - .r find atpriority 2 2 -} {3 19 18 17 15 14 13 11 10 9} - -test FindItems-4.2 {Test subcommand 'atpriority' in group, non-recursive} {} { - .r find atpriority 2 2 f -} {3} - -test FindItems-5.0 {Test subcommand 'withtag'} {} { - .r find withtag poly -} {3 17 13 9} - -test FindItems-5.1 {Test subcommand 'withtag' in group} {} { - .r find withtag poly 2 -} {3 17 13 9} - -test FindItems-5.2 {Test subcommand 'withtag' in group, non-recursive} {} { - .r find withtag poly 2 f -} {3} - -test FindItems-6.0 {Test subcommand 'withtype'} {} { - .r find withtype rectangle -} {3 18 14 10} - -test FindItems-6.1 {Test subcommand 'withtype' in group} {} { - .r find withtype rectangle 2 -} {3 18 14 10} - -test FindItems-6.2 {Test subcommand 'withtype' in group, non-recursive} {} { - .r find withtype rectangle 2 f -} {3} - -test FindItems-7.0 {Test tag operator '&&'} {} { - .r find withtag {poly && rectangle} -} {3} - -test FindItems-7.1 {Test tag operator '||'} {} { - .r find withtag {poly || rectangle} -} {3 18 17 14 13 10 9} - -test FindItems-7.2 {Test tag operator '!'} {} { - .r find withtag {!rectangle&&!poly} -} {2 16 19 12 15 8 11} - -test FindItems-7.3 {Test tag operator '^'} {} { - .r find withtag {rectangle^poly} -} {18 17 14 13 10 9} - -test FindItems-7.4 {Test tag grouping operator '()'} {} { - .r find withtag {!(rectangle&&poly)} -} {2 16 19 18 17 12 15 14 13 8 11 10 9} - -test FindItems-7.5 {Test not using tag grouping operator '()'} {} { - .r find withtag {!rectangle&&poly} -} {17 13 9} - -catch {destroy .r} -#zinc .r -#pack .r -#update - -::tcltest::cleanupTests -return -- cgit v1.1