File Coverage

blib/lib/RPerl/Generator.pm
Criterion Covered Total %
statement 1471 5757 25.5
branch 63 122 51.6
condition 28 63 44.4
subroutine 357 359 99.4
pod n/a
total 1919 6301 30.4


line stmt bran cond sub pod time code
1             ## no critic qw(ProhibitExcessMainComplexity) # SYSTEM SPECIAL 4: allow complex code outside subroutines, must be on line 1
2             # [[[ HEADER ]]]
3             package RPerl::Generator;
4 3     3   17 use strict;
  3         6  
  3         73  
5 3     3   12 use warnings;
  3         5  
  3         59  
6 3     3   13 use RPerl::AfterSubclass;
  3         5  
  3         354  
7             our $VERSION = 0.005_000;
8              
9             # [[[ OO INHERITANCE ]]]
10 3     3   18 use parent qw(RPerl::CompileUnit::Module::Class);
  3         6  
  3         15  
11 3     3   157 use RPerl::CompileUnit::Module::Class;
  3         8  
  3         55  
12              
13             # [[[ CRITICS ]]]
14             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
15             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
16             ## no critic qw(ProhibitStringyEval) # SYSTEM DEFAULT 1: allow eval()
17              
18             # [[[ INCLUDES ]]]
19 3     3   12 use RPerl::Grammar;
  3         7  
  3         69  
20 3     3   1441 use RPerl::Compiler; # for post_processor_cpp_*()
  3         7  
  3         117  
21 3     3   1025 use rperltypesconv;
  3         9  
  3         103  
22 3     3   19 use IPC::Cmd qw(can_run); # to check for `astyle`
  3         8  
  3         190  
23 3     3   16 use File::Temp qw(tempfile);
  3         8  
  3         119  
24 3     3   14 use File::Basename;
  3         6  
  3         149  
25 3     3   16 use Alien::astyle;
  3         5  
  3         30  
26 3     3   9958 use Env qw(@PATH);
  3         7  
  3         22  
27             unshift @PATH, Alien::astyle->bin_dir();
28              
29             #use RPerl::Parser;
30             #require RPerl::Parser;
31             #eval 'require RPerl::Parser;';
32             eval { require RPerl::Parser; };
33             if ( $EVAL_ERROR and ( $EVAL_ERROR =~ /attempt to reload/i ) ) {
34             delete $INC{'RPerl::Parser'};
35             require RPerl::Parser;
36             }
37             elsif ( $EVAL_ERROR ne q{} ) { die $EVAL_ERROR; }
38              
39 3     3   801 use English qw(-no_match_vars); # for $OSNAME; NEED ANSWER: why isn't this included from 'require RPerl::Config', which is included from 'use RPerl' above?
  3         7  
  3         27  
40              
41             # [[[ CONSTANTS ]]]
42             # NEED UPGRADE, CORRELATION #rp035: allow multi-line subroutines & other code blocks, where they would be less than 160 chars if on a single line
43 3     3   1042 use constant PERLTIDY_LINE_WIDTH => my number $TYPED_PERLTIDY_LINE_WIDTH = 160;
  3         6  
  3         7574  
