Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 721 |
gd_wave | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
380.00 | |
0.00% |
0 / 721 |
execute | |
0.00% |
0 / 1 |
210.00 | |
0.00% |
0 / 144 |
|||
wave_height | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 5 |
|||
grid_height | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 3 |
|||
captcha_bitmaps | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 569 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\captcha; | |
/** | |
* Wave3D CAPTCHA | |
*/ | |
class gd_wave | |
{ | |
var $width = 360; | |
var $height = 96; | |
function execute($code, $seed) | |
{ | |
// seed the random generator | |
mt_srand($seed); | |
// set height and width | |
$img_x = $this->width; | |
$img_y = $this->height; | |
// Generate image | |
$img = imagecreatetruecolor($img_x, $img_y); | |
$x_grid = mt_rand(6, 10); | |
$y_grid = mt_rand(6, 10); | |
// Ok, so lets cut to the chase. We could accurately represent this in 3d and | |
// do all the appropriate linear transforms. my questions is... why bother? | |
// The computational overhead is unnecessary when you consider the simple fact: | |
// we're not here to accurately represent a model, but to just show off some random-ish | |
// polygons | |
// Conceive of 3 spaces. | |
// 1) planar-space (discrete "pixel" grid) | |
// 2) 3-space. (planar-space with z/height aspect) | |
// 3) image space (pixels on the screen) | |
// resolution of the planar-space we're embedding the text code in | |
$plane_x = 100; | |
$plane_y = 30; | |
$subdivision_factor = 3; | |
// $box is the 4 points in img_space that correspond to the corners of the plane in 3-space | |
$box = array( | |
'upper_left' => array( | |
'x' => mt_rand(5, 15), | |
'y' => mt_rand(10, 15) | |
), | |
'upper_right' => array( | |
'x' => mt_rand($img_x - 35, $img_x - 19), | |
'y' => mt_rand(10, 17) | |
), | |
'lower_left' => array( | |
'x' => mt_rand($img_x - 45, $img_x - 5), | |
'y' => mt_rand($img_y - 15, $img_y - 0), | |
), | |
); | |
$box['lower_right'] = array( | |
'x' => $box['lower_left']['x'] + $box['upper_left']['x'] - $box['upper_right']['x'], | |
'y' => $box['lower_left']['y'] + $box['upper_left']['y'] - $box['upper_right']['y'], | |
); | |
// TODO | |
$background = imagecolorallocate($img, mt_rand(155, 255), mt_rand(155, 255), mt_rand(155, 255)); | |
imagefill($img, 0, 0, $background); | |
$random = array(); | |
$fontcolors = array(); | |
for ($i = 0; $i < 15; ++$i) | |
{ | |
$random[$i] = imagecolorallocate($img, mt_rand(120, 255), mt_rand(120, 255), mt_rand(120, 255)); | |
} | |
$fontcolors[0] = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); | |
$colors = array(); | |
$minr = mt_rand(20, 30); | |
$ming = mt_rand(20, 30); | |
$minb = mt_rand(20, 30); | |
$maxr = mt_rand(150, 230); | |
$maxg = mt_rand(150, 230); | |
$maxb = mt_rand(150, 230); | |
for ($i = -30; $i <= 30; ++$i) | |
{ | |
$coeff1 = ($i + 12) / 45; | |
$coeff2 = 1 - $coeff1; | |
$red = ($coeff2 * $maxr) + ($coeff1 * $minr); | |
$green = ($coeff2 * $maxg) + ($coeff1 * $ming); | |
$blue = ($coeff2 * $maxb) + ($coeff1 * $minb); | |
$colors[$i] = imagecolorallocate($img, min([255, (int) $red]), min([255, (int) $green]), min([255, (int) $blue])); | |
} | |
// $img_buffer is the last row of 3-space positions (converted to img-space), cached | |
// (using this means we don't need to recalculate all 4 positions for each new polygon, | |
// merely the newest point that we're adding, which is then cached. | |
$img_buffer = array(array(), array()); | |
// In image-space, the x- and y-offset necessary to move one unit in the x-direction in planar-space | |
$dxx = ($box['upper_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_x); | |
$dxy = ($box['upper_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_x); | |
// In image-space, the x- and y-offset necessary to move one unit in the y-direction in planar-space | |
$dyx = ($box['lower_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_y); | |
$dyy = ($box['lower_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_y); | |
// Initial captcha-letter offset in planar-space | |
$plane_offset_x = mt_rand(3, 8); | |
$plane_offset_y = mt_rand( 12, 15); | |
// character map | |
$map = $this->captcha_bitmaps(); | |
// matrix | |
$plane = array(); | |
// for each character, we'll silkscreen it into our boolean pixel plane | |
for ($c = 0, $code_num = strlen($code); $c < $code_num; ++$c) | |
{ | |
$letter = $code[$c]; | |
for ($x = $map['width'] - 1; $x >= 0; --$x) | |
{ | |
for ($y = $map['height'] - 1; $y >= 0; --$y) | |
{ | |
if ($map['data'][$letter][$y][$x]) | |
{ | |
$plane[$y + $plane_offset_y + (($c & 1) ? 1 : -1)][$x + $plane_offset_x] = true; | |
} | |
} | |
} | |
$plane_offset_x += 11; | |
} | |
// calculate our first buffer, we can't actually draw polys with these yet | |
// img_pos_prev == screen x,y location to our immediate left. | |
// img_pos_cur == current screen x,y location | |
// we calculate screen position of our | |
// current cell based on the difference from the previous cell | |
// rather than recalculating from absolute coordinates | |
// What we cache into the $img_buffer contains the raised text coordinates. | |
$img_pos_prev = $img_buffer[0][0] = array($box['upper_left']['x'], $box['upper_left']['y']); | |
$prev_height = $this->wave_height(0, 0, $subdivision_factor); | |
$full_x = $plane_x * $subdivision_factor; | |
$full_y = $plane_y * $subdivision_factor; | |
for ($x = 1; $x <= $full_x; ++$x) | |
{ | |
$cur_height = $this->wave_height($x, 0, $subdivision_factor); | |
$offset = $cur_height - $prev_height; | |
$img_pos_cur = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset); | |
$img_buffer[0][$x] = $img_pos_cur; | |
$img_pos_prev = $img_pos_cur; | |
$prev_height = $cur_height; | |
} | |
for ($y = 1; $y <= $full_y; ++$y) | |
{ | |
// swap buffers | |
$buffer_cur = $y & 1; | |
$buffer_prev = 1 - $buffer_cur; | |
$prev_height = $this->wave_height(0, $y, $subdivision_factor); | |
$offset = $prev_height - $this->wave_height(0, $y - 1, $subdivision_factor); | |
$img_pos_cur = array($img_buffer[$buffer_prev][0][0] + $dyx, min($img_buffer[$buffer_prev][0][1] + $dyy + $offset, $img_y - 1)); | |
// make sure we don't try to write off the page | |
$img_pos_prev = $img_pos_cur; | |
$img_buffer[$buffer_cur][0] = $img_pos_cur; | |
for ($x = 1; $x <= $full_x; ++$x) | |
{ | |
$cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, $x_grid, $y_grid, 1); | |
// height is a z-factor, not a y-factor | |
$offset = $cur_height - $prev_height; | |
$img_pos_cur = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset); | |
// height is float, index it to an int, get closest color | |
$color = $colors[intval($cur_height)]; | |
$img_pos_prev = $img_pos_cur; | |
$prev_height = $cur_height; | |
$y_index_old = intval(($y - 1) / $subdivision_factor); | |
$y_index_new = intval($y / $subdivision_factor); | |
$x_index_old = intval(($x - 1) / $subdivision_factor); | |
$x_index_new = intval($x / $subdivision_factor); | |
if (!empty($plane[$y_index_new][$x_index_new])) | |
{ | |
$img_pos_cur[1] += $this->wave_height($x, $y, $subdivision_factor, 1) - 30 - $cur_height; | |
$color = $colors[20]; | |
} | |
$img_pos_cur[1] = min($img_pos_cur[1], $img_y - 1); | |
$img_buffer[$buffer_cur][$x] = $img_pos_cur; | |
// Smooth the edges as much as possible by having not more than one low<->high traingle per square | |
// Otherwise, just | |
$diag_down = (empty($plane[$y_index_old][$x_index_old]) == empty($plane[$y_index_new][$x_index_new])); | |
$diag_up = (empty($plane[$y_index_old][$x_index_new]) == empty($plane[$y_index_new][$x_index_old])); | |
// natural switching | |
$mode = ($x + $y) & 1; | |
// override if it requires it | |
if ($diag_down != $diag_up) | |
{ | |
$mode = $diag_up; | |
} | |
if ($mode) | |
{ | |
// +-/ / | |
// 1 |/ 2 /| | |
// / /-+ | |
$poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x]); | |
$poly2 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_cur][$x], $img_buffer[$buffer_prev][$x]); | |
} | |
else | |
{ | |
// \ \-+ | |
// 1 |\ 2 \| | |
// +-\ \ | |
$poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_cur][$x]); | |
$poly2 = array_merge($img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x], $img_buffer[$buffer_cur][$x]); | |
} | |
imagefilledpolygon($img, $poly1, 3, $color); | |
imagefilledpolygon($img, $poly2, 3, $color); | |
} | |
} | |
// Output image | |
header('Content-Type: image/png'); | |
header('Cache-control: no-cache, no-store'); | |
//$mtime = explode(' ', microtime()); | |
//$totaltime = $mtime[0] + $mtime[1] - $starttime; | |
//echo $totaltime . "<br />\n"; | |
//echo memory_get_usage() - $tmp; | |
imagepng($img); | |
imagedestroy($img); | |
} | |
function wave_height($x, $y, $factor = 1, $tweak = 0.7) | |
{ | |
// stretch the wave. TODO: pretty it up | |
$x = $x/5 + 180; | |
$y = $y/4; | |
return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak); | |
} | |
function grid_height($x, $y, $x_grid, $y_grid, $factor = 1) | |
{ | |
return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0); | |
} | |
function captcha_bitmaps() | |
{ | |
return array( | |
'width' => 9, | |
'height' => 13, | |
'data' => array( | |
'A' => array( | |
array(0,0,1,1,1,1,0,0,0), | |
array(0,1,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,1,1,1,1,1,1,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'B' => array( | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,1,1,1,1,1,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'C' => array( | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'D' => array( | |
array(1,1,1,1,1,1,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,1,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'E' => array( | |
array(0,0,1,1,1,1,1,1,1), | |
array(0,1,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,1,1,1,1,1,1,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(0,0,1,1,1,1,1,1,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'F' => array( | |
array(0,0,1,1,1,1,1,1,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'G' => array( | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,1,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'H' => array( | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,1,1,1,1,1,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'I' => array( | |
array(0,1,1,1,1,1,1,1,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,1,1,1,1,1,1,1,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'J' => array( | |
array(0,0,0,0,0,0,1,1,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,0,0,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'K' => array( | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,1,0,0,0), | |
array(1,0,0,0,1,0,0,0,0), | |
array(1,0,0,1,0,0,0,0,0), | |
array(1,0,1,0,0,0,0,0,0), | |
array(1,1,0,0,0,0,0,0,0), | |
array(1,0,1,0,0,0,0,0,0), | |
array(1,0,0,1,0,0,0,0,0), | |
array(1,0,0,0,1,0,0,0,0), | |
array(1,0,0,0,0,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'L' => array( | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(0,0,1,1,1,1,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'M' => array( | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,1,1,0,0,0,1,1,0), | |
array(0,1,0,1,0,1,0,1,0), | |
array(0,1,0,0,1,0,0,1,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'N' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,1,0,0,0,0,0,0,1), | |
array(1,0,1,0,0,0,0,0,1), | |
array(1,0,0,1,0,0,0,0,1), | |
array(1,0,0,0,1,0,0,0,1), | |
array(1,0,0,0,0,1,0,0,1), | |
array(1,0,0,0,0,0,1,0,1), | |
array(1,0,0,0,0,0,0,1,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'O' => array( | |
array(0,0,0,1,1,1,0,0,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,0,0,1,1,1,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'P' => array( | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'Q' => array( | |
array(0,0,1,1,1,1,0,0,0), | |
array(0,1,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,1,0,0,1,0), | |
array(1,0,0,0,0,1,0,1,0), | |
array(0,1,0,0,0,0,1,0,0), | |
array(0,0,1,1,1,1,0,1,0), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'R' => array( | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(1,1,1,1,1,1,0,0,0), | |
array(1,0,1,0,0,0,0,0,0), | |
array(1,0,0,1,0,0,0,0,0), | |
array(1,0,0,0,1,0,0,0,0), | |
array(1,0,0,0,0,1,0,0,0), | |
array(1,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'S' => array( | |
array(0,0,1,1,1,1,1,1,1), | |
array(0,1,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(1,1,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'T' => array( | |
array(1,1,1,1,1,1,1,1,1), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'U' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'V' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,0,0,1,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'W' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,1,0,0,0,1), | |
array(1,0,0,1,0,1,0,0,1), | |
array(1,0,1,0,0,0,1,0,1), | |
array(1,1,0,0,0,0,0,1,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'X' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,0,0,1,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,1,0,1,0,0,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'Y' => array( | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,0,0,1,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'Z' => array( | |
array(1,1,1,1,1,1,1,1,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,1,0,0,0,0,0), | |
array(0,0,1,0,0,0,0,0,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,1,1,1,1,1,1,1,1), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'1' => array( | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,1,1,0,0,0,0), | |
array(0,0,1,0,1,0,0,0,0), | |
array(0,1,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,1,1,1,1,1,1,1,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'2' => array( | |
array(0,0,0,1,1,1,0,0,0), | |
array(0,0,1,0,0,0,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,1,0,0,0,0,0), | |
array(0,0,1,0,0,0,0,0,0), | |
array(0,1,1,1,1,1,1,1,1), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'3' => array( | |
array(0,0,0,1,1,1,1,0,0), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,1,1,0,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,0,0,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'4' => array( | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,1,1,0), | |
array(0,0,0,0,0,1,0,1,0), | |
array(0,0,0,0,1,0,0,1,0), | |
array(0,0,0,1,0,0,0,1,0), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,1,1,1,1,1,1,1,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'5' => array( | |
array(1,1,1,1,1,1,1,1,1), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(0,1,0,0,0,0,0,0,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'6' => array( | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,0,0,0,0,0,0), | |
array(1,0,0,1,1,1,1,0,0), | |
array(1,0,1,0,0,0,0,1,0), | |
array(1,1,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'7' => array( | |
array(1,1,1,1,1,1,1,1,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,1,0), | |
array(0,0,0,0,0,0,1,0,0), | |
array(0,0,0,0,0,1,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,1,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'8' => array( | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,1,0,0,0,0,0,1,0), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(1,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,0), | |
array(0,0,1,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
'9' => array( | |
array(0,0,0,1,1,1,1,0,0), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,1,1), | |
array(0,0,1,1,1,1,1,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,0,0,0,0,0,0,0,1), | |
array(0,1,0,0,0,0,0,0,1), | |
array(0,0,1,0,0,0,0,1,0), | |
array(0,0,0,1,1,1,1,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
array(0,0,0,0,0,0,0,0,0), | |
), | |
) | |
); | |
} | |
} |