File Coverage

Glade/PerlGenerate.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package Glade::PerlGenerate;
2 1     1   2773 require 5.000; use strict 'vars', 'refs', 'subs';
  1         2  
  1         46  
3              
4             # Copyright (c) 1999 Dermot Musgrove
5             #
6             # This library is released under the same conditions as Perl, that
7             # is, either of the following:
8             #
9             # a) the GNU General Public License as published by the Free
10             # Software Foundation; either version 1, or (at your option) any
11             # later version.
12             #
13             # b) the Artistic License.
14             #
15             # If you use this library in a commercial enterprise, you are invited,
16             # but not required, to pay what you feel is a reasonable fee to perl.org
17             # to ensure that useful software is available now and in the future.
18             #
19             # (visit http://www.perl.org/ or email donors@perlmongers.org for details)
20              
21             BEGIN {
22 1     1   5 use Exporter qw( );
  1         2  
  1         19  
23 1     1   5 use File::Basename qw( basename dirname ); # in use_Glade_Project
  1         12  
  1         135  
24 1     1   3399 use Data::Dumper;
  1         17181  
  1         161  
25 1     1   707 use Glade::PerlProject; # Project vars and methods
  0            
  0            
26             use Glade::PerlSource qw( :VARS :METHODS ); # Source writing vars and methods
27             use Glade::PerlXML; # Source writing vars and methods
28             use Glade::PerlUI qw( :VARS ); # UI construction vars and methods
29             use vars qw(
30             @ISA
31             $PACKAGE $VERSION $AUTHOR $DATE
32             );
33             # Tell interpreter who we are inheriting from
34             # Glade::PerlSource
35             @ISA = qw(
36             Exporter
37             Glade::PerlSource
38             Glade::PerlProject
39             Glade::PerlXML
40             Glade::PerlUI
41             );
42             $PACKAGE = __PACKAGE__;
43             $VERSION = q(0.61);
44             $AUTHOR = q(Dermot Musgrove );
45             $DATE = q(Sun Nov 17 03:21:11 GMT 2002);
46             }
47              
48             sub DESTROY {
49             # This sub will be called on object destruction
50             } # End of sub DESTROY
51              
52             #===============================================================================
53             #==== Documentation ============================================================
54             #===============================================================================
55             =pod
56              
57             =head1 NAME
58              
59             Glade::PerlGenerate - Generate Perl source from a Glade XML project file.
60              
61             =head1 SYNOPSIS
62              
63             The simplest way to run Glade::PerlGenerate is to use the supplied script
64             'glade2perl' that is also called by Glade when you hit the 'Build' button.
65              
66             glade2perl Project.glade 2
67              
68             Otherwise you can control every aspect of the source generation by calling
69             the same methods that glade2perl calls:
70              
71             use Glade::PerlGenerate;
72              
73             Glade::PerlGenerate->Form_from_Glade_File(
74              
75             'author' => 'Dermot Musgrove ',
76             'description' => "This is an example of the Glade-Perl
77             source code generator",
78             'verbose' => 2,
79             'indent' => ' ',
80             'tabwidth' => 4,
81             'diag_wrap' => 0,
82             'write_source' => 'True',
83             'dont_show_UI' => 'True',
84             'autoflush' => 'True',
85             'use_modules' => 'Example::BusForm_mySUBS',
86             'log_file' => 'Test.log',
87             'glade_filename'=> "Example/BusForm.glade"
88              
89             );
90              
91             OR if you want to generate the UI directly from an XML string
92              
93             Glade::PerlGenerate->Form_from_XML(
94              
95             'xml' => $xml_string,
96             'use_modules' => ['Example::Project_mySUBS']
97              
98             );
99              
100             =head1 DESCRIPTION
101              
102             Glade::PerlGenerate reads a definition from a Glade
103             file (or a string) using XML::Parser, converts it into a hash of hashes
104             and works its way through this to show the UI using Gtk-Perl bindings.
105             The module can also optionally generate Perl source code to show the UI
106             and handle the signals. Any signal handlers that are specified in the
107             project file but not visible at Generate time will be hijacked to show
108             a 'missing_handler' message_box and a stub for it will be defined in the
109             the UI class for dynamic AUTOLOAD()ing.
110              
111             The stub will simply show a message_box to prove that the handler has been
112             called and you can write your own with the same name in another module. You
113             then quote this module to the next Generate run and Glade::PerlGenerate will
114             use these handlers and not define stubs.
115              
116             =cut
117              
118             #===============================================================================
119             #=========== Utilities to run Generate phase ============
120             #===============================================================================
121             sub about_Form {
122             my ($class) = @_;
123             my $gtkversion =
124             Gtk->major_version.".".Gtk->minor_version.".".Gtk->micro_version;
125             my $name = $0;
126             my $message =
127             "$PACKAGE (".
128             D_("version"). ": $VERSION - $DATE)\n".
129             D_("Written by"). ": $AUTHOR\n\n".
130             "Gtk ".D_("version").": $gtkversion\n".
131             "Gtk-Perl ".D_("version").": $Gtk::VERSION\n\n".
132             D_("run from file").": $name";
133             my $widget = $PACKAGE->message_box($message,
134             D_("About")." \u$PACKAGE",
135             [D_('Dismiss'), D_('Quit Program')], 1,
136             $Glade_Perl->run_options->logo, 'left' );
137             }
138              
139             sub destroy_Form {
140             # my ($class) = @_;
141             # $class->get_toplevel->destroy;
142             Gtk->main_quit;
143             }
144              
145             #===============================================================================
146             #=========== Utilities to construct the form from a Proto ====
147             #===============================================================================
148             sub options {
149             my ($class, %params) = @_;
150              
151             $params{'glade_filename'} ||= $Glade::PerlRun::NOFILE;
152             $params{'project_options'} ||= $Glade::PerlRun::NOFILE;
153             $params{'user_options'} ||= $Glade::PerlRun::NOFILE;
154              
155             $class->SUPER::options(%params);
156             }
157              
158             sub Form_from_Glade_File {
159             my ($class, %params) = @_;
160             my $me = "$class->Form_from_Glade_File";
161              
162             $Glade::PerlRun::convert = $Glade::PerlProject::convert;
163             if (ref $Glade_Perl) {
164             # We have already called options() at least once somehow
165             $Glade_Perl->merge_into_hash_from(
166             $Glade_Perl,
167             $class->convert_old_options(\%params),
168             $me);
169            
170             } else {
171             $class->SUPER::options(%params,
172             'options_I18N_name' => 'Glade-Perl',
173             'options_defaults' => \%Glade::PerlProject::app_fields,
174             'options_key' => $Glade::PerlProject::app_fields{type},
175             'options_global' => "\$Glade_Perl",
176             # 'options_report' => '$Glade_Perl->{source}{style}',
177             );
178             }
179             # Construct file names if Glade filename is not supplied
180             if ($Glade_Perl->glade->file eq $NOFILE) {
181             $Glade_Perl->glade->file($Glade_Perl->{$Glade_Perl->type}->mru) ;
182             $Glade_Perl->glade->name_from("MRU Glade file in user options file");
183              
184             } elsif ($Glade_Perl->glade->file) {
185             $Glade_Perl->glade->name_from("Specified as arg to $me");
186              
187             } else {
188             $Glade_Perl->glade->file(
189             $Glade_Perl->{$Glade_Perl->type}->proto->project->{glade}{file}
190             );
191             $Glade_Perl->glade->name_from("Specified in project options file");
192             }
193             #print Dumper($Glade_Perl);
194             $Glade_Perl->run_options->xml->project(
195             $Glade_Perl->run_options->xml->project ||
196             $Glade_Perl->glade->file."2perl.xml");
197             # $Glade_Perl->diag_print (2, "%s- Reading project options from '%s' - %s",
198             # $Glade_Perl->diag->indent, $Glade_Perl->{$Glade_Perl->type}->xml->project);
199              
200             $Glade_Perl->diag->log($Glade_Perl->glade->file."2perl.log")
201             if $Glade_Perl->diag->log eq '1';
202              
203             # Start diagnostics
204             $Glade_Perl->start_log;
205              
206             $Glade_Perl->Write_to_File;
207             $Glade_Perl->get_versions;
208              
209             $Glade_Perl->glade->proto($class->Glade_Proto_from_File);
210             my $window = $class->Form_from_Proto( $Glade_Perl, %params );
211              
212             $Glade_Perl->test->directory(
213             $Glade_Perl->test->directory ||
214             $class->full_Path(
215             $Glade_Perl->glade->proto->{'project'}{'directory'},
216             `pwd`)
217             );
218             $Glade_Perl->test->name(
219             $Glade_Perl->test->name ||
220             $Glade_Perl->glade->proto->{'project'}{'name'});
221              
222              
223             $Glade_Perl->save_app_options($Glade_Perl->glade->file);
224            
225             $Glade_Perl->stop_log;
226              
227             return $window;
228             }
229              
230             sub Glade_Proto_from_File {
231             my ($class) = @_;
232             my $me = "$class->Glade_Proto_from_File";
233              
234             # FIXME The line below is necessary until Damon sorts out Glade's XML.
235             # Glade doesn't write an encoding declaration at the top of the file :(
236             $Glade_Perl->glade->encoding($Glade_Perl->glade->encoding || 'ISO-8859-1');
237             my ($encoding, $glade_proto) = $class->Proto_from_File(
238             $Glade_Perl->glade->file,
239             ' accelerator signal widget ', ' project child ',
240             $Glade_Perl->glade->encoding);
241              
242             $class->merge_into_hash_from(
243             $Glade_Perl,
244             $Glade_Perl->use_Glade_Project($glade_proto ),
245             "Glade project ".$Glade_Perl->glade->file);
246              
247             $Glade_Perl->app->use_modules(
248             [split (/\n/, ($Glade_Perl->app->use_modules || '' ))])
249             unless ref $Glade_Perl->app->use_modules eq 'ARRAY';
250             $current_form && eval "$current_form = {};";
251              
252             return $glade_proto;
253             }
254              
255             sub Form_from_XML {
256             my ($class, %params) = @_;
257             my $me = "$class->Form_from_XML";
258              
259             my $save_options = $Glade_Perl;
260             $Glade_Perl = bless {}, $class;
261              
262             # Set options
263             $Glade::PerlRun::convert = $Glade::PerlProject::convert;
264             $class->SUPER::options(%params);
265              
266             $Glade_Perl->diag->verbose(0);
267             $Glade_Perl->source->write(undef);
268             my ($encoding, $glade_proto) = $class->Proto_from_XML(
269             $Glade_Perl->glade->string,
270             ' accelerator signal widget ' , ' project child ',
271             $Glade_Perl->glade->encoding);
272             my $form;
273              
274             $Glade_Perl->glade->proto($glade_proto);
275             $Glade_Perl->glade->file('XML String');
276             if (($Glade_Perl->glade->proto->{'project'}->{'gnome_support'} || 'True') eq 'True') {
277             $Glade_Perl->diag_print (6,
278             "%s- Use()ing Gnome in %s",
279             $indent, $me);
280             $Glade_Perl->app->allow_gnome(1);
281             Gnome->init('Form_from_XML', '0.01');
282             } else {
283             Gtk->init;
284             }
285             my $window = $class->Widget_from_Proto(
286             'No Parent', $Glade_Perl->glade->proto, 0, 'Form from string' );
287             $forms->{$first_form}{$first_form}->show( );
288             Gtk->main;
289             $Glade_Perl = $save_options;
290             return $window;
291             }
292              
293             sub Form_from_Proto {
294             my ($class, $proto, %params) = @_;
295             my $me = "$class->Form_from_Proto";
296              
297             my ($module);
298             my $depth = 0;
299             my $options = $proto;
300             $indent ||= ' ';
301             $forms = {};
302             $widgets = {};
303              
304             #print Dumper($Glade_Perl->glade2perl->xml);
305             $Glade_Perl->diag_print (2, "%s- Constructing form(s) from Glade file '%s' - %s",
306             $indent, $proto->glade->file, $proto->glade->name_from);
307             $Glade::PerlRun::pixmaps_directory = $Glade_Perl->glade->pixmaps_directory;
308             foreach $module (@{$proto->app->use_modules}) {
309             if ($module && $module ne '') {
310             #print "We are in directory '".`pwd`."'\n";
311             eval "use $module;" or
312             ($@ &&
313             die "\n\nin $me\n\t".("while trying to eval").
314             " 'use $module'".
315             "\n\t".("FAILED with Eval error")." '$@'\n" );
316             push @use_modules, $module;
317             $Glade_Perl->diag_print (2,
318             "%s- Use()ing existing module '%s' in %s",
319             $indent, $module, $me);
320             }
321             }
322             if ($options->app->allow_gnome) {
323             $Glade_Perl->diag_print (6, "%s- Use()ing Gnome in %s", $indent, $me);
324             eval "use Gnome;";
325             unless (Gnome::Stock->can('pixmap_widget')) {
326             $Glade_Perl->diag_print (1,
327             "%s- You need either to build the Gtk-Perl Gnome module or ".
328             "uncheck the Glade 'Enable Gnome Support' project option",
329             $options->indent);
330             $Glade_Perl->diag_print (1,
331             "%s- Continuing without Gnome for now although ".
332             "the generate run will fail if there are any Gnome widgets".
333             "specified in your project",
334             $options->indent);
335             $options->app->allow_gnome(0);
336             }
337             Gnome->init(__PACKAGE__, $VERSION);
338             } else {
339             Gtk->init;
340             }
341              
342             # Recursively generate the UI
343             my $app = "\$forms->{'test'}{'__HIERARCHY'}";
344             my $window = $class->Widget_from_Proto( $proto->glade->proto->{'name'},
345             $proto->glade->proto, $depth, $app );
346              
347             my $save_module = $proto->test->use_module;
348              
349             #print Dumper($Glade_Perl->glade2perl->xml);
350             # Now write the disk files
351             if ($Glade_Perl->Writing_to_File) {
352             # Load the source code gettext translations
353             unless ($options->source->LANG) {
354             $options->source->LANG($options->diag->LANG);
355             }
356             $class->load_translations('Glade-Perl', $options->source->LANG,
357             undef, undef, '__S', undef);
358             # $class->load_translations('Glade-Perl', $options->source->LANG, undef,
359             # '/home/dermot/Devel/Glade-Perl/ppo/en.mo', '__S', undef);
360             # $class->start_checking_gettext_strings("__S");
361             my $gen_type = " Style ".$options->source->style;
362             if ($options->source->quick_gen) {
363             $gen_type .= " with NO VALIDATION!";
364             }
365             $Glade_Perl->diag_print (2, "%s- Source code will be generated for ".
366             "locale <%s>%s",
367             $indent, $options->source->LANG, $gen_type);
368              
369             $proto->app->logo(basename ($proto->app->logo));
370             $module = $proto->module->directory unless $proto->module->directory eq '.';
371             $module =~ s/.*\/(.*)$/$1/;
372             $module .= "::" if $module;
373            
374             $proto->test->first_form($proto->test->first_form || $first_form);
375              
376             if ($options->source->style && $options->source->style eq "Libglade") {
377             # Write source that will use libglade to show the UI
378             $Glade_Perl->diag_print (2, "%s Generating libglade type code", $indent);
379             $class->write_LIBGLADE($proto, $forms);
380             $options->run_options->dont_show_UI(1);
381             $proto->test->use_module($save_module ||
382             $module.$proto->test->use_module.
383             $proto->module->libglade->class."LIBGLADE");
384             $proto->test->first_form($proto->test->first_form);
385             $Glade_Perl->diag_print (2,
386             "%s- One of the ways to run the generated source", $indent);
387             $Glade_Perl->diag_print (2,
388             "%s Change directory to '%s' and then enter:",
389             "$indent$indent", $proto->glade->directory);
390             $Glade_Perl->diag_print (2,"%s",
391             "$indent$indent perl -e 'use ".
392             $proto->test->use_module."; ".
393             $proto->test->first_form."->app_run'");
394              
395             } else {
396             $Glade_Perl->diag_print (4, "%s- Generating UI construction code", $indent);
397             $class->write_UI($proto, $forms);
398              
399             $Glade_Perl->diag_print (4, "%s- Generating signal handler code", $indent);
400             if ($options->source->style && $options->source->style =~ /split/i) {
401             $class->write_split_SIGS($proto, $forms);
402             $proto->test->use_module($save_module ||
403             $module.$proto->test->use_module.
404             $proto->module->app->class.
405             "_".$proto->test->first_form);
406             $Glade_Perl->diag_print (2,
407             "%s- Some of the ways to run the generated source", $indent);
408             $Glade_Perl->diag_print (2,
409             "%s Change directory to '%s' and then enter one of :",
410             "$indent$indent", $proto->glade->directory);
411             $Glade_Perl->diag_print (2,"%s",
412             "$indent$indent perl -e 'use ".
413             $proto->test->use_module."; ".
414             $proto->test->first_form."->app_run'");
415              
416             } else {
417             $class->write_SIGS($proto, $forms);
418             $proto->test->use_module($save_module ||
419             $module.$proto->test->use_module.
420             $proto->module->app->class);
421             $Glade_Perl->diag_print (2,
422             "%s- Some of the ways to run the generated source", $indent);
423             $Glade_Perl->diag_print (2,
424             "%s Change directory to '%s' and then enter one of :",
425             "$indent$indent", $proto->glade->directory);
426             $Glade_Perl->diag_print (2,"%s",
427             "$indent$indent perl -e 'use ".
428             $proto->test->use_module."; ".
429             $proto->test->first_form."->app_run'");
430             $Glade_Perl->diag_print (4, "%s- Generating OO subclass code", $indent);
431             $class->write_SUBCLASS($proto, $forms);
432             }
433             $Glade_Perl->diag_print (2, "%s",
434             "$indent$indent perl -e 'use ".
435             $module.$proto->module->subapp->class.
436             "; Sub".$Glade_Perl->test->first_form."->app_run'");
437             }
438             }
439              
440             $Glade_Perl->write_documentation;
441             $Glade_Perl->write_distribution;
442              
443             # Look through $proto and report any unused attributes (still defined)
444             if (!$Glade_Perl->source->quick_gen && $Glade_Perl->diagnostics(2)) {
445             $Glade_Perl->diag_print (2, "%s", "-----------------------------------------------------------------------------");
446             $Glade_Perl->diag_print (2, "%s CONSISTENCY CHECKS", $indent);
447             $Glade_Perl->diag_print (2, "%s- %s unused widget properties", $indent, $missing_widgets);
448             if ($ignored_widgets) {
449             $Glade_Perl->diag_print (2, "%s- %s widgets were ignored (one or more of '%s')",
450             $indent, $ignored_widgets, $ignore_widgets);
451             } else {
452             $Glade_Perl->diag_print (2, "%s- %s widgets were ignored",
453             $indent, $ignored_widgets);
454             }
455             $Glade_Perl->diag_print (2, "%s- %s unpacked widgets",
456             $indent, $class->unpacked_widgets);
457             if ($Glade_Perl->diagnostics(4)) {
458             $Glade_Perl->diag_print (4,
459             "$indent- ".$class->unhandled_signals." unhandled signals");
460             }
461             $Glade_Perl->diag_print (2, "%s", "-----------------------------------------------------------------------------");
462             unless ($Glade_Perl->Writing_Source_only) {
463             $Glade_Perl->diag_print (2, "%s UI MESSAGES - showing missing_handler calls that you triggered, ".
464             "don't worry, %s will generate dynamic stubs for them all",
465             $indent, $PACKAGE);
466             }
467             # $object->write_missing_gettext_strings('__S');
468             }
469             # $object->write_missing_gettext_strings('__D', "&STDOUT", "NO_HEADER");
470              
471             # And show UI if necessary
472             unless ($Glade_Perl->Writing_Source_only) {
473             $forms->{$first_form}{$first_form}->show;
474             Gtk->main;
475             }
476             return $proto;
477             }
478              
479             #===============================================================================
480             #=========== Diagnostic utilities ============
481             #===============================================================================
482             sub check_for_unused_elements {
483             my ($class, $proto) = @_;
484             my $me = "$class->check_for_unused_elements";
485             my $typekey = $class->typeKey;
486             my $key;
487             my ($object,$name );
488             foreach $key (sort keys %{$proto}) {
489             if (defined $proto->{$key}) {
490             unless (" class $typekey name " =~ m/ $key /) {
491             unless (ref $proto->{$key}) {
492             # We have found an unused widget property
493             unless ($proto->{$typekey} eq 'project') {
494             $object = $proto->{'class'} || '';
495             $name = $proto->{'name'} || '(no name)';
496             if (" $cxx_properties " =~ m/ $key /) {
497             $Glade_Perl->diag_print (4,
498             "warn Intentionally ignored property for %s %s {'%s'}{'%s'} => '%s' seen by %s",
499             $proto->{$typekey}, $object, $name, $key, $proto->{$key}, $me);
500             } elsif (!$Glade_Perl->source->quick_gen) {
501             $Glade_Perl->diag_print (1,
502             "error Unused widget property for %s %s {'%s'}{'%s'} => '%s' seen by %s",
503             $proto->{$typekey}, $object, $name, $key, $proto->{$key}, $me);
504             $missing_widgets++;
505             }
506             }
507             }
508             }
509             }
510             }
511             return $missing_widgets;
512             }
513              
514             sub unpacked_widgets {
515             my ($class) = @_;
516             my $me = "$class->unpacked_widgets";
517             my $count = 0;
518             my $key;
519             foreach $key (sort keys %{$widgets}) {
520             if (defined $widgets->{$key}) {
521             # We have found an unpacked widget
522             $count++;
523             $Glade_Perl->diag_print (1,
524             "error Unpacked widget '%s' has not been packed ".
525             "(nor correctly added to the UI file) from %s",
526             $key, $me);
527             }
528             }
529             return $count;
530             }
531              
532             sub unhandled_signals {
533             my ($class) = @_;
534             my $me = "$class->unhandled_signals";
535             my ($widget, $signal);
536             my $count = 0;
537             # FIXME This is all tosh - what do we need here?
538             # FIXME Should we produce stubs for these ? if so, do this in perl_sub etc
539              
540             foreach $widget (sort keys %{$need_handlers}) {
541             # if (keys (%{$need_handlers->{$widget})) {
542             foreach $signal (sort keys %{$need_handlers->{$widget}}) {
543             # We have found an unhandled signal (eg from accelerator)
544             $count++;
545             $Glade_Perl->diag_print (1, "error Widget '%s' emits a ".
546             "signal '%s' that ".
547             "does not have a handler specified - in %s",
548             $widget, $need_handlers->{$widget}{$signal}, $me);
549            
550             }
551             # } else {
552             # # Nothing to be done
553             # }
554             }
555             return $count;
556             }
557              
558             sub our_logo {
559             return '/* XPM */
560             static char *Logo[] = {
561             /* width height num_colors chars_per_pixel */
562             " 66 97 256 2",
563             /* colors */
564             ".. c #000008",
565             ".# c #008808",
566             ".a c #880400",
567             ".b c #004400",
568             ".c c #000088",
569             ".d c #808480",
570             ".e c #08c010",
571             ".f c #480000",
572             ".g c #082090",
573             ".h c #08e410",
574             ".i c #886898",
575             ".j c #c00410",
576             ".k c #002400",
577             ".l c #80cc98",
578             ".m c #000048",
579             ".n c #30e430",
580             ".o c #0044e0",
581             ".p c #0008c8",
582             ".q c #c81810",
583             ".r c #00f408",
584             ".s c #280000",
585             ".t c #e80408",
586             ".u c #c0c8c8",
587             ".v c #0024d8",
588             ".w c #d8e0e0",
589             ".x c #001400",
590             ".y c #0834d8",
591             ".z c #489448",
592             ".A c #982018",
593             ".B c #00a400",
594             ".C c #38c830",
595             ".D c #484440",
596             ".E c #e8e8e8",
597             ".F c #a00408",
598             ".G c #0014d0",
599             ".H c #001490",
600             ".I c #784c80",
601             ".J c #18f410",
602             ".K c #000028",
603             ".L c #0860f8",
604             ".M c #20e410",
605             ".N c #e01010",
606             ".O c #e8f8f0",
607             ".P c #a0a4a0",
608             ".Q c #08d408",
609             ".R c #c81010",
610             ".S c #102070",
611             ".T c #606460",
612             ".U c #1834d8",
613             ".V c #2840d0",
614             ".W c #20a410",
615             ".X c #2028f0",
616             ".Y c #2018f0",
617             ".Z c #202428",
618             ".0 c #0014e8",
619             ".1 c #200450",
620             ".2 c #288420",
621             ".3 c #001450",
622             ".4 c #0008b0",
623             ".5 c #100000",
624             ".6 c #a81410",
625             ".7 c #0824f0",
626             ".8 c #402c48",
627             ".9 c #0854f8",
628             "#. c #00fc00",
629             "## c #0834f8",
630             "#a c #881410",
631             "#b c #20d410",
632             "#c c #006400",
633             "#d c #f8fcf8",
634             "#e c #009408",
635             "#f c #000068",
636             "#g c #f80400",
637             "#h c #505450",
638             "#i c #28e428",
639             "#j c #c01428",
640             "#k c #680000",
641             "#l c #001828",
642             "#m c #38d430",
643             "#n c #0014b0",
644             "#o c #20f028",
645             "#p c #08ec28",
646             "#q c #a88cb0",
647             "#r c #0008e8",
648             "#s c #e81c20",
649             "#t c #c0a4c0",
650             "#u c #f00c08",
651             "#v c #20b420",
652             "#w c #1848d8",
653             "#x c #f0d0f0",
654             "#y c #003800",
655             "#z c #20d828",
656             "#A c #08ec08",
657             "#B c #30f820",
658             "#C c #f8ecf0",
659             "#D c #100028",
660             "#E c #d81010",
661             "#F c #a084b8",
662             "#G c #101410",
663             "#H c #083cf8",
664             "#I c #000800",
665             "#J c #0018d0",
666             "#K c #c02028",
667             "#L c #c8d4c8",
668             "#M c #b80808",
669             "#N c #082cf8",
670             "#O c #50dc58",
671             "#P c #900400",
672             "#Q c #000c88",
673             "#R c #d80808",
674             "#S c #001ce8",
675             "#T c #681810",
676             "#U c #20c410",
677             "#V c #00b800",
678             "#W c #203428",
679             "#X c #100ca8",
680             "#Y c #10fc10",
681             "#Z c #38dc38",
682             "#0 c #48e440",
683             "#1 c #108810",
684             "#2 c #909490",
685             "#3 c #281810",
686             "#4 c #c8fce0",
687             "#5 c #20ec28",
688             "#6 c #10f410",
689             "#7 c #100c08",
690             "#8 c #b81418",
691             "#9 c #0818b0",
692             "a. c #102418",
693             "a# c #40ac40",
694             "aa c #b0fcd8",
695             "ab c #706c88",
696             "ac c #4064f8",
697             "ad c #7884a0",
698             "ae c #204418",
699             "af c #b8c4c8",
700             "ag c #382450",
701             "ah c #782c30",
702             "ai c #2860f8",
703             "aj c #007400",
704             "ak c #90a0e8",
705             "al c #5884a0",
706             "am c #202cc0",
707             "an c #b02018",
708             "ao c #481818",
709             "ap c #209820",
710             "aq c #607468",
711             "ar c #585858",
712             "as c #b8bcb8",
713             "at c #205c38",
714             "au c #005400",
715             "av c #889cd0",
716             "aw c #286c38",
717             "ax c #b0b4b0",
718             "ay c #2854f8",
719             "az c #483c40",
720             "aA c #303840",
721             "aB c #48c450",
722             "aC c #807878",
723             "aD c #1030a0",
724             "aE c #381c40",
725             "aF c #603c68",
726             "aG c #584c60",
727             "aH c #30b440",
728             "aI c #b8dcd0",
729             "aJ c #706480",
730             "aK c #2870f8",
731             "aL c #787890",
732             "aM c #c0d4f0",
733             "aN c #18b428",
734             "aO c #203050",
735             "aP c #a8aca8",
736             "aQ c #989498",
737             "aR c #787878",
738             "aS c #300000",
739             "aT c #304838",
740             "aU c #389428",
741             "aV c #a0b4d0",
742             "aW c #b03020",
743             "aX c #a898a8",
744             "aY c #583868",
745             "aZ c #001070",
746             "a0 c #20c828",
747             "a1 c #281830",
748             "a2 c #104820",
749             "a3 c #103420",
750             "a4 c #107408",
751             "a5 c #c8bcd0",
752             "a6 c #c82428",
753             "a7 c #58bc58",
754             "a8 c #186cf8",
755             "a9 c #10c828",
756             "b. c #d0c8d8",
757             "b# c #18a410",
758             "ba c #686868",
759             "bb c #28a828",
760             "bc c #109810",
761             "bd c #780000",
762             "be c #30b428",
763             "bf c #701408",
764             "bg c #401838",
765             "bh c #a098b0",
766             "bi c #902c28",
767             "bj c #908890",
768             "bk c #1008c8",
769             "bl c #d81c10",
770             "bm c #181820",
771             "bn c #d0d4d0",
772             "bo c #10b810",
773             "bp c #383838",
774             "bq c #d8f8e0",
775             "br c #d8d4e0",
776             "bs c #38e440",
777             "bt c #1834f8",
778             "bu c #605870",
779             "bv c #981408",
780             "bw c #082030",
781             "bx c #200428",
782             "by c #30f838",
783             "bz c #500000",
784             "bA c #1854f8",
785             "bB c #d81020",
786             "bC c #c090c0",
787             "bD c #f81c18",
788             "bE c #484848",
789             "bF c #08dc10",
790             "bG c #282c28",
791             "bH c #405c48",
792             "bI c #2838a0",
793             "bJ c #887890",
794             "bK c #6878b0",
795             "bL c #0044f8",
796             "bM c #1044f8",
797             "bN c #187828",
798             "bO c #0824b8",
799             "bP c #1060f8",
800             "bQ c #2044f8",
801             "bR c #d01c28",
802             "bS c #102428",
803             "bT c #385848",
804             "bU c #300830",
805             "bV c #08c808",
806             "bW c #000c48",
807             "bX c #002cd8",
808             "bY c #d0e8d8",
809             "bZ c #083cd8",
810             "b0 c #001890",
811             "b1 c #18fc10",
812             "b2 c #18ec10",
813             "b3 c #a0a8a0",
814             "b4 c #081c48",
815             "b5 c #18dc10",
816             "b6 c #006c00",
817             "b7 c #000c70",
818             "b8 c #20fc28",
819             "b9 c #f0dcf0",
820             /* pixels */
821             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
822             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#C#d#C#d#d#d#d#d#d#C#d#d#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
823             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#d...P#d#d.ObWbW#l#I#I#d.O#d#d#d#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
824             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#dbE..#7bhadaOb4.K#I#I..aL.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
825             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#dbq#d.w.d..#I.......K...K.c.c#f.K...5aGax#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
826             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#d.w#I..........#I.K.Kb7.p#r.4.m....#D.5bj#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
827             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.P...............K.K#f.G#r#r.7ac.7.G#f.K.K..bE#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
828             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O.O.O#G....a........K.m#f#J.pbtay.v#N#N.p.c#f.K.K...d#d#C#d#d#d.E#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
829             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#LbG..........#I.K.m.4.p#SbM#H#####H.vbL.G##.y#f#f.K..#I.d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
830             "#d#d#d#d#d#d#d#d#d#d#d#d#d.E#d.E.O...x#I..#7...3#f.c.p#S#r#r#r.0.p.p.G#N#Na8.p#H#r.v#n.m.K.....K#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
831             "#d#d#d#d#d#d#d#d#d#d#d#d#d.O.O#2..#I.........K.m#X.4.X.X#r#r.G.4.4#f.4.4bt.Uai#r#Nbt#J#Q.m.K....aza5#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
832             "#d#d#d#d#d#d#d#C#d#d#dbq#d.u...5.......K.m.c#X.c.m.m#f#f.m.K.K.........K.K.K#f.4.vbZ###S#r.4.m.K....#I#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
833             "#d#d#d#d#d#d#d#d#d.O#d#d#2bp..........#f.c.p.c.m.....K.K.....................K.m.3#Q.4.7.X.X#f.m......aR#C#d#C#d.O#C#d#d#d#d#d#d#d#d",
834             "#d#d#d#d#d#d#d#d.O#db3.5......#I.m#f.4.p.p.c.K...............K.m.m...............K.K.K#Q#N####.G.c#f.K....bua5#C#d#d#d#d#d#d#d#d#d#d",
835             "#d#d#d#d#d#d#d#d.O#L#I....#I...m#Q.G#S.p.4.m.............K.m#Q#Qb7.K.K.K..............#f.7#####r#S.4#f.K.K#D..#d#d#C#d.O#d#d#d#d#d#d",
836             "#d#d#d#d#d#d#daq.......K.maZ.H#n.Xbt.Y#f.m...........m#f.p#r#r##.y#J.0.p#QbW...5.......K.H#n##a8.7##.G.4#f......#C#d#d.O#d#d#d#d#d#d",
837             "#d#d#d#d.O#d#L.........m.4.4#nbZbt#r.G.K#I.......K#f.4.4###N#HbAbL##bQ#H.vb7.K...5.....K.m#9#H##bL#H#N###J.mbW...Tbj#C#d#d#d#d#d#d#d",
838             "#C#d#d#daPaq...K.K.K.m.p#S#N#N##bt#f.m.........K.4#r.7##bL.9.LbLbL#HbL#HbM.p.4#f.K......#f#9.0bL.9###H#9ai.G.pb7......aC#C#C#d#d#d#d",
839             "#d.E#daP.....K#f#f#Q.G#N#HbL#N#H#N#f.m.........m#r.7#H.9.9.9#HbL#H#r.7#Sai#SbX#n#f#I#I...m#9.o.9bL.9.LbL.9bA#H.0#f.m#l..aL#d#d#d#d#d",
840             "#dbm#daP.....3#Q#Q.G#N#N#HbL#NbL.y#f.K.........m#S.7bL.9.obL#N#H#N.p.0.0.7aiay.p.4.K...K.cbObLbZbZ.9#H.9bLbLbL###J.4.K.K.K.P#C#d#d#d",
841             "#d.......5.5.m.V.v#H##bL#H#N###H#w.m.K.......K.m#J#N#HbLbL##bt#r.c.m.m#Q.4acbM#r#r.p.p.G#r#N##bLbX.9.0bLbL.v#H#H.7.0.4bI.K..aG#d#C#d",
842             ".O#I.s.5.saS..#f#nbt#H##bL#HbL.L.9#n#f.K.......m#S#N#HbL#H#H#N.p.m...K.K.c#J#S#H##.0ai.y###HbP###HbL#H#HbL.o.9aK.G.4b7b0.K..ba#d#d#d",
843             "#d......bda6bz.K#f.c#9#N#H#HbLbL#H#S.4.K.......K#S.7#H.9.9#N#N#f.K.........m.c.v#N#SbL#H.ybLa8.7bL##bLbLbLbP.9#H#X.m#I#y#y..#h#d#d#d",
844             "#C#I#I#Ibd.R#P.5.K#f#f.v###H.o#H###N.G.m.K.....K.p.0#N.9bL.9.0#f.K...........m#Q.p#N##bL.L.o#HbLbA#HbLbL##bL.vbZ.m.K#yaBa7..ar#d#C#d",
845             "#d.x..#I.a#E.t.Fbz.....m.vbt#HbM#HbL#H.4.m.......m#f#w#JbAbL.G.p.m...........K.m#f#rbM#HbLbLbL#HbLbL#N.UbQ.c#f#laub#b8b2.b#I.T#d#d#d",
846             "bq#l.....a#R#g#R.FaS...K#Q#n#r.0##bL##.4#Q.........Kb0#nai#H.7#r.4.K...........m.c#r.X.ybP##.9.7#N#H.G#n#Q.m.K#cby#6.r#6.k..#h#d#d.O",
847             ".O.x.....a.t#g.t.N#M.a.5...Kb7.4.7#NbA#N#N#f.......K.K.K#f.p.p.7bk.m.....K.....c.p###N#HbL#H.0#N.4#9#f.K#I#yb6#A#.#.#.#p.k..ar#d#d#d",
848             "#d.x....#P.t#g.t.t#g.t.a.5.....Kb7#N#S#H#H.4bW#I...........K.K.m.K..........b7#J#N#H#HbL#Nbt#n.c.K..#Iau.Bb1.r#.#6#.#.#p.k..bu#d#d#d",
849             ".O.x....#P.t#g#g.t#g#g#RaS.......K#X.p#H#H#J.K.K..#I.............K.....K.K.m#n#N#H##bLbX.v.U#f.K#I.x.x#U#6#.#..r#6#Y#.#A.k..bJ#C#d#d",
850             ".O.k.....a#R#g#g#g#g#g#u#8.a.s.5.....m#9#n.y.G.G#Q.m.....K.......K...Kb7.p.0#N.y.ybO#w#Q.K.K.x.xb6#m.J#.#.#..r#..r#.#..M.xaE#x#d#d#d",
851             "bq.k....#P.t#g#g#g#g#g.t.N.jaS.5.5...K#f.c#N##.X.p.c#f#f#f.K.....K.m#Q#9.0#S.7.0.4.g#Q.m..#I#y#c#V.J#.#..r#.#..r#.#.#.#p.xaY#C#C#d#d",
852             ".O.k#I..#P#R#g#u#g#g#g#g#g#g#jbd.saoaS.5...m.X.X#H##bA#H#rbk.c.c.4bXbL#H#N#S.4bW.K.K..#Iau.#.Mb2#Y#.#..r#.#.#.#..r#.#.#A.x.i#C#C#d#d",
853             ".Oa3#I#I.a.t#g#u#g#g#g#u#g#g#R#j.fahbz.s.s.K#9.0#H#HbLbL.0#r.Y.p.G##bLbL.v.p.m........#y#5#Y#.#.#.#.#.#Y#.#.#..r#Y#.#.#o..#C#C#d#C#d",
854             "bqa3....bd.N#g#g#g#g#g.t#g#g#g#gblbz#ka6#8aS.K.m#n.v#N#NbL#H#H#HbMbL.0.4#f.m#D..#I#ybc#i#6.r#.#.#6#.#.#A#Y.n#c#6#A.rb5#c..ab#C#C#d#d",
855             "bqa...#Ibd.t#g#u#g#g#R.R#g#g#g#g.N#P#P#M#j.aaS...m.c#JbA#H#H##.7b0#Q#Q.c.K.KbW#I#y#U#5.Jb2b1.r#..r.r#.#5aNb6#y.h.r#.#b#y.Kb.#d#d#d#d",
856             ".ObS#I#I.a.t#g#g#g.jbd.s#k.6#u#g#g#g.t.a#P.NbB.j.f.5.m.H#J#N.7.p#Q.K.K#D....#y.Bby#..r#..r#..r#.#.b8.B.k.x.x#y.J#.#.bo#y..#C#d#d#d#d",
857             "#dbS#I..#P.t.t#g#g.6.f...5.5#kbdbl.t.t#E.Fbz.R.N#E#P.5.K#f.4#9aD.K.5....#c.Bb8.r#.#.#.#.#.#.#.#.#A#Z.x..#I.b#Z#.#.#.bc.x.5#d#d#d#d#d",
858             "#d.x....#P.t#g#g.tbvaS.......5.sbvbB.t.t#E#kbd#8.N.jbz.s.K#faZal#l..#I.k.e#o.r#.#.#.#.#.#.#.#.#.#5au..#I#Iau#i#.#.#.bc.x.5#d#d#d#d#d",
859             ".O......#P.t#g#g.tbz.5...........5.f.a.t#g.NaSaS#P#R.N.6.5#D...k.x#ca9#o#6#..J.nbF#6#.#..r#.#.b8au.x.K...x#5#.#.#.#..#.x..#d#d#d#d#d",
860             "#d.......a.N#g#g#gaS.5...........s.5aS#M.t#u.abzbzbd#R.Nbf...xb#.B#5#6.r#6#5#e.2au.h#.#.#.#..hbs.k#I....aub1.r#.#.#.aj.x..#C#C#d#d#d",
861             "#d.......a.N#g#g#g.s............#I...5.5.fbda6.qaS.s#k#8#8.5.x#U.J#.#.#.#Ub6.x.x.b.r#.#.#..r#1.k....#I#c.B#..r#Y.r#Y#y...K#C#C#d#d#d",
862             "#d.......a.N#g#g#g#k.5.5.........x........aS.F.6#T.saS.abl...x#0.h#.#.#6.W.k#I.x.W#..r#..r#6.x.......x#zb8#.#..r#6b2.x...1#C#C#d#d#d",
863             ".O.x.5..bd#j#g#g#g.t.t#EaS.5.................5.5bdanbd#P#8.....b#5#.#..J#y#I#I.xa4#A#.#.#i.b....#I#I.k.r#Y#.#.#.#Abe#I..bC#d#d#d#d#d",
864             "#d.......abB#g#g#g#g#g#sbd.f.5..................bd.R.j#R.R.5#I.k.Q#.#.#6.x.x...xaubo.Q#A.W.x....#I.x#e#.#6#.#.#.#A.W#I..#x#d#d#d#d#d",
865             "#d.......fbd.t#g#g#g#g#g.N#j.s.5...5........#I#I#k.R.t#g#8.5..#yaj.r#.b2.x#I...xae.x.##m#I.....K.x.##Y#..r#.#.#.#A.W#I#I#d#d#d#d#d#d",
866             "bq#I.5...s.f#g#u#g#g#g#g.t#j.s........#I....#I..#k#R#g#gan..#I.x#e.r.rb2.x#I..#IbT#I.x#y#I.......##5#.#..r#.#.#..h.#.x..#d#d#d#d#d#d",
867             "bY...5.5#T.a#g#g#g#g#g#g#u#j.5..............#I..bd#E#g#gan.5#I.x.##A#..J.x.....xbT.x#I.x#I.....xbs.h#..r#.#.#.#.#oap#I#I#C#d#d#d#d#d",
868             "bq#I.....F#R#g#g#g#g#g#g.N#8.5........aSaS.s....#k#K.t#ubvaS.5.x#m#Y#.#6.x#I#I.xae......#I#I.xau#.#.#.#.#.#.#.#..naj#I..#d#d#d#d#d#d",
869             "#4.k....#P#R#g#g#g#g#g#g#R.6.5.5......bd.a.a.s..aSbd#R#g#a.5...xbo#Y#.#6.x#I#I#Ia...........#ybs#.#.#.#.#.#.#.#.#Z.b#I..#d#d#d#d#d#d",
870             "aaat.5.s#kbd#g#g#g#g#g#g.t.6.5.....5.s.R#u.N#M.F.F#M#g#gbf.....x#c#6#.#Y.x..#I.....5........#yaHby#..r#.#.#.#..Jaj.x....#d#d#d#d#d#d",
871             "aaa2.5.s#kbd#g#g#g#g#g#g#R.6.5.....5.s#R#g#g#g.t.t.t#g#gbf....#Iau#p#.#A.x.......5.......5...k#y#z#p#A#.#.#.#.b2.b.x...K#d#d#d#d#d#d",
872             "bq#y..#I#P#R#u.t#g#g#g#g#Rbv..#I....aS.t#g#g#g#g.t#g#g#g#a.5...xau#o#.b2#I...K......#I.........x.k.k#m.r.r#.#.b2.k#I#D#D#d#d#d#d#d#d",
873             ".Oa3#I.x#M.t#g#g.t#g#g#g.j#a.........f.t#g#g#g#g#g#g#g#g.a.5...k#e#.#..J.x........#I...5....#I#I.x.x.b#o.h#.#.#Y#y#I.Kbx#d#d#d#d#d#d",
874             "#4.k...5bB#g#g#g.t#g#g#g#R#a.......5#k#u#g#g#g#g#g#g#u#g.a.....b#i.r#.#A#I.......x#y.b#1.x.x#I......#I.bb6a9.h.h.k...5#q#d#d#d#d#d#d",
875             "bq.x.5...j#g#g#g#g#g#g#g.t.F.......sbd#u#g#g#g#g#g#g#g#g.a.5#Iaj#z#.#..r.x.....x.b#5#o#Y#V#e.x......#I..#7.k.##m.k.x#G.E#C#d#d#d#d#d",
876             "bY#I....#M#u#g#g#g#g#g#g.t#8.5.....s.a.t#g#g#g#g#g#g#g#g.a..#Ibb#o.r#.#A.x#I...xbb#..r#.#A#5#y.x..#I#I.5...k#y.n.k.xbS#d#d#d#d#d#d#d",
877             "bq.k..#Ibdbl.t#g#g#g#u.t#u#8.5.....sbd.t#g#g#g#g#g#g#g#g.a..#I#ObF#.#.#A.x.....k#m#.#.#.#.#.#p#5b6.k.....x#V.J.M.x.x.D.O#G#C#d#d#d#d",
878             "#4aw...x#kbl.t#g#g#g.t.t.t.F.5.....5.a.N#g#g#g#g#g#g.t#g.a.5#Ia0#o#.#.#6.x#I...b#z#.#.#.#.#.#..r#z.#.x.x.kb1.r.h.x#I..bT..#d.O#d#C#d",
879             "#4.l.x.5#P.j#g#g#g#g#g#g.N#M.5.....5bd.t#g#g#g#g#g#g#g#g.a.5#I#ib2#.#..M#I..#I#y#z#Y.r#Y#.#.#.#.#.b8.e.B#6#.#..M.x...x..aQ#d#d#d#d#d",
880             "#4bq#G..#k#K#g#g#g#g#g#g#u.j.s.....5bd#g#g#g#g#g#g#g#g#g.a..#I#Zb2#.#A.n.x#I...b#Z.r#Y#6#.#.#.#.#..r#Y.r#.#.#.#Z.x#I.x..#d#d#C#d#C#d",
881             "#d.E#7...saS.F#R#g#g.t#g#g.N.6#k.f.sbd.t#g#g#g#g#g#g#g#g.a..#I.n.M#.b8be.......ba0#.#.#6#.#.#.#.#.#.#.#.#.#A#o.k......#I.K#C#d#d#d#d",
882             "#C#da5aO....bz.F#R#g#g#g#g#g#E#MbdaSbd.t#g#g#g#g#g#g#g#gbd.5#Ibs.M#.b2aj....#Iaua9#.#.#..r#.#.#.#..r#Y#..r#iap#I..#7.x..#F#d#d#d#d#d",
883             "#d#C.Obq.....5aSaS.6#j#g#g#g#g#g.N.R#R#g#g#g#g#g#g#g#g#g#T.5#I#m#A#..h#y....#I#c#i#.#.#.#.#.#.#.#.#.#..nbc.k.x......aR.u#C#d#d#d#d#d",
884             "#d#d#d.Oadba.....5.s#k.N#g#g.t.t#g.t.t#g#g#g#g#g#g#g#g#g.f.5..#Zb2#.b5bc#I..#y#A#.#.#.#.#.#.#.#..h.r#v.k.x.x#I..aL.w#d#d#d#d#d#d#d#d",
885             "#C#d.O.O#d#C.Z#I...5aS.j.t.t#g.t#g#g#g#g#g#g#g#g#g#g#g#gaS..#I#Z#p#.#ZaB.k.kbc#Y#.#.#.#.#.#.#.#..hbs#y.k.x.......E#d.O#d#d#d#d#d#d#d",
886             "#d#C#d#d#d.O#da..x.....s#8bB.t#g#g#g#g#g#g#g#g#g#g#g.t.N.s..#I#i#p.r.##y#z#o#..r#.#.#.#.#.#.b2.n#1.k.x.....8#C#C#d#d#d#d#d#d#d#d#d#d",
887             "#d#d.O#d#d#d.O.OaI#I#I.5bz.F#g#g#g#g#g#g#g#g#g#g#g#g.t#R.5...x#5#A#.bFbV#Y#.#.#.#.#.#.#.#6#A.B#c.x#I....#D#x#C#C#dbq#d#d#d#d#d#d#d#d",
888             "#d#d#d#d#d#d#d#d.Obqbq......#kbR#g#g#g#g#g#g.t#g#g#g.t#8.5...x#zb8#.#.#.#.#..r#.#.#.#..J#map.x.x....azb.#C#d#d#d#d.O#d#d#d#d#d#d#d#d",
889             "#d#d#d#d#d#d#d#d#d.ObqaR..#IaS.f.N#g#g#g#g#g#g#g#g#g.t.6.5..#I#z#A#.#.#.#.#.#.#.#.#..r#z#1.x#I#I#I..b9#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
890             ".O#d#d#d#d#d#d#d#d#d#d#CaT...k#IaSbB.t#g#g#g#g#g#g#g#Ebv.5..#I#z#o.r.r.r#.#.#.#..r.M#v.x.x......#C#C#d#d#d#d.O.O#d#d#d#d#d#d#d#d#d#d",
891             "#d#d#d#d#d#d#d#d#d#d#d#d.wbE..#I..#k#M#g#g#g#g#g#g#g.t.A.5..#I#z#o.r#.#.#.#.#6#.#Yb6#y.x.....P#L#d#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
892             "#d#d#d#d#d.O#d#d#d#d.O#d#d#dbhbw...5.f#M.t#g#g#g#g#g.t.A.5..#I#5.r#..r#..r.r#B#c#y...x..araQ#d#d#d#d.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
893             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.d...5.5.f.N#g#g#g#g#R.6.5#I.x#Y#.#.#..r#6.e.k#I.......w#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
894             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d..#I...5#K#u#g#g#g#R.F.5.x.b.r.r#.#.#6a0b6.x..#G.ZbE#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
895             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#d#d.....sa6.jbD#RbB.a#I.xb6#.#..M#v.b.x.x..aG#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
896             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C.E.T.5.fbv#M#s#j.a...x.##.#Y#Z.k#I....bU.E#C.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
897             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#db9..#7.s.fbd.f...xaU#1au.k#I...i#t#d#d#C#C.O#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
898             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#dbG...5.5aS.s...xa2.x.x#I....#C#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
899             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O.w.x..........#Iag#D.Ka5#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
900             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.ObG...x....#Ibw.K#DaG#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
901             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#d#C#C......#lbwabas#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
902             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#d#C#CbqaT....b.#d#C#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
903             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#db9#C#dbqbY..aG#d#C#C#C#d.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
904             "#C#d.O#d#C#d#d#d#d#d#C#d#d#d#C#d#d#d#d#d#d#d#C#d#d#d#d#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#d#d#d#d#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d",
905             "#d.O#d#d#d#d#d#d.E#d#d#d.P#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#dbj.u#d",
906             "#d#d#d#daA.d......#d#dbm..aC#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.u#G........#I#h#d#d#d#d#d#d#d#d#d#d#d#d#h....#2#d",
907             "#d#d.u#G#d#C#dba#d#d#Cba#IaR#d.O#d#d#d#d#d#d#C#L#C#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#daR.T#G.ZaR......as.O#d#d#d#d#d#d#d#d#d#d.Eas..aR#d",
908             "#d#d#IaR#d#d#d#d#d#d#daR..aC#d#d#d#d#d#d#d.u...D#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d..ba#d#d.Z#IaR#d#d#d#d#d#d#d#d#d#d#d#d#d#Iba#d",
909             "#C#L...d#d#d#d#d#d#d#d.d..aR#d#d#C.d.u.O#dbp....#h.d#d#d#d#d#d#d.d.u#d#d#d#d#C#d#d#d#d..aC#d#daR..as#d#d#d.das#d#d#d#d#d.d#d#d..aR#d",
910             "#d.d..aR#d#d#dbm....#daC...d#d#daR.....u#d#d#d#dbG#I..#I#C.O.DaRaA#7.E#d#d#d#d#d#d#d#d..aR#d.D#W#d#d#dbpaR..#I.u..#I#h....#d#d...D#d",
911             "#d#2....#d#d#d#d.D..as.d..aR#d#d#dar..#I.u#d.D..#d#d....aC#I..#das.O#d#d....#I#7ax#d#d..aR#d#d#d#d#d..#d#dbG#d#d.d..aq#d#d#C#d....#d",
912             "#dax....#d#d#d#CaR#I#daR..aR#d.wbE........#d..#I#d#dba#I#d..#7as.u#d#d#d......aR#d#d#d...d#d#d#C#d#C..#das#d#d#d.d...d.E#d#d#d..#I#d",
913             "#d#d..#I...D#d#dbp#d#daR...d#2..#d#C#d....#d....#d#dbG#h#C....#h#d#d#d#d.E#d#d#d#d#d#d...d#d#d#d#C#d#I..az#d#d#d.d...d#d#d#C#d.x..#d",
914             "#d#d.P#7#I...DbEba#d#daR..aR.......daRbp..aR.....D.daz#d#daR......#7#d#d#d#d#d#d#d#d#d...P#d#C#d#d#d.d..#I..#3#daC..ba#d#d#d#C....#d",
915             "#d#d#d#das.Tax#d#C#d#das#d#C.O.u.d#C#d.Ebn.O#CaxaC.E#d.O#d#d.O.Taq.O#d#d#d#d#d#d#d#d#d#C#d#d#d#d#d#d#dasba#d#d#d#C#C.E#d#d#d#d#C#d#d",
916             "#d#d#d#d#d#d#d#d#d.O#d#d#d#d#d#C#C#d#d#d#C#d#d.O#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d.O#d#d#d#d#d#d#C#d.E#d#d#d#d#d#d#d#d#d#d#d#d",
917             "#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#C#d#d#d#d#d.E#d#d#d.O#d#d#d#d#d#d#d#d#d#d#d.O#d#d#d#d#d#d#d#d#d.E#d#C#d#d#d#d#d#C#d.E#d"
918             '}
919              
920             1;
921              
922             __END__