44              
45             # [[[ OO PROPERTIES ]]]
46             our hashref $properties = {};
47              
48             # [[[ PROCEDURAL SUBROUTINES ]]]
49              
50             # convert array max index to array size (difference of 1)
51             sub arrayref_convert_index_max_to_size {
52 0     0   0 { my object $RETURN_TYPE };
  0         0  
53 0         0 ( my object $subexpression ) = @ARG;
54              
55             # RPerl::diag( 'in Generator->arrayref_convert_index_max_to_size(), received $subexpression = ' . "\n" . RPerl::Parser::rperl_ast__dump($subexpression) . "\n" );
56              
57 0         0 my object $subexpression_original = $subexpression;
58 0         0 my boolean $is_modified = 0;
59 0         0 my integer $nested_parenthesis = 0;
60            
61             # look inside nested parenthesis-as-subexpressions, always length 1 so no need to check length
62 0         0 while ((ref $subexpression) eq 'SubExpression_157') { # RPerl::Operation::Expression::SubExpression::Parenthesis
63 0         0 $subexpression = $subexpression->{children}->[1];
64 0         0 $nested_parenthesis++;
65             }
66            
67             # RPerl::diag( 'in Generator->arrayref_convert_index_max_to_size(), have post-nested-parens $subexpression = ' . "\n" . RPerl::Parser::rperl_ast__dump($subexpression) . "\n" );
68              
69 0 0       0 if ( $subexpression->{children}->[0]->isa('RPerl::Operation::Expression::Operator') ) {
70 0 0       0 if ( $subexpression->{children}->[0]->{children}->[0]->isa('RPerl::Operation::Expression::Operator::Arithmetic::AddSubtract') ) {
71 0 0 0     0 if ( ( exists $subexpression->{children}->[0]->{children}->[0]->{children}->[1] )
72             and ( $subexpression->{children}->[0]->{children}->[0]->{children}->[1] =~ /^-\s*$/xms ) )
73             {
74 0 0       0 if ( $subexpression->{children}->[0]->{children}->[0]->{children}->[2]->isa('RPerl::Operation::Expression::SubExpression::Literal') ) {
75 0 0       0 if ( $subexpression->{children}->[0]->{children}->[0]->{children}->[2]->{children}->[0]
76             ->isa('RPerl::Operation::Expression::SubExpression::Literal::Number') )
77             {
78 0 0       0 if ( $subexpression->{children}->[0]->{children}->[0]->{children}->[2]->{children}->[0]->{children}->[0] eq q{1} ) {
79             # '$foo - 1' becomes '$foo'
80             # RPerl::diag( 'in Generator->arrayref_convert_index_max_to_size(), setting ($foo - 1) to ($foo)' . "\n");
81 0         0 $subexpression = $subexpression->{children}->[0]->{children}->[0]->{children}->[0];
82 0         0 $is_modified = 1;
83 0         0 $nested_parenthesis = 0; # discard parens if present
84             }
85             else {
86             # '$foo - 10' becomes '$foo - 9'
87             my number $tmp_number
88 0         0 = string_to_number( $subexpression->{children}->[0]->{children}->[0]->{children}->[2]->{children}->[0]->{children}->[0] );
89             # RPerl::diag( 'in Generator->arrayref_convert_index_max_to_size(), setting ($foo - ' . $tmp_number . ') to ($foo - ' . ($tmp_number - 1) .')' . "\n");
90 0         0 $tmp_number--;
91 0         0 $subexpression->{children}->[0]->{children}->[0]->{children}->[2]->{children}->[0]->{children}->[0]
92             = number_to_string($tmp_number);
93 0         0 $is_modified = 1;
94 0 0       0 if ($nested_parenthesis) { $nested_parenthesis = 1; } # keep 1 set of parens if 1 or more is present
  0         0  
95             }
96             }
97             }
98             }
99             }
100             }
101             # else { RPerl::diag( 'in Generator->arrayref_convert_index_max_to_size(), have non-Operator $subexpression, not modifying' . "\n"); }
102              
103 0 0       0 if ($is_modified) {
104 0 0       0 if ($nested_parenthesis) {
105             # create new-but-equivalent object to alert caller of modification
106 0         0 my object $subexpression_modified = RPerl::CompileUnit::Module::Class::new('SubExpression_157');
107 0         0 $subexpression_modified->{children}->[0] = '(';
108 0         0 $subexpression_modified->{children}->[1] = $subexpression;
109 0         0 $subexpression_modified->{children}->[2] = ')';
110 0         0 $subexpression = $subexpression_modified;
111             }
112             else {
113             # create new-but-equivalent object to alert caller of modification
114 0         0 my object $subexpression_modified = RPerl::CompileUnit::Module::Class::new(ref $subexpression);
115 0         0 $subexpression_modified->{children} = $subexpression->{children};
116 0         0 $subexpression = $subexpression_modified;
117             }
118             }
119 0         0 return $subexpression;
120             }
121              
122             # convert RPerl types to C++ types
123             sub type_convert_perl_to_cpp {
124 187     187   295 { my string $RETURN_TYPE };
  187         309  
125 187         374 ( my string $return_type, my boolean $pointerify_classes ) = @ARG;
126              
127             # RPerl::diag('in Generator->type_convert_perl_to_cpp(), received $return_type = ' . $return_type . "\n");
128             # RPerl::diag('in Generator->type_convert_perl_to_cpp(), received $pointerify_classes = ' . $pointerify_classes . "\n");
129              
130 187 100       638 if ( exists $rperlnamespaces_generated::RPERL->{ $return_type . '::' } ) { # RPerl types
131 129         231 $return_type =~ s/^constant_/const\ /gxms; # 'constant_foo' becomes 'const foo'
132 129         177 $return_type =~ s/^gsl_matrix/gsl_matrix_rawptr/gxms; # 'gsl_matrix' becomes 'gsl_matrix_rawptr' # NEED ANSWER: is this always correct?
133             }
134             else { # user-defined types AKA classes
135 58         248 $return_type =~ s/:/_/gxms; # 'Foo::Bar::Baz' becomes 'Foo__Bar__Baz'
136 58 100       133 if ($pointerify_classes) {
137 33 50 100     185 if ( $return_type =~ /_raw$/ ) {
    100          
138 0         0 $return_type =~ s/_raw$/_rawptr/xms; # 'Foo__Bar__Baz_raw' becomes 'Foo__Bar__Baz_rawptr'
139             }
140             elsif ( ( $return_type !~ /_arrayref$/ ) and ( $return_type !~ /_hashref$/ ) ) {
141              
142             # don't pointerify arrayrefs or hashrefs, they are already pointerified
143 6         12 $return_type .= '_ptr'; # 'Foo__Bar__Baz' becomes 'Foo__Bar__Baz_ptr'
144             }
145             }
146             }
147 187         490 return $return_type; # much meta
148             }
149              
150             # search for dummy source code
151             sub dummy_source_code_find {
152 0     0   0 { my boolean $RETURN_TYPE };
  0         0  
153 0         0 ( my string_hashref $source_group ) = @ARG;
154 0         0 foreach my string $suffix_key ( sort keys %{$source_group} ) {
  0         0  
155 0 0       0 if ( $source_group->{$suffix_key} =~ /__DUMMY_SOURCE_CODE/xms ) {
156 0         0 return 1;
157             }
158             }
159 0         0 return 0;
160             }
161              
162             # line-by-line comparison of file contents vs string contents;
163             # returns -1 __DUMMY_SOURCE_CODE found, 0 no difference, >0 line number of first difference
164             sub diff_check_file_vs_string {
165 638     638   2123 { my hashref $RETURN_TYPE };
  638         2166  
166 638         3336 ( my string $file_name_reference, my string_hashref $source_group, my string $suffix_key, my string_hashref $file_name_group, my string_hashref $modes ) = @ARG;
167             # RPerl::diag('in Generator->diff_check_file_vs_string(), TOP OF SUBROUTINE ' . "\n");
168             # RPerl::diag('in Generator->diff_check_file_vs_string(), received $file_name_reference = ' . $file_name_reference . "\n");
169             # RPerl::diag('in Generator->diff_check_file_vs_string(), contents of file = ' . "\n");
170             # system 'cat', $file_name_reference;
171             # RPerl::diag('in Generator->diff_check_file_vs_string(), received $source_group = ' . "\n" . Dumper($source_group) . "\n\n");
172             # RPerl::diag('in Generator->diff_check_file_vs_string(), received $suffix_key = ' . $suffix_key . "\n");
173             # RPerl::diag('in Generator->diff_check_file_vs_string(), received $file_name_group = ' . "\n" . Dumper($file_name_group) . "\n\n");
174             # RPerl::diag('in Generator->diff_check_file_vs_string(), received $modes = ' . "\n" . Dumper($modes) . "\n\n");
175              
176 638         2806 my string $string_generated = $source_group->{$suffix_key};
177             # RPerl::diag('in Generator->diff_check_file_vs_string(), have $string_generated = $source_group->{$suffix_key} = ' . "\n" . $string_generated . "\n\n");
178              
179 638 50 33     30610 if (( not -e $file_name_reference ) or ( not -f $file_name_reference ) or ( not -T $file_name_reference )) {
      33        
180 0         0 die 'ERROR ECOGEDI00, RPERL GENERATOR, DIFF CHECK: Missing or invalid file, ' . q{'} . $file_name_reference . q{'} . "\n" . ', dying' . "\n";
181             }
182              
183 638 50       38080 open my filehandleref $FILE_HANDLE_REFERENCE, '<', $file_name_reference
184             or die 'ERROR ECOGEDI01, RPERL GENERATOR, DIFF CHECK: Cannot open file ' . q{'} . $file_name_reference . q{'} . ' for reading,' . $OS_ERROR . ', dying' . "\n";
185              
186             # read in file, strip blank lines
187 638         2627 my string $file_line;
188 638         2942 my string $string_reference = q{};
189 638         8787 while ( $file_line = <$FILE_HANDLE_REFERENCE> ) {
190 14678         28557 $file_line =~ s/^\s+//xms; # strip leading whitespace
191              
192             # discard blank & all-whitespace lines
193 14678 100       31561 if ( $file_line =~ /^\s*$/xms ) {
194 3144         8234 next;
195             }
196              
197             # strip trailing whitespace, if present
198 11534         23010 $file_line =~ s/[ \t]+$//;
199 11534         26071 $string_reference .= $file_line;
200             }
201              
202 638 50       5399 close $FILE_HANDLE_REFERENCE
203             or die 'ERROR ECOGEDI02, RPERL GENERATOR, DIFF CHECK: Cannot close file ' . q{'} . $file_name_reference . q{'} . ' after reading, ' . $OS_ERROR . ', dying' . "\n";
204              
205             # remove extra blank lines inserted by RPerl generators
206 638         4998 $string_generated =~ s/\n\n/\n/gxms;
207              
208             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $string_reference = ' . "\n" . ( q{=} x 60 ) . "\n" . $string_reference . "\n" . ( q{=} x 60 ) . "\n\n" );
209             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $string_generated = ' . "\n" . ( q{=} x 60 ) . "\n" . $string_generated . "\n" . ( q{=} x 60 ) . "\n\n" );
210            
211             # [ TIDY/FORMAT ALL CODE ]
212 638         2181 my string $string_reference_tidied = q{};
213 638         2675 my string $string_generated_tidied = q{};
214 638 100 66     8153 if (( $suffix_key eq 'PMC' ) or (($modes->{ops} eq 'PERL') and ($suffix_key eq 'EXE'))) {
    50 100        
      33        
      0        
      33        
215              
216             # TIDY REFERENCE PERL SOURCE CODE
217 622         2074 my string $perltidy_stderr_string = undef;
218 622         8091 my scalartype $perltidy_errored = Perl::Tidy::perltidy(
219              
220             # same as Compiler::save_source_files() except '-se' to redirect STDERR
221             # argv => q{-pbp --ignore-side-comment-lengths --converge -l=160 -b -nst -bext='/' -q -se},
222             argv => q{-pbp --ignore-side-comment-lengths --converge -l=} . PERLTIDY_LINE_WIDTH() . q{ -b -nst -bext='/' -q -se},
223             source => \$string_reference,
224             destination => \$string_reference_tidied,
225             stderr => \$perltidy_stderr_string,
226             );
227 622 50       61427059 if ($perltidy_errored) { # serious error in input parameters, no tidied output
    50          
228 0         0 die 'ERROR ECOGEDI03: Perl::Tidy major failure in file ' . q{'} . $file_name_reference . q{'} . ' with the following STDERR output, dying' . "\n" . $perltidy_stderr_string . "\n";
229             }
230             elsif ($perltidy_stderr_string) {
231 0         0 die 'ERROR ECOGEDI04: Perl::Tidy minor failure in file ' . q{'} . $file_name_reference . q{'} . ' with the following STDERR output, dying' . "\n" . $perltidy_stderr_string . "\n";
232             }
233              
234             # TIDY GENERATED PERL SOURCE CODE
235 622         5156 $perltidy_errored = Perl::Tidy::perltidy(
236             # argv => q{-pbp --ignore-side-comment-lengths --converge -l=160 -b -nst -bext='/' -q -se},
237             argv => q{-pbp --ignore-side-comment-lengths --converge -l=} . PERLTIDY_LINE_WIDTH() . q{ -b -nst -bext='/' -q -se},
238             source => \$string_generated,
239             destination => \$string_generated_tidied,
240             stderr => \$perltidy_stderr_string,
241             );
242 622 50       52926543 if ($perltidy_errored) {
    50          
243 0         0 die 'ERROR ECOGEDI05: Perl::Tidy major failure in generated source code string with the following STDERR output, dying' . "\n" . $perltidy_stderr_string . "\n";
244             }
245             elsif ($perltidy_stderr_string) {
246 0         0 die 'ERROR ECOGEDI06: Perl::Tidy minor failure in generated source code string with the following STDERR output, dying' . "\n" . $perltidy_stderr_string . "\n";
247             }
248              
249             # POST-PROCESS PERL SOURCE CODE
250 622         31191 $string_reference_tidied = RPerl::Compiler::post_processor_perl__comments_whitespace_delete($string_reference_tidied);
251 622         18885 $string_generated_tidied = RPerl::Compiler::post_processor_perl__comments_whitespace_delete($string_generated_tidied);
252             }
253             elsif (($suffix_key eq 'H') or ($suffix_key eq 'CPP') or (($modes->{ops} eq 'CPP') and ($suffix_key eq 'EXE'))) {
254             # FORMAT REFERENCE C++ SOURCE CODE
255 16         43 my filehandleref $FILE_HANDLE_REFERENCE_TMP;
256 16         630 (my string $file_name_reference_tmp, my string $file_name_reference_tmp_dirs, my string $file_name_reference_tmp_suffix) = fileparse($file_name_reference);
257             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_reference_tmp = ' . q{'} . $file_name_reference_tmp . q{'} . "\n" );
258             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_reference_tmp_dirs = ' . q{'} . $file_name_reference_tmp_dirs . q{'} . "\n" );
259             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_reference_tmp_suffix = ' . q{'} . $file_name_reference_tmp_suffix . q{'} . "\n" );
260            
261 16         199 ( $FILE_HANDLE_REFERENCE_TMP, $file_name_reference_tmp ) = tempfile( $file_name_reference_tmp . '.reference.tempfileXXXX', UNLINK => 1, TMPDIR => 1 );
262             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have modified $file_name_reference_tmp = ' . q{'} . $file_name_reference_tmp . q{'} . "\n" );
263            
264 16 50       8348 print {$FILE_HANDLE_REFERENCE_TMP} $string_reference or croak("\nERROR ECOGEFI00, GENERATOR, FILE SYSTEM: Attempting to save new file '$file_name_reference_tmp', cannot write to file,\ncroaking: $OS_ERROR");
  16         140  
265 16 50       706 close $FILE_HANDLE_REFERENCE_TMP or croak("\nERROR ECOGEFI01, GENERATOR, FILE SYSTEM: Attempting to save new file '$file_name_reference_tmp', cannot close file,\ncroaking: $OS_ERROR");
266              
267 16         173 my string $astyle_path = can_run('astyle');
268 16 50       78038 if ( defined $astyle_path ) {
269             # don't insert extra newlines, which causes accessors, mutators, and ops_types reporting subroutines to be broken into multiple lines
270 16         63 my string $astyle_command = join q{ }, ($astyle_path, '-q', '--keep-one-line-blocks', '--keep-one-line-statements', $file_name_reference_tmp);
271             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), about to call system, have $astyle_command = ' . "\n" . $astyle_command . "\n" );
272 16         140682 system $astyle_command;
273             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), returned from call to system' . "\n" );
274              
275 16 50 33     1158 if (( -e $file_name_reference_tmp . '.orig' ) and ( -f $file_name_reference_tmp . '.orig' )) {
276 16 50       1322 unlink( $file_name_reference_tmp . '.orig' ) or croak( "\n" . 'ERROR ECOGEFI02, GENERATOR, FILE SYSTEM: Cannot delete Artistic Style original file ' . q{'} . $file_name_reference_tmp . '.orig' . q{'} . ',' . "\n" . 'croaking:' . $OS_ERROR);
277             }
278             # DEV NOTE: astyle does not create a .orig file if there are no formatting changes made, so it is not actually a warning
279             # else { RPerl::warning( 'WARNING WCOGEFI01, COMPILER, C++ CODE FORMATTING: Artistic Style command `astyle` did not create the file' . q{'} . $file_name_reference_tmp . '.orig' . q{'} . ', did something go wrong?' . "\n" ); }
280             }
281             else {
282 0         0 RPerl::warning( 'WARNING WCOGEFI00, COMPILER, C++ CODE FORMATTING: Artistic Style command `astyle` not found, abandoning formatting' . "\n" );
283             }
284              
285 16 50 33     1899 if (( not -e $file_name_reference_tmp ) or ( not -f $file_name_reference_tmp ) or ( not -T $file_name_reference_tmp )) {
      33        
286 0         0 die 'ERROR ECOGEDI07, RPERL GENERATOR, DIFF CHECK: Missing or invalid temporary AStyle-tidied file, ' . q{'} . $file_name_reference_tmp . q{'} . "\n" . ', dying' . "\n";
287             }
288            
289 16 50       487 open $FILE_HANDLE_REFERENCE_TMP, '<', $file_name_reference_tmp
290             or die 'ERROR ECOGEDI08, RPERL GENERATOR, DIFF CHECK: Cannot open temporary AStyle-tidied file ' . q{'} . $file_name_reference_tmp . q{'} . ' for reading,' . $OS_ERROR . ', dying' . "\n";
291            
292             # read in tidied file
293 16         83 my string $file_line_reference_tmp;
294 16         289 while ( $file_line_reference_tmp = <$FILE_HANDLE_REFERENCE_TMP> ) {
295 346         975 $string_reference_tidied .= $file_line_reference_tmp . "\n";
296             }
297              
298 16 50       161 close $FILE_HANDLE_REFERENCE_TMP
299             or die 'ERROR ECOGEDI09, RPERL GENERATOR, DIFF CHECK: Cannot close temporary AStyle-tidied file ' . q{'} . $file_name_reference_tmp . q{'} . ' after reading, ' . $OS_ERROR . ', dying' . "\n";
300              
301             # FORMAT GENERATED C++ SOURCE CODE
302 16         53 my filehandleref $FILE_HANDLE_GENERATED_TMP;
303 16         1232 (my string $file_name_generated_tmp, my string $file_name_generated_tmp_dirs, my string $file_name_generated_tmp_suffix) = fileparse($file_name_reference);
304             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_generated_tmp = ' . q{'} . $file_name_generated_tmp . q{'} . "\n" );
305             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_generated_tmp_dirs = ' . q{'} . $file_name_generated_tmp_dirs . q{'} . "\n" );
306             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $file_name_generated_tmp_suffix = ' . q{'} . $file_name_generated_tmp_suffix . q{'} . "\n" );
307              
308 16         320 ( $FILE_HANDLE_GENERATED_TMP, $file_name_generated_tmp ) = tempfile( $file_name_generated_tmp . '.generated.tempfileXXXX', UNLINK => 1, TMPDIR => 1 );
309             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have modified $file_name_generated_tmp = ' . q{'} . $file_name_generated_tmp . q{'} . "\n" );
310             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), about to save content $string_generated = $source_group->{' . $suffix_key . '} = ' . "\n" . $string_generated . "\n\n");
311              
312 16 50       9863 print {$FILE_HANDLE_GENERATED_TMP} $string_generated or croak("\nERROR ECOGEFI00, GENERATOR, FILE SYSTEM: Attempting to save new file '$file_name_generated_tmp', cannot write to file,\ncroaking: $OS_ERROR");
  16         255  
