#!/usr/bin/perl
#
# ====================================================================
# @Ђ݂[ for Force 264@V3.1ȍ~p@
# 
# ̓tFCU[Uĥ߂̉摜_`FbNR[h𐶐
# ߂̕⏕XNvgłBi V3.1ȍ~pj
# Ђ݂́uЂ݂ bitmap R[h CGIv𗘗p
# 
#  ̃XNvgiЂ݂[ǁjɂ
# 
# ͂Ђ݂̋𓾂-Force 264-ŉzzĂ̂łB
# ł̂ŁAzzꍇ͌f{̂ƃZbgŔzzĉB
# ̗L킸ÃXNvgiЂ݂[ǁĵP̂Ŕzz邱Ƃ
# o܂B
# 
#---------------- ݒ  --------------#
# 
# ́u$himicode_logv͕Kf{̃XNvg̏ݒƍ킹邱
# sς݃`FbNR[hۑt@C
$dataroot = '/home/zheinz/site-data/';
$himicode_log = $dataroot . 'Ap8Rtml-submit-code.txt';

# ۑiݒ萔ȏ͌Â̂珇ɍ폜j
$maxline = '200';  # ANZXꍇ͑₵Ă

# _ bitmap piFXĂ݂ĉj
# TCY傫ƂꂾdȂ܂
$ROT_FLG = 0;       # 0:]A1:]L
$CHAR_TYPE = 0;     # 0:A1:A2:[}A3:
$CHAR_SIZE = 2;     # TCYix[X̒lj
$CHAR_RAND = 1;     # TCỸ_͈́B1 ɂƌŒTCYɂȂ܂B
$NOISE_FLG = 1;     # 0:mCYA1:mCYL
$NOISE_WIDE = 4;    # ̗mCYiőljBP͗mCYB
$NOISE_HEIGHT = 1; # c̍sCYiőljBP͍smCYB
$NOISE_DENSITY = 7; # PAQAREEȄŔȂ܂B

# \鐔̎擾
$MAX_DIGIT = 3;     # ő包
$MIN_DIGIT = 2;     # _Ɍ߂ꍇ̍ŏ

# -----------------------------------------------------------------
# A GET A^bN΍
# -----------------------------------------------------------------
$counter2 = $dataroot . 'Ap8Rtml-cnt2.txt';
$tstmp    = $dataroot . 'Ap8Rtml-tstmp.txt';
#
# Ђ݂[ǂgꍇɂ͎ۂ̒l 2 {ɂ邱
#
$access_limit = 200;
@script_list = (
                '/home/zheinz/public_html/cgi-bin',
                );

&filter;

#-----------------܂----------------#
srand (time|$$);
# _̃_̐
$max_num =1;
$min_num =1;
for( ; ; ){
  $num_digit = rand($MAX_DIGIT)%$MAX_DIGIT+1;
  last if($num_digit >= $MIN_DIGIT);
}
for($i=0; $i<$num_digit; $i++){
  $max_num *= 10;
  }
$min_num = $max_num/10;
for( ; ; ){
  $num = rand($max_num)%$max_num;
  last if($num >= $min_num);
}
# i[Ƃہ[ƁjƂƂɃt@C֋L^
$himiko = $num . $ARGV[0];
open(LOG,"$himicode_log") || die "Can't Open himicode Log: $!\n";
@lines = <LOG>;
close(LOG);
$phase = @lines;
$maxline2 = ($maxline - 2);
if ($phase >= $maxline) {
  open(LOG,">$himicode_log") || die "Can't Open himicode Log: $!\n";
  print LOG "$himiko\n";
  foreach $phase (0 .. $maxline2) {
    print LOG $lines[$phase];
  }
} else {
  open(LOG,">$himicode_log") || die "Can't Open himicode Log: $!\n";
  print LOG "$himiko\n";
  foreach $log (@lines) {
    print LOG $log;
  }
}
close(LOG);

&make_template;
@hex = &make_bitmap($num);
print "Content-type: image/x-xbitmap\n\n";
print "#define code_width $width\n";
print "#define code_height $height\n";
print "static char code_bits[] = {\n";
for ( $i=0; $i<@hex; $i++ ) {
    print $hex[$i];
    print ", ";
    print "\n" unless ($i+1) % 8;
}
print "\n}\n";
exit(0);

# A GET A^bN΍
# 30 ȓɂx̃ANZX𒴂
# XNvgNłȂ悤ɂBby gH
sub filter {
  open(DB, "$tstmp" ) || &error('0');
  @last_tstmp = <DB>;
  close(DB);

  $tmp_stmp = time;
  $onebyte = '1';  

  if( ( $tmp_stmp - $last_tstmp[0] ) > ( 30*60 ) ){

    # 30 o߁BJE^Zbg

    open(DB,">$counter2")|| &error('0');
    print DB $onebyte;
    close(DB);

    # L^

    open(DB,">$tstmp")|| &error('0');
    print DB $tmp_stmp;
    close(DB);
  }
  else{
    if( -e $counter2 ){ @cfstat2 = stat $counter2; }
    $number2 = ++$cfstat2[7];

    # ANZXߑ̏ꍇ
    # chmod ăXNvgNłȂ悤ɂ
    #
    if( $number2 > $access_limit ){
      chmod 0000, @script_list;
      &error('0');
    }
    open(DB,">>$counter2")|| &error('0');
    print DB $onebyte;
    close(DB);
  }
}

sub make_bitmap {
    my($num) = @_;
    my($rate, @num, @str, $i, @tmp, $adj, $j, $wide_adjust, 
       $l, $k, $height_adjust, $str, @bit, @hex);
# global vars
    $width = 0; $height = 0;

    $rate = $CHAR_SIZE;
    if($CHAR_RAND > 1 ){
        while($rate == $CHAR_SIZE){
            $rate = rand($CHAR_RAND)%$CHAR_RAND +$CHAR_SIZE;
        }
    }

    @num = split(//,$num);
    @str = ();
    for($i=0; $i<@num; $i++){
        @tmp = make_num($num[$i],$rate);
        $adj = rand($NOISE_WIDE)%$NOISE_WIDE*$NOISE_FLG;
        for($j=0; $j<@tmp; $j++){
            $str[$j] .= $tmp[$j];
            $wide_adjust = "";
            for($l=0; $l<$adj; $l++){
               for($k=0; $k<8; $k++){
                   if(rand($NOISE_DENSITY)%$NOISE_DENSITY == 0 ){
                      $wide_adjust .= rand(2)%2;
                   }
                   else{
                      $wide_adjust .= "0";
                   }
               }
            }
            $str[$j] .= $wide_adjust;
        }
    }

    $width = length($str[0]);
    $adj = rand($NOISE_HEIGHT)%$NOISE_HEIGHT*$NOISE_FLG;
    for($j=0; $j<$adj; $j++){
        $height_adjust = "";
        for($k=0; $k<$width; $k++){
            if(rand($NOISE_DENSITY)%$NOISE_DENSITY == 0 ){
               $height_adjust .= rand(2)%2;
            }
            else{
               $height_adjust .= "0";
            }
        }
        if(rand(2)%2==0){
            push(@str,$height_adjust);
        }
        else{
            unshift(@str,$height_adjust);
        }
    }
    $height = @str;

    $str = join("",@str);
    @bit = split(//,$str);

    $j=0;
    $i=0;
    while($i<@bit){
       $hex[$j] = sprintf("0x%02x",
                     1*$bit[$i]+2*$bit[$i+1]+4*$bit[$i+2]+8*$bit[$i+3]+
                     16*$bit[$i+4]+32*$bit[$i+5]+64*$bit[$i+6]+128*$bit[$i+7]
                          );
       $i += 8;
       $j++;
    }

    return @hex;
}

sub make_num {
    my($num, $rate) = @_;
    my($type, $j, @tmp, $k, @b, $rot, $l,@c, $my_rate, $m, @str);

    if($CHAR_TYPE < 3){
        $type = $CHAR_TYPE;
    }
    else{
        $type = rand(3)%3;
    }
    for($j=0; $j<$size; $j++){
        @tmp = split(//,$base[$type][$num][$j]);
        for($k=0; $k<@tmp; $k++){
           $b[$j][$k] = $tmp[$k];
        }
    }

    $rot = rand(4)%4*$ROT_FLG;
    for($l=0; $l<$rot; $l++){
        for($j=0; $j<$size; $j++){
            for($k=0; $k<$size; $k++){
               $c[$size-1-$k][$j] = $b[$j][$k];
            }
        }
        for($j=0; $j<$size; $j++){
            for($k=0; $k<$size; $k++){
               $b[$j][$k] = $c[$j][$k];
            }
        }
    }

# height/wide adjust
    if($CHAR_RAND > 1){
        $my_rate = 0;
        while($my_rate < $CHAR_SIZE){
            $my_rate = rand($rate)%$rate+1;
        }
    }
    else{
        $my_rate = $rate;
    }
    @c=();
    for($j=0; $j<$size; $j++){
        for($k=0; $k<$size; $k++){
            for($l=0; $l<$my_rate; $l++){
                for($m=0; $m<$my_rate; $m++){
                    $c[$j*$my_rate+$l][$k*$my_rate+$m] = $b[$j][$k];
                }
            }
        }
    }
    for($l=$size*$my_rate; $l<($size*$rate); $l++){
        for($m=0; $m<$size*$my_rate; $m++){
            $c[$l][$m] = "0";
        }
    }

# matrix2vector
    @str = ();
    for($j=0; $j<($size*$rate); $j++){
        for($k=0; $k<($size*$my_rate); $k++){
            if($c[$j][$k] eq "0"){
                if($NOISE_FLG != 0  &&
                   rand($NOISE_DENSITY)%$NOISE_DENSITY == 0 ){
                     $str[$j] .= rand(2)%2;
                }
                else{
                     $str[$j] .= "0";
                }
            }
            else{
                $str[$j] .= $c[$j][$k];
            }
        }
    }

    return @str;
}

sub make_template {
# global !!!
# D݂ɂ킹āAJX^}CYĂ
# $size ̓rbg}bvTCYAPU͂PUPÜӖ
# $size ύXꍇ́Aɍ킹$base[.][.][.]ύX
# n*n ̃rbg}bvɂ邱ƁBdlł(^^; n ͂W̔{B
# $base[0][.][.] ͐A$base[1][.][.] ͊A$base[2][.][.] ̓[}

    $size = 16;

    $base[0][0][0]   = "0000000000000000";
    $base[0][0][1]   = "0111111111111110";
    $base[0][0][2]   = "0100000000000010";
    $base[0][0][3]   = "0100000000000010";
    $base[0][0][4]   = "0100000000000010";
    $base[0][0][5]   = "0100000000000010";
    $base[0][0][6]   = "0100000000000010";
    $base[0][0][7]   = "0100000000000010";
    $base[0][0][8]   = "0100000000000010";
    $base[0][0][9]   = "0100000000000010";
    $base[0][0][10]  = "0100000000000010";
    $base[0][0][11]  = "0100000000000010";
    $base[0][0][12]  = "0100000000000010";
    $base[0][0][13]  = "0100000000000010";
    $base[0][0][14]  = "0111111111111110";
    $base[0][0][15]  = "0000000000000000";

    $base[0][1][0]   = "0000000000000000";
    $base[0][1][1]   = "0000111110000000";
    $base[0][1][2]   = "0000000010000000";
    $base[0][1][3]   = "0000000010000000";
    $base[0][1][4]   = "0000000010000000";
    $base[0][1][5]   = "0000000010000000";
    $base[0][1][6]   = "0000000010000000";
    $base[0][1][7]   = "0000000010000000";
    $base[0][1][8]   = "0000000010000000";
    $base[0][1][9]   = "0000000010000000";
    $base[0][1][10]  = "0000000010000000";
    $base[0][1][11]  = "0000000010000000";
    $base[0][1][12]  = "0000000010000000";
    $base[0][1][13]  = "0000000010000000";
    $base[0][1][14]  = "0011111111111100";
    $base[0][1][15]  = "0000000000000000";

    $base[0][2][0]   = "0000000000000000";
    $base[0][2][1]   = "0011111111111110";
    $base[0][2][2]   = "0000000000000010";
    $base[0][2][3]   = "0000000000000010";
    $base[0][2][4]   = "0000000000000010";
    $base[0][2][5]   = "0000000000000010";
    $base[0][2][6]   = "0000000000000010";
    $base[0][2][7]   = "0111111111111110";
    $base[0][2][8]   = "0100000000000000";
    $base[0][2][9]   = "0100000000000000";
    $base[0][2][10]  = "0100000000000000";
    $base[0][2][11]  = "0100000000000000";
    $base[0][2][12]  = "0100000000000000";
    $base[0][2][13]  = "0100000000000000";
    $base[0][2][14]  = "0111111111111110";
    $base[0][2][15]  = "0000000000000000";

    $base[0][3][0]   = "0000000000000000";
    $base[0][3][1]   = "0111111111111110";
    $base[0][3][2]   = "0000000000000010";
    $base[0][3][3]   = "0000000000000010";
    $base[0][3][4]   = "0000000000000010";
    $base[0][3][5]   = "0000000000000010";
    $base[0][3][6]   = "0000000000000010";
    $base[0][3][7]   = "0011111111111110";
    $base[0][3][8]   = "0000000000000010";
    $base[0][3][9]   = "0000000000000010";
    $base[0][3][10]  = "0000000000000010";
    $base[0][3][11]  = "0000000000000010";
    $base[0][3][12]  = "0000000000000010";
    $base[0][3][13]  = "0000000000000010";
    $base[0][3][14]  = "0111111111111110";
    $base[0][3][15]  = "0000000000000000";

    $base[0][4][0]   = "0000000000000000";
    $base[0][4][1]   = "0000000000001000";
    $base[0][4][2]   = "0000000000011000";
    $base[0][4][3]   = "0000000000101000";
    $base[0][4][4]   = "0000000001001000";
    $base[0][4][5]   = "0000000010001000";
    $base[0][4][6]   = "0000000100001000";
    $base[0][4][7]   = "0000001000001000";
    $base[0][4][8]   = "0000010000001000";
    $base[0][4][9]   = "0000100000001000";
    $base[0][4][10]  = "0001000000001000";
    $base[0][4][11]  = "0010000000001000";
    $base[0][4][12]  = "0111111111111110";
    $base[0][4][13]  = "0000000000001000";
    $base[0][4][14]  = "0000000000001000";
    $base[0][4][15]  = "0000000000000000";

    $base[0][5][0]   = "0000000000000000";
    $base[0][5][1]   = "0100000000000000";
    $base[0][5][2]   = "0111111111111100";
    $base[0][5][3]   = "0100000000000000";
    $base[0][5][4]   = "0100000000000000";
    $base[0][5][5]   = "0100000000000000";
    $base[0][5][6]   = "0100000000000000";
    $base[0][5][7]   = "0111111111111110";
    $base[0][5][8]   = "0000000000000010";
    $base[0][5][9]   = "0000000000000010";
    $base[0][5][10]  = "0000000000000010";
    $base[0][5][11]  = "0000000000000010";
    $base[0][5][12]  = "0100000000000010";
    $base[0][5][13]  = "0100000000000010";
    $base[0][5][14]  = "0111111111111110";
    $base[0][5][15]  = "0000000000000000";

    $base[0][6][0]   = "0000000000000000";
    $base[0][6][1]   = "0111111111111110";
    $base[0][6][2]   = "0100000000000010";
    $base[0][6][3]   = "0100000000000000";
    $base[0][6][4]   = "0100000000000000";
    $base[0][6][5]   = "0100000000000000";
    $base[0][6][6]   = "0100000000000000";
    $base[0][6][7]   = "0111111111111110";
    $base[0][6][8]   = "0100000000000010";
    $base[0][6][9]   = "0100000000000010";
    $base[0][6][10]  = "0100000000000010";
    $base[0][6][11]  = "0100000000000010";
    $base[0][6][12]  = "0100000000000010";
    $base[0][6][13]  = "0100000000000010";
    $base[0][6][14]  = "0111111111111110";
    $base[0][6][15]  = "0000000000000000";

    $base[0][7][0]   = "0000000000000000";
    $base[0][7][1]   = "0111111111111110";
    $base[0][7][2]   = "0100000000000010";
    $base[0][7][3]   = "0100000000000010";
    $base[0][7][4]   = "0100000000000010";
    $base[0][7][5]   = "0100000000000100";
    $base[0][7][6]   = "0000000000001000";
    $base[0][7][7]   = "0000000000010000";
    $base[0][7][8]   = "0000000000100000";
    $base[0][7][9]   = "0000000000100000";
    $base[0][7][10]  = "0000000000100000";
    $base[0][7][11]  = "0000000000100000";
    $base[0][7][12]  = "0000000000100000";
    $base[0][7][13]  = "0000000000100000";
    $base[0][7][14]  = "0000000000100000";
    $base[0][7][15]  = "0000000000000000";

    $base[0][8][0]   = "0000000000000000";
    $base[0][8][1]   = "0111111111111110";
    $base[0][8][2]   = "0100000000000010";
    $base[0][8][3]   = "0100000000000010";
    $base[0][8][4]   = "0100000000000010";
    $base[0][8][5]   = "0100000000000010";
    $base[0][8][6]   = "0100000000000010";
    $base[0][8][7]   = "0111111111111110";
    $base[0][8][8]   = "0100000000000010";
    $base[0][8][9]   = "0100000000000010";
    $base[0][8][10]  = "0100000000000010";
    $base[0][8][11]  = "0100000000000010";
    $base[0][8][12]  = "0100000000000010";
    $base[0][8][13]  = "0100000000000010";
    $base[0][8][14]  = "0111111111111110";
    $base[0][8][15]  = "0000000000000000";

    $base[0][9][0]   = "0000000000000000";
    $base[0][9][1]   = "0111111111111110";
    $base[0][9][2]   = "0100000000000010";
    $base[0][9][3]   = "0100000000000010";
    $base[0][9][4]   = "0100000000000010";
    $base[0][9][5]   = "0100000000000010";
    $base[0][9][6]   = "0100000000000010";
    $base[0][9][7]   = "0111111111111110";
    $base[0][9][8]   = "0000000000000010";
    $base[0][9][9]   = "0000001000000010";
    $base[0][9][10]  = "0000011100000010";
    $base[0][9][11]  = "0000101010000010";
    $base[0][9][12]  = "0000001000000010";
    $base[0][9][13]  = "0000000000000010";
    $base[0][9][14]  = "0111111111111110";
    $base[0][9][15]  = "0000000000000000";

    $base[1][0][0]   = "0000000000000000";
    $base[1][0][1]   = "0000011111100000";
    $base[1][0][2]   = "0000100000010000";
    $base[1][0][3]   = "0001000000001000";
    $base[1][0][4]   = "0001000000001000";
    $base[1][0][5]   = "0001000000001000";
    $base[1][0][6]   = "0001000000001000";
    $base[1][0][7]   = "0001000000001000";
    $base[1][0][8]   = "0001000000001000";
    $base[1][0][9]   = "0001000000001000";
    $base[1][0][10]  = "0001000000001000";
    $base[1][0][11]  = "0001000000001000";
    $base[1][0][12]  = "0001000000001000";
    $base[1][0][13]  = "0000100000010000";
    $base[1][0][14]  = "0000011111100000";
    $base[1][0][15]  = "0000000000000000";

    $base[1][1][0]   = "0000000000000000";
    $base[1][1][1]   = "0000000000000000";
    $base[1][1][2]   = "0000000000000000";
    $base[1][1][3]   = "0000000000000000";
    $base[1][1][4]   = "0000000000000000";
    $base[1][1][5]   = "0000000000000000";
    $base[1][1][6]   = "0000000000000000";
    $base[1][1][7]   = "0111111111111110";
    $base[1][1][8]   = "0000000000000000";
    $base[1][1][9]   = "0000000000000000";
    $base[1][1][10]  = "0000000000000000";
    $base[1][1][11]  = "0000000000000000";
    $base[1][1][12]  = "0000000000000000";
    $base[1][1][13]  = "0000000000000000";
    $base[1][1][14]  = "0000000000000000";
    $base[1][1][15]  = "0000000000000000";

    $base[1][2][0]   = "0000000000000000";
    $base[1][2][1]   = "0000000000000000";
    $base[1][2][2]   = "0000000000000000";
    $base[1][2][3]   = "0000000000000000";
    $base[1][2][4]   = "0000000000000000";
    $base[1][2][5]   = "0000111111110000";
    $base[1][2][6]   = "0000000000000000";
    $base[1][2][7]   = "0000000000000000";
    $base[1][2][8]   = "0000000000000000";
    $base[1][2][9]   = "0000000000000000";
    $base[1][2][10]  = "0111111111111110";
    $base[1][2][11]  = "0000000000000000";
    $base[1][2][12]  = "0000000000000000";
    $base[1][2][13]  = "0000000000000000";
    $base[1][2][14]  = "0000000000000000";
    $base[1][2][15]  = "0000000000000000";

    $base[1][3][0]   = "0000000000000000";
    $base[1][3][1]   = "0000000000000000";
    $base[1][3][2]   = "0111111111111110";
    $base[1][3][3]   = "0000000000000000";
    $base[1][3][4]   = "0000000000000000";
    $base[1][3][5]   = "0000000000000000";
    $base[1][3][6]   = "0000000000000000";
    $base[1][3][7]   = "0000000000000000";
    $base[1][3][8]   = "0000111111110000";
    $base[1][3][9]   = "0000000000000000";
    $base[1][3][10]  = "0000000000000000";
    $base[1][3][11]  = "0000000000000000";
    $base[1][3][12]  = "0000000000000000";
    $base[1][3][13]  = "0000000000000000";
    $base[1][3][14]  = "0111111111111110";
    $base[1][3][15]  = "0000000000000000";

    $base[1][4][0]   = "0000000000000000";
    $base[1][4][1]   = "0111111111111110";
    $base[1][4][2]   = "0100010000100010";
    $base[1][4][3]   = "0100010000100010";
    $base[1][4][4]   = "0100010000100010";
    $base[1][4][5]   = "0100010000100010";
    $base[1][4][6]   = "0100010000100010";
    $base[1][4][7]   = "0111110000111110";
    $base[1][4][8]   = "0100000000000010";
    $base[1][4][9]   = "0100000000000010";
    $base[1][4][10]  = "0100000000000010";
    $base[1][4][11]  = "0100000000000010";
    $base[1][4][12]  = "0100000000000010";
    $base[1][4][13]  = "0100000000000010";
    $base[1][4][14]  = "0111111111111110";
    $base[1][4][15]  = "0000000000000000";

    $base[1][5][0]   = "0000000000000000";
    $base[1][5][1]   = "0000000000000000";
    $base[1][5][2]   = "0111111111111110";
    $base[1][5][3]   = "0000100000000000";
    $base[1][5][4]   = "0000100000000000";
    $base[1][5][5]   = "0000100000000000";
    $base[1][5][6]   = "0000100000000000";
    $base[1][5][7]   = "0000100000000000";
    $base[1][5][8]   = "0011111111110000";
    $base[1][5][9]   = "0000100000010000";
    $base[1][5][10]  = "0000100000010000";
    $base[1][5][11]  = "0000100000010000";
    $base[1][5][12]  = "0000100000010000";
    $base[1][5][13]  = "0000100000010000";
    $base[1][5][14]  = "0111111111111110";
    $base[1][5][15]  = "0000000000000000";

    $base[1][6][0]   = "0000000000000000";
    $base[1][6][1]   = "0000001000000000";
    $base[1][6][2]   = "0000000100000000";
    $base[1][6][3]   = "0111111111111110";
    $base[1][6][4]   = "0000000000000000";
    $base[1][6][5]   = "0000000000000000";
    $base[1][6][6]   = "0000000000000000";
    $base[1][6][7]   = "0000010000100000";
    $base[1][6][8]   = "0000010000100000";
    $base[1][6][9]   = "0000010000100000";
    $base[1][6][10]  = "0000010000100000";
    $base[1][6][11]  = "0000100000010000";
    $base[1][6][12]  = "0001000000001000";
    $base[1][6][13]  = "0010000000000100";
    $base[1][6][14]  = "0100000000000010";
    $base[1][6][15]  = "0000000000000000";

    $base[1][7][0]   = "0000000000000000";
    $base[1][7][1]   = "0000100000000000";
    $base[1][7][2]   = "0000100000000000";
    $base[1][7][3]   = "0000100000000000";
    $base[1][7][4]   = "0000100000000000";
    $base[1][7][5]   = "0111111111111110";
    $base[1][7][6]   = "0000100000000000";
    $base[1][7][7]   = "0000100000000000";
    $base[1][7][8]   = "0000100000000000";
    $base[1][7][9]   = "0000100000000000";
    $base[1][7][10]  = "0000100000000000";
    $base[1][7][11]  = "0000100000000000";
    $base[1][7][12]  = "0000010000000000";
    $base[1][7][13]  = "0000001000000000";
    $base[1][7][14]  = "0000000111110000";
    $base[1][7][15]  = "0000000000000000";

    $base[1][8][0]   = "0000000000000000";
    $base[1][8][1]   = "0000000000000000";
    $base[1][8][2]   = "0000000000000000";
    $base[1][8][3]   = "0000000000000000";
    $base[1][8][4]   = "0000010000100000";
    $base[1][8][5]   = "0000010000100000";
    $base[1][8][6]   = "0000010000100000";
    $base[1][8][7]   = "0000010000100000";
    $base[1][8][8]   = "0000010000100000";
    $base[1][8][9]   = "0000100000010000";
    $base[1][8][10]  = "0001000000001000";
    $base[1][8][11]  = "0010000000000100";
    $base[1][8][12]  = "0100000000000010";
    $base[1][8][13]  = "0000000000000000";
    $base[1][8][14]  = "0000000000000000";
    $base[1][8][15]  = "0000000000000000";

    $base[1][9][0]   = "0000000000000000";
    $base[1][9][1]   = "0000010000000000";
    $base[1][9][2]   = "0000010000000000";
    $base[1][9][3]   = "0000010000000000";
    $base[1][9][4]   = "0000010000000000";
    $base[1][9][5]   = "0111111111100000";
    $base[1][9][6]   = "0000010000100000";
    $base[1][9][7]   = "0000010000100000";
    $base[1][9][8]   = "0000010000100000";
    $base[1][9][9]   = "0000010000100000";
    $base[1][9][10]  = "0000010000100000";
    $base[1][9][11]  = "0000100000010000";
    $base[1][9][12]  = "0001000000001000";
    $base[1][9][13]  = "0010000000000100";
    $base[1][9][14]  = "0100000000000010";
    $base[1][9][15]  = "0000000000000000";

    $base[2][0][0]   = "0000000000000000";
    $base[2][0][1]   = "0000011111100000";
    $base[2][0][2]   = "0000100000010000";
    $base[2][0][3]   = "0001000000001000";
    $base[2][0][4]   = "0001000000001000";
    $base[2][0][5]   = "0001000000001000";
    $base[2][0][6]   = "0001000000001000";
    $base[2][0][7]   = "0001000000001000";
    $base[2][0][8]   = "0001000000001000";
    $base[2][0][9]   = "0001000000001000";
    $base[2][0][10]  = "0001000000001000";
    $base[2][0][11]  = "0001000000001000";
    $base[2][0][12]  = "0001000000001000";
    $base[2][0][13]  = "0000100000010000";
    $base[2][0][14]  = "0000011111100000";
    $base[2][0][15]  = "0000000000000000";

    $base[2][1][0]   = "0000000000000000";
    $base[2][1][1]   = "0000001111100000";
    $base[2][1][2]   = "0000000010000000";
    $base[2][1][3]   = "0000000010000000";
    $base[2][1][4]   = "0000000010000000";
    $base[2][1][5]   = "0000000010000000";
    $base[2][1][6]   = "0000000010000000";
    $base[2][1][7]   = "0000000010000000";
    $base[2][1][8]   = "0000000010000000";
    $base[2][1][9]   = "0000000010000000";
    $base[2][1][10]  = "0000000010000000";
    $base[2][1][11]  = "0000000010000000";
    $base[2][1][12]  = "0000000010000000";
    $base[2][1][13]  = "0000000010000000";
    $base[2][1][14]  = "0000001111100000";
    $base[2][1][15]  = "0000000000000000";

    $base[2][2][0]   = "0000000000000000";
    $base[2][2][1]   = "0001111111110000";
    $base[2][2][2]   = "0000010001000000";
    $base[2][2][3]   = "0000010001000000";
    $base[2][2][4]   = "0000010001000000";
    $base[2][2][5]   = "0000010001000000";
    $base[2][2][6]   = "0000010001000000";
    $base[2][2][7]   = "0000010001000000";
    $base[2][2][8]   = "0000010001000000";
    $base[2][2][9]   = "0000010001000000";
    $base[2][2][10]  = "0000010001000000";
    $base[2][2][11]  = "0000010001000000";
    $base[2][2][12]  = "0000010001000000";
    $base[2][2][13]  = "0000010001000000";
    $base[2][2][14]  = "0001111111110000";
    $base[2][2][15]  = "0000000000000000";

    $base[2][3][0]   = "0000000000000000";
    $base[2][3][1]   = "0001111111111100";
    $base[2][3][2]   = "0000010010010000";
    $base[2][3][3]   = "0000010010010000";
    $base[2][3][4]   = "0000010010010000";
    $base[2][3][5]   = "0000010010010000";
    $base[2][3][6]   = "0000010010010000";
    $base[2][3][7]   = "0000010010010000";
    $base[2][3][8]   = "0000010010010000";
    $base[2][3][9]   = "0000010010010000";
    $base[2][3][10]  = "0000010010010000";
    $base[2][3][11]  = "0000010010010000";
    $base[2][3][12]  = "0000010010010000";
    $base[2][3][13]  = "0000010010010000";
    $base[2][3][14]  = "0001111111111100";
    $base[2][3][15]  = "0000000000000000";

    $base[2][4][0]   = "0000000000000000";
    $base[2][4][1]   = "0011100100000010";
    $base[2][4][2]   = "0001000100000010";
    $base[2][4][3]   = "0001000100000010";
    $base[2][4][4]   = "0001000100000010";
    $base[2][4][5]   = "0001000100000010";
    $base[2][4][6]   = "0001000100000010";
    $base[2][4][7]   = "0001000100000010";
    $base[2][4][8]   = "0001000100000010";
    $base[2][4][9]   = "0001000100000010";
    $base[2][4][10]  = "0001000100000010";
    $base[2][4][11]  = "0001000100000100";
    $base[2][4][12]  = "0001000010001000";
    $base[2][4][13]  = "0001000001010000";
    $base[2][4][14]  = "0011100000100000";
    $base[2][4][15]  = "0000000000000000";

    $base[2][5][0]   = "0000000000000000";
    $base[2][5][1]   = "0001000000000100";
    $base[2][5][2]   = "0001000000000100";
    $base[2][5][3]   = "0001000000000100";
    $base[2][5][4]   = "0001000000000100";
    $base[2][5][5]   = "0001000000000100";
    $base[2][5][6]   = "0001000000000100";
    $base[2][5][7]   = "0001000000000100";
    $base[2][5][8]   = "0001000000000100";
    $base[2][5][9]   = "0001000000000100";
    $base[2][5][10]  = "0000100000001000";
    $base[2][5][11]  = "0000010000010000";
    $base[2][5][12]  = "0000001000100000";
    $base[2][5][13]  = "0000000101000000";
    $base[2][5][14]  = "0000000010000000";
    $base[2][5][15]  = "0000000000000000";

    $base[2][6][0]   = "0000000000000000";
    $base[2][6][1]   = "0100000010011100";
    $base[2][6][2]   = "0100000010001000";
    $base[2][6][3]   = "0100000010001000";
    $base[2][6][4]   = "0100000010001000";
    $base[2][6][5]   = "0100000010001000";
    $base[2][6][6]   = "0100000010001000";
    $base[2][6][7]   = "0100000010001000";
    $base[2][6][8]   = "0100000010001000";
    $base[2][6][9]   = "0100000010001000";
    $base[2][6][10]  = "0100000010001000";
    $base[2][6][11]  = "0010000010001000";
    $base[2][6][12]  = "0001000100001000";
    $base[2][6][13]  = "0000101000001000";
    $base[2][6][14]  = "0000010000011100";
    $base[2][6][15]  = "0000000000000000";

    $base[2][7][0]   = "0000000000000000";
    $base[2][7][1]   = "0100000101111110";
    $base[2][7][2]   = "0100000100100100";
    $base[2][7][3]   = "0100000100100100";
    $base[2][7][4]   = "0100000100100100";
    $base[2][7][5]   = "0100000100100100";
    $base[2][7][6]   = "0100000100100100";
    $base[2][7][7]   = "0100000100100100";
    $base[2][7][8]   = "0100000100100100";
    $base[2][7][9]   = "0100000100100100";
    $base[2][7][10]  = "0100000100100100";
    $base[2][7][11]  = "0100000100100100";
    $base[2][7][12]  = "0010001000100100";
    $base[2][7][13]  = "0001010000100100";
    $base[2][7][14]  = "0000100001111110";
    $base[2][7][15]  = "0000000000000000";

    $base[2][8][0]   = "0000000000000000";
    $base[2][8][1]   = "0100000101010100";
    $base[2][8][2]   = "0100000101010100";
    $base[2][8][3]   = "0100000101010100";
    $base[2][8][4]   = "0100000101010100";
    $base[2][8][5]   = "0100000101010100";
    $base[2][8][6]   = "0100000101010100";
    $base[2][8][7]   = "0100000101010100";
    $base[2][8][8]   = "0100000101010100";
    $base[2][8][9]   = "0100000101010100";
    $base[2][8][10]  = "0100000101010100";
    $base[2][8][11]  = "0100000101010100";
    $base[2][8][12]  = "0010001001010100";
    $base[2][8][13]  = "0001010001010100";
    $base[2][8][14]  = "0000100001010100";
    $base[2][8][15]  = "0000000000000000";

    $base[2][9][0]   = "0000000000000000";
    $base[2][9][1]   = "0100010101000100";
    $base[2][9][2]   = "0100010101000100";
    $base[2][9][3]   = "0100010101000100";
    $base[2][9][4]   = "0100010101000100";
    $base[2][9][5]   = "0100010101000100";
    $base[2][9][6]   = "0100010101000100";
    $base[2][9][7]   = "0100010101000100";
    $base[2][9][8]   = "0100010101000100";
    $base[2][9][9]   = "0100010101000100";
    $base[2][9][10]  = "0100010101000100";
    $base[2][9][11]  = "0100010101000100";
    $base[2][9][12]  = "0100010101000100";
    $base[2][9][13]  = "0010100100101000";
    $base[2][9][14]  = "0001000100010000";
    $base[2][9][15]  = "0000000000000000";

}