313 16 50       463 close $FILE_HANDLE_GENERATED_TMP or croak("\nERROR ECOGEFI01, GENERATOR, FILE SYSTEM: Attempting to save new file '$file_name_generated_tmp', cannot close file,\ncroaking: $OS_ERROR");
314              
315             # my string $astyle_path = can_run('astyle');
316 16 50       134 if ( defined $astyle_path ) {
317             # don't insert extra newlines, which causes accessors, mutators, and ops_types reporting subroutines to be broken into multiple lines
318 16         153 my string $astyle_command = join q{ }, ($astyle_path, '-q', '--keep-one-line-blocks', '--keep-one-line-statements', $file_name_generated_tmp);
319             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), about to call system, have $astyle_command = ' . "\n" . $astyle_command . "\n" );
320 16         135127 system $astyle_command;
321             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), returned from call to system' . "\n" );
322              
323 16 50 33     1175 if (( -e $file_name_generated_tmp . '.orig' ) and ( -f $file_name_generated_tmp . '.orig' )) {
324 16 50       1114 unlink( $file_name_generated_tmp . '.orig' ) or croak( "\n" . 'ERROR ECOGEFI02, GENERATOR, FILE SYSTEM: Cannot delete Artistic Style original file ' . q{'} . $file_name_generated_tmp . '.orig' . q{'} . ',' . "\n" . 'croaking:' . $OS_ERROR);
325             }
326             # DEV NOTE: astyle does not create a .orig file if there are no formatting changes made, so it is not actually a warning
327             # else { RPerl::warning( 'WARNING WCOGEFI01, COMPILER, C++ CODE FORMATTING: Artistic Style command `astyle` did not create the file' . q{'} . $file_name_generated_tmp . '.orig' . q{'} . ', did something go wrong?' . "\n" ); }
328             }
329             else {
330 0         0 RPerl::warning( 'WARNING WCOGEFI00, COMPILER, C++ CODE FORMATTING: Artistic Style command `astyle` not found, abandoning formatting' . "\n" );
331             }
332              
333 16 50 33     1523 if (( not -e $file_name_generated_tmp ) or ( not -f $file_name_generated_tmp ) or ( not -T $file_name_generated_tmp )) {
      33        
334 0         0 die 'ERROR ECOGEDI07, RPERL GENERATOR, DIFF CHECK: Missing or invalid temporary AStyle-tidied file, ' . q{'} . $file_name_generated_tmp . q{'} . "\n" . ', dying' . "\n";
335             }
336            
337 16 50       469 open $FILE_HANDLE_GENERATED_TMP, '<', $file_name_generated_tmp
338             or die 'ERROR ECOGEDI08, RPERL GENERATOR, DIFF CHECK: Cannot open temporary AStyle-tidied file ' . q{'} . $file_name_generated_tmp . q{'} . ' for reading,' . $OS_ERROR . ', dying' . "\n";
339            
340             # read in tidied file
341 16         81 my string $file_line_generated_tmp;
342 16         270 while ( $file_line_generated_tmp = <$FILE_HANDLE_GENERATED_TMP> ) {
343 283         827 $string_generated_tidied .= $file_line_generated_tmp . "\n";
344             }
345              
346 16 50       168 close $FILE_HANDLE_GENERATED_TMP
347             or die 'ERROR ECOGEDI09, RPERL GENERATOR, DIFF CHECK: Cannot close temporary AStyle-tidied file ' . q{'} . $file_name_generated_tmp . q{'} . ' after reading, ' . $OS_ERROR . ', dying' . "\n";
348            
349             # POST-PROCESS C++ SOURCE CODE
350 16         1585 $string_generated_tidied = RPerl::Compiler::post_processor_cpp__header_or_cpp_path($string_generated_tidied, $file_name_group->{H});
351              
352             # discard code we are not currently checking, no extra work performed by post-processor
353 16         642 my string_hashref $source_group_tmp = RPerl::Compiler::post_processor_cpp__types_change({$suffix_key => $string_generated_tidied}, $modes);
354 16         58 $string_generated_tidied = $source_group_tmp->{$suffix_key};
355              
356 16         475 $string_reference_tidied = RPerl::Compiler::post_processor_cpp__comments_whitespace_delete($string_reference_tidied);
357 16         549 $string_generated_tidied = RPerl::Compiler::post_processor_cpp__comments_whitespace_delete($string_generated_tidied);
358             }
359              
360             # ACTUALLY START COMPARING REFERENCE VS GENERATED CODE STRINGS IN MEMORY
361              
362             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $string_reference_tidied = ' . "\n" . ( q{=} x 60 ) . "\n" . $string_reference_tidied . "\n" . ( q{=} x 60 ) . "\n\n" );
363             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have $string_generated_tidied = ' . "\n" . ( q{=} x 60 ) . "\n" . $string_generated_tidied . "\n" . ( q{=} x 60 ) . "\n\n" );
364              
365 638         6428 my string_arrayref $string_reference_split = [ ( split /\n/xms, $string_reference_tidied ) ];
366 638         6916 my string_arrayref $string_generated_split = [ ( split /\n/xms, $string_generated_tidied ) ];
367 638         2030 my string $line_generated;
368              
369 638         2654 my hashref $return_value = {};
370 638         4053 $return_value->{diff_line} = 0; # default return value, files do not differ
371              
372 638         1826 for my integer $i ( 0 .. ( ( scalar @{$string_reference_split} ) - 1 ) ) {
  638         2409  
373 8688         11693 my string $line_reference = $string_reference_split->[$i];
374 8688         10950 $line_generated = $string_generated_split->[$i];
375 8688 50       14272 if ( $line_generated =~ /__DUMMY_SOURCE_CODE/xms ) {
376 0         0 RPerl::warning( 'WARNING WCOGEDI00, RPERL GENERATOR, DIFF CHECK: Dummy source code found, attempt to utilize incomplete RPerl feature, abandoning check' . "\n" );
377 0         0 $return_value->{diff_line} = -1;
378 0         0 last;
379             }
380            
381             # trim trailing whitespace
382 8688         15594 $line_reference =~ s/\s+$//gxms;
383 8688         14218 $line_generated =~ s/\s+$//gxms;
384              
385 8688 50       16309 if ( $line_reference ne $line_generated ) {
386             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have non-matching $line_reference =' . "\n" . $line_reference . "\n" );
387             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), have non-matching $line_generated =' . "\n" . $line_generated . "\n" );
388 0         0 $return_value->{diff_line} = $i + 1; # arrays indexed from 0, file lines indexed from 1
389 0         0 $return_value->{line_reference} = $line_reference;
390 0         0 $return_value->{line_generated} = $line_generated;
391 0         0 last;
392             }
393             }
394              
395             # RPerl::diag( 'in Generator->diff_check_file_vs_string(), about to return $return_value =' . "\n" . $return_value . "\n" );
396 638         10710 return $return_value;
397             }
398              
399             # Generate from RPerl AST back to RPerl Source Code
400             sub ast_to_rperl__generate {
401 687     687   2781 { my string_hashref $RETURN_TYPE };
  687         2090  
402 687         2275 ( my object $node, my string_hashref $modes) = @ARG;
403              
404             # RPerl::diag("in Generator::ast_to_rperl__generate(), received \$node =\n" . RPerl::Parser::rperl_ast__dump($node) . "\n");
405             # RPerl::diag("in Generator::ast_to_rperl__generate(), received \$modes =\n" . Dumper($modes) . "\n");
406              
407 687         4005 RPerl::verbose('GENERATE: Generate RPerl syntax... ');
408              
409 687 50       4688 if ( not( defined $modes->{types} ) ) {
410 0         0 die 'ERROR ECOGEMO00, RPERL GENERATOR, RPERL TYPES MODE: ' . q{'PERL'} . ' types mode expected in PERL ops mode, but undefined/null value found, dying' . "\n";
411             }
412 687 50       4983 if ( not( $modes->{types} eq 'PERL' ) ) {
413 0         0 die 'ERROR ECOGEMO01, RPERL GENERATOR, RPERL TYPES MODE: ' . q{'PERL'} . ' types mode expected in PERL ops mode, but non-matching value ' . q{'} . $modes->{types} . q{'} . ' found, dying' . "\n";
414             }
415              
416 687         18456 grammar_rules__map();
417              
418             # NEED FIX: check to ensure we are generating a valid return object
419 687         18450 my string_hashref $rperl_source_group = $node->ast_to_rperl__generate($modes);
420              
421 644         3578 RPerl::verbose( ' done.' . "\n" );
422 644         7382 return $rperl_source_group;
423             }
424              
425             # Generate from RPerl AST to C++ Source Code
426             sub ast_to_cpp__generate {
427 39     39   111 { my string_hashref $RETURN_TYPE };
  39         128  
428 39         139 ( my object $node, my string_hashref $modes) = @ARG;
429              
430             # RPerl::diag("in Generator::ast_to_cpp__generate(), received \$node =\n" . RPerl::Parser::rperl_ast__dump($node) . "\n");
431             # RPerl::diag("in Generator::ast_to_cpp__generate(), received \$modes =\n" . Dumper($modes) . "\n");
432             # RPerl::diag( 'in Generator::ast_to_cpp__generate(), received $modes->{_symbol_table} = ' . "\n" . Dumper($modes->{_symbol_table}) . "\n" );
433              
434 39         195 RPerl::verbose('GENERATE: Generate C++ syntax... ');
435              
436 39 50       243 if ( not( defined $modes->{types} ) ) {
437 0         0 die 'ERROR ECOGEMO02, C++ GENERATOR, RPERL TYPES MODE: ' . q{'PERL' or 'CPP'} . ' types mode expected in CPP ops mode, but undefined/null value found, dying' . "\n";
438             }
439 39 50 33     380 if ( not( ( $modes->{types} eq 'PERL' ) or ( $modes->{types} eq 'CPP' ) ) ) {
440 0         0 die 'ERROR ECOGEMO03, C++ GENERATOR, RPERL TYPES MODE: ' . q{'PERL' or 'CPP'} . ' types mode expected in CPP ops mode, but non-matching value ' . q{'} . $modes->{types} . q{'} . ' found, dying' . "\n";
441             }
442              
443 39         1141 grammar_rules__map();
444              
445             # NEED FIX: check to ensure we are generating a valid return object
446 39         127 my string_hashref $cpp_source_group;
447              
448 39 50       179 if ( $modes->{types} eq 'PERL' ) {
449 0         0 $cpp_source_group = $node->ast_to_cpp__generate__CPPOPS_PERLTYPES($modes);
450             }
451             else {
452 39         1011 $cpp_source_group = $node->ast_to_cpp__generate__CPPOPS_CPPTYPES($modes);
453             }
454              
455 38         211 RPerl::verbose( ' done.' . "\n" );
456 38         4431 return $cpp_source_group;
457             }
458              
459             # Append All Source Code Entries From Group 2 Onto The Respective Entries In Group 1
460             sub source_group_append {
461 29506     29506   37032 { my void $RETURN_TYPE };
  29506         34748  
462 29506         44952 ( my string_hashref $rperl_source_group_1, my string_hashref $rperl_source_group_2) = @ARG;
463              
464             # RPerl::diag('in Generator::source_group_append(), received $rperl_source_group_1 =' . "\n" . Dumper($rperl_source_group_1) . "\n");
465             # RPerl::diag('in Generator::source_group_append(), received $rperl_source_group_2 =' . "\n" . Dumper($rperl_source_group_2) . "\n");
466              
467 29506         36312 my string $type_1;
468             my string $type_2;
469 29506         33714 foreach my string $suffix_key ( sort keys %{$rperl_source_group_2} ) {
  29506         86808  
470 30102 50       65946 if ( defined $rperl_source_group_2->{$suffix_key} ) {
471 30102         46114 $type_2 = ref $rperl_source_group_2->{$suffix_key};
472 30102 100       50672 if ($type_2 eq q{}) { $type_2 = 'SCALAR'; }
  30098         37169  
473 30102 100 66     91951 if ( ( exists $rperl_source_group_1->{$suffix_key} )
474             and ( defined $rperl_source_group_1->{$suffix_key} ) ) {
475 29244         40857 $type_1 = ref $rperl_source_group_1->{$suffix_key};
476 29244 50       44436 if ($type_1 eq q{}) { $type_1 = 'SCALAR'; }
  29244         34351  
477 29244 50       51397 if ($type_1 ne $type_2) {
478 0         0 die 'ERROR ECOGE00, GENERATOR: Source group entries type mismatch, ' . q{'} . $type_1 . q{'} . ' is different than ' . q{'} . $type_2 . q{'} . ', dying' . "\n";
479             }
480             }
481 858         1425 else { $type_1 = undef; }
482              
483             # RPerl::diag('in Generator::source_group_append(), have $type_1 =' . $type_1 . "\n");
484             # RPerl::diag('in Generator::source_group_append(), have $type_2 =' . $type_2 . "\n");
485              
486             # init to empty thing if not already defined
487 30102 100       45723 if ( not defined $type_1 ) {
488 858 50       1848 if ($type_2 eq 'ARRAY') {
    100          
489 0         0 $rperl_source_group_1->{$suffix_key} = [];
490             }
491             elsif ($type_2 eq 'HASH') {
492 4         12 $rperl_source_group_1->{$suffix_key} = {};
493             }
494             else {
495 854         1767 $rperl_source_group_1->{$suffix_key} = q{};
496             }
497             }
498 30102 50       50685 if ($type_2 eq 'ARRAY') {
    100          
499 0         0 $rperl_source_group_1->{$suffix_key} = [@{$rperl_source_group_1->{$suffix_key}}, @{$rperl_source_group_2->{$suffix_key}}];
  0         0  
  0         0  
500             }
501             elsif ($type_2 eq 'HASH') {
502 4         6 $rperl_source_group_1->{$suffix_key} = {%{$rperl_source_group_1->{$suffix_key}}, %{$rperl_source_group_2->{$suffix_key}}};
  4         9  
  4         18  
503             }
504             else {
505 30098 100 100     73386 if (($suffix_key eq '_package_name') or ($suffix_key eq '_package_name_underscores')) {
506             # replace (don't append) special system data items
507 464         1122 $rperl_source_group_1->{$suffix_key} = $rperl_source_group_2->{$suffix_key};
508             }
509             else {
510 29634         68128 $rperl_source_group_1->{$suffix_key} .= $rperl_source_group_2->{$suffix_key};
511             }
512             }
513             }
514             }
515 29506         78677 return;
516             }
517              
518             sub grammar_rules__map {
519 726     726   2324 { my void $RETURN_TYPE };
  726         1594  
520              
521             # do not attempt to re-map grammar rules if already mapped
522 726 100 66     7804 if ( ( exists &CompileUnit_5::ast_to_rperl__generate )
523             and ( defined &CompileUnit_5::ast_to_rperl__generate ) )
524             {
525 725         1872 return;
526             }
527              
528             # RPerl::diag("in Generator::grammar_rules__map(), have \$RPerl::Grammar::RULES =\n" . Dumper($RPerl::Grammar::RULES) . "\n");
529 1         3 foreach my string $rule ( sort keys %{$RPerl::Grammar::RULES} ) {
  1         182  
530              
531             # create mapped class/package (namespace) and set up Perl inheritance
532             my string $eval_string
533             = 'package '
534             . $rule
535             . q{; use parent qw(}
536             . $RPerl::Grammar::RULES->{$rule}
537             . q{); use }
538 168         939 . $RPerl::Grammar::RULES->{$rule}
539             . q{; our hashref $properties = {}; 1;};
540              
541             # RPerl::diag('in Generator::grammar_rules_map(), have 1st $eval_string = ' . "\n" . $eval_string . "\n");
542 168     1   10415 my integer $eval_retval = eval $eval_string;
  1     1   14  
  1     1   4  
  1     1   12  
  1     1   150  
  1     1   3  
  1     1   117  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   79  
  1     1   3  
  1     1   37  
  1     1   6  
  1     1   6  
  1     1   7  
  1     1   180  
  1     1   5  
  1     1   41  
  1     1   7  
  1     1   2  
  1     1   6  
  1     1   111  
  1     1   2  
  1     1   34  
  1     1   6  
  1     1   4  
  1     1   6  
  1     1   82  
  1     1   2  
  1     1   28  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   86  
  1     1   4  
  1     1   27  
  1     1   6  
  1     1   3  
  1     1   5  
  1     1   79  
  1     1   2  
  1     1   27  
  1     1   6  
  1     1   4  
  1     1   5  
  1     1   104  
  1     1   2  
  1     1   31  
  1     1   7  
  1     1   3  
  1     1   4  
  1     1   81  
  1     1   2  
  1     1   30  
  1     1   8  
  1     1   5  
  1     1   5  
  1     1   82  
  1     1   3  
  1     1   41  
  1     1   6  
  1     1   3  
  1     1   7  
  1     1   101  
  1     1   2  
  1     1   41  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   86  
  5     1   15  
  5     1   121  
  1     1   7  
  1     1   3  
  1     1   5  
  1     1   90  
  1     1   3  
  1     1   29  
  1     1   6  
  1     1   3  
  1     1   4  
  1     1   75  
  1     1   2  
  1     1   26  
  1     1   5  
  1     1   3  
  1     1   5  
  1     1   86  
  1     1   4  
  1     1   27  
  1     1   6  
  1     1   3  
  39     1   149  
  39     1   1189  
  1     1   3  
  1     1   29  
  1     1   9  
  1     1   2  
  1     1   5  
  1     1   78  
  1     1   2  
  1     1   26  
  1     1   6  
  1     1   2  
  1     1   5  
  1     1   101  
  1     1   6  
  1     1   39  
  1     1   7  
  1     1   2  
  1     1   4  
  1     1   75  
  1     1   7  
  1     1   27  
  1     1   5  
  1     1   2  
  1     1   4  
  1     1   68  
  1     1   2  
  1     1   23  
  1     1   5  
  1     1   2  
  1     1   5  
  1     1   85  
  1     1   4  
  1     1   40  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   75  
  30     1   91  
  30     1   1043  
  1     1   6  
  1     1   2  
  1     1   3  
  1     1   922  
  1     1   6  
  1     1   34  
  1     1   7  
  1     1   2  
  1     1   4  
  1     1   83  
  1     1   2  
  1     1   26  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   106  
  1     1   2  
  1     1   28  
  1     1   12  
  1     1   2  
  79     1   225  
  79     1   1766  
  1     1   3  
  1     1   24  
  1     1   6  
  1     1   3  
  1     1   4  
  1     1   81  
  1     1   3  
  1     1   27  
  1     1   6  
  1     1   2  
  1     1   5  
  1     1   67  
  1     1   3  
  1     1   24  
  1     1   5  
  1     1   2  
  1     1   5  
  1     1   77  
  1     1   2  
  1     1   32  
  1     1   6  
  1     1   1  
  1     1   5  
  1     1   75  
  1     1   2  
  1     1   24  
  1     1   7  
  1     1   2  
  1     1   5  
  1     1   83  
  1     1   2  
  1     1   26  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   68  
  1     1   4  
  1     1   24  
  1     1   6  
  1     1   3  
  1     1   4  
  1     1   78  
  1     1   2  
  1     1   27  
  1     1   6  
  1     1   4  
  1     1   4  
  1     1   86  
  1     1   2  
  1     1   29  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   82  
  1     1   2  
  1     1   29  
  1     1   6  
  1     1   2  
  1     1   3  
  1     1   90  
  1     1   2  
  1     1   32  
  15     1   74  
  15     1   563  
  24     1   90  
  24     1   1092  
  1     1   2  
  1     1   26  
  1     1   7  
  1     1   2  
  1     1   4  
  1     1   76  
  1     1   2  
  1     1   26  
  1     1   12  
  1     1   3  
  1     1   7  
  1     1   84  
  1     1   2  
  1     1   24  
  1     1   7  
  1     1   2  
  1     1   5  
  1     1   111  
  1     1   2  
  1     1   29  
  1     1   6  
  1     1   2  
  1     1   4  
  1     1   75  
  1     1   3  
  1     1   25  
  1     1   8  
  1     1   2  
  1     1   4  
  1     1   76  
  1     1   2  
  1     1   25  
  1     1   6  
  1     1   2  
  1     1   5  
  1     1   78  
  1     1   2  
  1     1   27  
  1     1   7  
  1     1   1  
  1     1   6  
  1     1   73  
  13     1   31  
  13     1   369  
  1     1   6  
  1     1   3  
  1     1   4  
  1     1   88  
  1     1   2  
  1     1   30  
  1     1   7  
  1     1   2  
  1     1   5  
  1     1   84  
  1     1   2  
  1     1   27  
  1     1   9  
  1     1   2  
  1     1   8  
  1     1   111  
  1     1   2  
  1     1   34  
  1     1   9  
  1     1   3  
  2     1   15  
  2     1   253  
  1     1   3  
  1     1   46  
  1     1   10  
  1     1   3  
  1     1   10  
  1     1   107  
  1     1   2  
  1     1   37  
  1     1   11  
  1     1   2  
  1     1   9  
  1     1   158  
  1     1   5  
  1     1   43  
  1     1   10  
  1     1   4  
  1     1   9  
  1     1   100  
  1     1   3  
  1     1   41  
  1     1   9  
  1     1   3  
  1     1   11  
  1     1   104  
  1     1   3  
  1     1   31  
  1     1   10  
  1     1   4  
  1     1   11  
  1     1   101  
  1     1   3  
  1     1   31  
  1     1   10  
  1     1   3  
  1     1   9  
  1     1   107  
  1     1   3  
  1     1   33  
  1     1   15  
  1     1   5  
  1     1   15  
  1     1   157  
  1     1   4  
  1     1   46  
  1     1   9  
  1     1   3  
  1     1   9  
  1     1   102  
  1     1   3  
  1         43  
  1         9  
  1         3  
  1         9  
  1         100  
  1         2  
  1         35  
  1         14  
  1         2  
  1         9  
  1         108  
  1         2  
  1         35  
  1         12  
  1         3  
  1         9  
  1         104  
  1         3  
  1         35  
  7         25  
  7         365  
  1         9  
  1         98  
  1         3  
  1         32  
  1         9  
  1         2  
  1         12  
  1         105  
  1         2  
  1         38  
  1         16  
  1         3  
  1         10  
  1         111  
  1         4  
  1         33  
  1         12  
  1         4  
  1         12  
  1         124  
  1         3  
  1         40  
  1         9  
  1         3  
  1         11  
  1         102  
  181         429  
  181         10552  
  1         10  
  1         3  
  1         11  
  1         101  
  1         2  
  1         38  
  1         9  
  1         2  
  1         10  
  1         97  
  1         3  
  1         34  
  1         10  
  1         2  
  1         12  
  1         147  
  1         3  
  1         54  
  1         10  
  1         2  
  14         55  
  14         518  
  1         3  
  1         33  
  1         17  
  1         3  
  1         11  
  1         115  
  1         2  
  1         41  
  1         15  
  1         3  
  1         12  
  1         117  
  1         1  
  1         33  
  28         167  
  28         888  
  1         11  
  1         128  
  1         3  
  1         45  
  1         9  
  1         3  
  1         9  
  1         112  
  1         4  
  1         48  
  1         14  
  1         4  
  1         13  
  1         134  
  1         2  
  1         45  
  1         16  
  1         3  
  1         14  
  1         170  
  1         3  
  1         45  
  1         11  
  1         3  
  1         10  
  1         124  
  1         3  
  1         48  
  1         17  
  1         4  
  483         1631  
  483         18963  
  1         2  
  1         45  
  1         10  
  1         3  
  1         9  
  1         133  
  1         4  
  1         56  
  1         14  
  1         6  
  1399         4032  
  1399         41873  
  1         4  
  1         49  
  1         10  
  1         3  
  1         10  
  1         128  
  1         2  
  1         45  
  1         12  
  1         3  
  1         11  
  1         172  
  1         2  
  1         105  
  1         13  
  1         2  
  4         19  
  4         238  
  1         2  
  1         42  
  1         10  
  1         3  
  1         11  
  1         151  
  1         4  
  1         51  
  1         10  
  1         2  
  1         10  
  1         138  
  1         6  
  1         58  
  1         15  
  1         5  
  1         13  
  1         140  
  1         3  
  1         39  
  1         10  
  1         3  
  1         12  
  1         172  
  1         2  
  1         46  
  1         11  
  1         2  
  1         11  
  1         177  
  1         5  
  1         63  
  1         11  
  1         2  
  1         11  
  1         121  
  1         3  
  1         45  
  1         9  
  1         2  
  1         9  
  1         120  
  1         3  
  1         40  
  1         15  
  1         3  
  1         13  
  1         179  
  1         4  
  1         70  
  1         10  
  1         2  
  1         10  
  1         133  
  1         3  
  1         49  
  1         10  
  1         2  
  1         11  
  1         138  
  1         3  
  1         44  
  1         10  
  1         4  
  1         10  
  1         196  
  1         2  
  1         59  
  1         9  
  1         3  
  1         13  
  1         188  
  1         4  
  1         46  
  1         9  
  1         3  
  1         10  
  1         108  
  1         2  
  1         42  
  1         6  
  1         2  
  1         7  
  1         152  
  1         3  
  1         31  
  1         6  
  1         2  
  1         4  
  1         79  
  1         2  
  1         26  
  1         7  
  1         3  
  1         5  
  1         85  
  1         2  
  1         29  
  1         6  
  1         2  
  1         5  
  1         80  
  1         3  
  1         26  
  1         7  
  1         2  
  1         5  
  1         80  
  1         2  
  1         32  
  30         119  
  30         3462  
  1         6  
  1         85  
  1         2  
  1         30  
  1         8  
  1         3  
  1         5  
  1         91  
  1         3  
  1         30  
  7         21  
  7         127  
  1         7  
  1         80  
  1         2  
  1         40  
  1         6  
  1         2  
  1         6  
  1         110  
  1         2  
  1         30  
  1         10  
  1         3  
  1         9  
  1         135  
  1         3  
  1         41  
  1         6  
  1         3  
  1         4  
  1         82  
  1         2  
  1         27  
  1         6  
  1         3  
  1         5  
  1         84  
  1         2  
  1         28  
  1         7  
  1         2  
  1         5  
  1         79  
  1         2  
  1         313  
  1         5  
  1         2  
  1         4  
  1         80  
  1         3  
  1         25  
  1         6  
  1         2  
  1         4  
  1         80  
  1         2  
  1         31  
  1         5  
  1         2  
  1         5  
  1         78  
  1         3  
  1         26  
  1         6  
  1         3  
  1173         3687  
  1173         32780  
  1         2  
  1         26  
  1         10  
  1         2  
  1         5  
  1         93  
  1         3  
  1         84  
  1         6  
  1         2  
  1         6  
  1         79  
  1         2  
  1         25  
  1         10  
  1         3  
  1         5  
  1         87  
  1         2  
  1         28  
  1         7  
  1         4  
  1         4  
  1         79  
  1         2  
  1         37  
  1         6  
  1         2  
  1         4  
  1         136  
  1         2  
  1         33  
  1         6  
  1         2  
  1         6  
  1         75  
  1         2  
  1         26  
  1         7  
  1         2  
  1         6  
  1         76  
  1         3  
  1         24  
  1         6  
  1         3  
  1         5  
  1         70  
  1         3  
  1         24  
  1         8  
  1         2  
  1         4  
  1         107  
  1         3  
  1         32  
  1         7  
  1         2  
  1         4  
  1         92  
  1         4  
  1         39  
  1         7  
  1         4  
  1         7  
  1         104  
  1         2  
  1         30  
  1         10  
  1         4  
  1         7  
  1         82  
  198         586  
  198         19676  
  1         6  
  1         3  
  1         4  
  1         78  
  107         280  
  107         2277  
  1         6  
  1         2  
  1         5  
  1         80  
  1         2  
  1         27  
  1         6  
  1         2  
  1         3  
  1         85  
  1         2  
  1         28  
  1         7  
  1         3  
  1         4  
  1         72  
  1         2  
  1         27  
  1         7  
  1         2  
  1         4  
  1         76  
  38         128  
  38         1241  
  1         7  
  1         2  
  1         5  
  1         75  
  1         2  
  1         27  
  1         6  
  1         2  
  1         3  
  1         75  
  1         2  
  1         25  
  1         6  
  1         3  
  1         6  
  1         96  
  1         3  
  1         29  
  1         6  
  1         3  
  1         4  
  1         81  
  1         2  
  1         26  
  1         6  
  1         2  
  1         5  
  1         80  
  1         2  
  1         27  
  1         6  
  1         2  
  1         5  
  1         79  
  1         2  
  1         26  
  1         6  
  1         4  
  1         4  
  1         79  
  1         3  
  1         27  
  1         6  
  1         3  
  1         6  
  1         79  
  1         2  
  1         24  
  1         5  
  1         4  
  1         5  
  1         78  
  1         2  
  1         38  
  1         5  
  1         2  
  1         6  
  1         76  
  1         2  
  1         28  
  1         6  
  1         2  
  1         5  
  1         76  
  1         2  
  1         34  
  1         7  
  1         2  
  1         5  
  1         79  
  1         2  
  1         27  
  1         7  
  1         2  
  1         6  
  1         104  
  1         3  
  1         30  
  1         10  
  1         3  
  1         7  
  1         88  
  1         3  
  1         24  
  1         10  
  1         5  
  1         7  
  1         80  
  1         2  
  1         24  
  1         6  
  1         2  
  1         4  
  1         68  
  1         3  
  1         24  
  1         6  
  1         3  
  1         4  
  1         104  
  1         4  
  1         26  
  1         6  
  1         3  
  1         4  
  1         80  
  1         2  
  1         25  
  1         8  
  1         2  
  1         5  
  1         80  
  1         3  
  1         28  
  1         6  
  1         2  
  1         5  
  1         68  
  1         3  
  1         23  
  1         7  
  1         2  
  1         5  
  1         68  
  1         3  
  1         29  
  1         6  
  1         2  
  7         21  
  7         218  
  1         3  
  1         31  
  1         9  
  1         5  
  1         6  
  1         89  
  33         71  
  33         651  
  1         8  
  1         2  
  1         5  
  1         70  
  1         2  
  1         24  
  1         6  
  1         3  
  1         6  
  1         95  
  1         5  
  1         42  
  1         6  
  1         3  
  1         5  
  1         132  
  1         3  
  1         33  
  1         5  
  1         3  
  1         4  
  1         93  
  3         10  
  3         82  
  1         7  
  1         3  
  4         14  
  4         171  
  1         2  
  1         29  
  1         6  
  1         2  
  1         5  
  1         101  
  1         3  
  1         29  
  1         6  
  1         2  
  1         5  
  1         86  
  1         4  
  1         41  
  1         7  
  1         2  
  1         5  
  1         77  
  1         3  
  1         33  
  26         62  
  26         547  
  1         4  
  1         76  
  1         3  
  1         27  
  1         7  
  1         2  
  1         4  
  1         80  
  1         3  
  1         26  
  1         6  
  1         4  
  1         4  
  1         80  
  1         2  
  1         26  
  1         6  
  1         2  
  1         4  
  1         74  
  1         2  
  1         27  
  1         9  
  1         2  
  1         5  
  1         101  
  1         2  
  1         27  
  1         7  
  1         2  
  1         5  
  1         67  
  1         2  
  1         305  
  1         7  
  1         3  
  1         4  
  1         78  
  1         2  
  1         26  
  1         6  
  1         2  
  1         5  
  1         67  
  1         2  
  1         23  
  1         11  
  1         4  
  1         7  
  1         111  
  2         7  
  2         201  
543 168 50 33     1140 if ( ( not defined $eval_retval ) or ( $EVAL_ERROR ne q{} ) ) {
544 0         0 die 'ERROR ECOGE01, GENERATOR: Grammar rules map, failed to create pre-mapped namespace, dying' . "\n" . $EVAL_ERROR . "\n";
545             }
546              
547             # if (not defined $eval_retval) {die $EVAL_ERROR . "\n";}
548              
549             # copy all subroutines (and thus methods) from original class/package (namespace) into mapped class/package at runtime;
550             # DEV NOTE: I thought this would be handled automatically by Perl inheritance above, but I guess not, probably due to how Class.pm sets subroutines during INIT compile time
551             # NEED REMOVE HIGH MAGIC: double-eval'ed short form, long form available in scripts/development/unused/rsubs.pl, possibly replace this entire grammar_rules__map() subroutine with hard-coded *.pm files
552             $eval_string
553             = q[foreach my $key ( keys %]
554             . $RPerl::Grammar::RULES->{$rule}
555             . q[:: ) { if (defined &{ $]
556             . $RPerl::Grammar::RULES->{$rule}
557             . q[::{ $key} } ) { if (not defined eval q<*{]
558             . $rule
559             . q[::> . $key . q<} = sub { return &{ $]
560 168         878 . $RPerl::Grammar::RULES->{$rule}
561             . q[::{'> . $key . q<'} }(@_); };>) {die $EVAL_ERROR . "\n";} } }];
562              
563             # RPerl::diag('in Generator::grammar_rules_map(), have 2nd $eval_string = ' . "\n" . $eval_string . "\n");
564 168         18312 $eval_retval = eval $eval_string;
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         6  
  2         54  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  11         38  
  11         338  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  103         244  
  103         2983  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         19  
  6         129  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  64         167  
  64         1695  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         206  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  931         2846  
  931         23046  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  22         52  
  22         494  
  0         0  
  0         0  
  0         0  
  0         0  
  22         60  
  22         481  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1245         2930  
  1245         28761  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         15  
  5         140  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  8         22  
  8         240  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  15         46  
  15         369  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  4         12  
  4         125  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         15  
  6         132  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2362         5198  
  2362         50006  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  21         62  
  21         746  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         29  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  9         23  
  9         190  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  22         72  
  22         701  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  208         438  
  208         5038  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  35         121  
  35         1330  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  276         747  
  276         6446  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         36  
  10         305  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  23         73  
  23         626  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2410         5983  
  2410         157146  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         27  
  5         162  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  81         264  
  81         2154  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  303         795  
  303         34127  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         8  
  2         183  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  30         68  
  30         625  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  32         77  
  32         672  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  23         78  
  23         749  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  4294         10207  
  4294         104294  
  6         16  
  6         119  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         5  
  1         102  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  18         56  
  18         4056  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         22  
  10         221  
  46         149  
  46         10008  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  55         115  
  55         1222  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  21         102  
  21         752  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  48         180  
  48         1373  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  803         2687  
  803         45719  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  18         49  
  18         418  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  62         185  
  62         1808  
  57         160  
  57         1506  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1983         4587  
  1983         44527  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  154         499  
  154         46945  
  0         0  
  0         0  
  0         0  
  0         0  
  98         420  
  98         3438  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  242         877  
  242         119443  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  598         2135  
  598         17414  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  43         160  
  43         1160  
  32         131  
  32         1060  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  4         13  
  4         121  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  187         625  
  187         5163  
  0         0  
  0         0  
  24         95  
  24         5221  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  8         28  
  8         179  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         6  
  2         72  
  134         443  
  134         3763  
  0         0  
  0         0  
  1         3  
  1         33  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         14  
  3         102  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         67  
  7         26  
  7         366  
  8         24  
  8         358  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  77         188  
  77         1849  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  579         1385  
  579         13007  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         5  
  1         30  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         4  
  1         34  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  133         562  
  133         4796  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  39         149  
  39         1085  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2122         5329  
  2122         49821  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  788         2321  
  788         47836  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  19         52  
  19         445  
  102         230  
  102         2500  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  4         14  
  4         86  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         32  
  6         630  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  23         57  
  23         537  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  142         481  
  142         4395  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  457         1256  
  457         11042  
  0         0  
  0         0  
  69         161  
  69         3696  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  205         894  
  205         9919  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         14  
  5         123  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         24  
  10         232  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         16  
  6         124  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  284         840  
  284         31521  
  15         51  
  15         515  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  76         285  
  76         2324  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  12         32  
  12         251  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  20         89  
  20         616  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         20  
  6         164  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  47         134  
  47         1151  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  37         94  
  37         866  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  2         9  
  2         124  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1         6  
  1         41  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  72         166  
  72         4397  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         16  
  6         126  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  503         1483  
  503         12898  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         9  
  3         80  
  0         0  
  0         0  
  165         328  
  165         3462  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  40         126  
  40         1154  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  422         1971  
  422         12935  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  14         67  
  14         401  
  0         0  
  0         0  
  0         0  
  0         0  
  6         16  
  6         125  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         12  
  3         84  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  1140         2983  
  1140         171562  
  92         201  
  92         2076  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  10         31  
  10         232  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  9         21  
  9         198  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         14  
  6         128  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         18  
  5         686  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  8         20  
  8         232  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  16         59  
  16         454  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  54         184  
  54         20485  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  4428         10589  
  4428         173672  
  23         66  
  23         1222  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  23         88  
  23         856  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         14  
  3         92  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  107         242  
  107         18565  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  209         706  
  209         7504  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  356         1402  
  356         12052  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  35         78  
  35         784  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  6         16  
  6         127  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  13         39  
  13         386  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  7         18  
  7         125  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  56         136  
  56         1491  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  7         29  
  7         573  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  54         172  
  54         1669  
  0         0  
  0         0  
  0         0  
  0         0  
  87         319  
  87         2724  
  0         0  
  0         0  
  170         444  
  170         3959  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  20         48  
  20         426  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  209         451  
  209         8614  
  0         0  
  0         0  
  0         0  
  0         0  
  16         63  
  16         714  
565 168 50 33     1910 if ( ( not defined $eval_retval ) or ( $EVAL_ERROR ne q{} ) ) {
566 0         0 die 'ERROR ECOGE02, GENERATOR: Grammar rules map, failed copy subroutines into mapped namespace, dying' . "\n" . $EVAL_ERROR . "\n";
567             }
568             }
569 1         27 return;
570             }
571              
572             1; # end of class