cleanup of 16colors stuff.

This commit is contained in:
Iam Naughton Phier 2015-02-16 16:04:44 +02:00
parent 332a8e72e6
commit 82deb0dd83
26 changed files with 0 additions and 6257 deletions

View file

@ -1,44 +0,0 @@
class @ImageTextModeADF extends @ImageTextMode
COLOR_INDEX = [ 0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63 ]
constructor: ( options ) ->
super
@header = { version: 0 }
this[k] = v for own k, v of options
parse: ( content ) ->
@header.version = @getByteAt( content, 0 )
@parsePaletteData( content.substr( 1, 192 ) )
@parseFontData( content.substr( 193, 4096 ) )
x = 0
y = 0
@screen[ y ] = []
for i in [ 4289 .. content.length - 2 ] by 2
ch = content.substr( i, 1 )
break if ch == "\x1a"
attr = @getByteAt( content, i + 1 )
@screen[ y ][ x ] = { 'ch': ch, 'attr': attr }
x++
if x == 80
x = 0
y++
@screen[ y ] = []
@screen.pop() if @screen[ y ].length == 0
parsePaletteData: ( data ) ->
colors = []
for i in COLOR_INDEX
j = i * 3
r = @getByteAt( data, j )
r = r << 2 | r >> 4
g = @getByteAt( data, j + 1 )
g = g << 2 | g >> 4
b = @getByteAt( data, j + 2 )
b = b << 2 | b >> 4
colors.push [ r, g, b ]
@palette = new ImageTextModePalette( { colors: colors } )

View file

@ -1,79 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeADF = (function(_super) {
var COLOR_INDEX;
__extends(ImageTextModeADF, _super);
COLOR_INDEX = [0, 1, 2, 3, 4, 5, 20, 7, 56, 57, 58, 59, 60, 61, 62, 63];
function ImageTextModeADF(options) {
var k, v;
ImageTextModeADF.__super__.constructor.apply(this, arguments);
this.header = {
version: 0
};
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeADF.prototype.parse = function(content) {
var attr, ch, i, x, y, _i, _ref;
this.header.version = this.getByteAt(content, 0);
this.parsePaletteData(content.substr(1, 192));
this.parseFontData(content.substr(193, 4096));
x = 0;
y = 0;
this.screen[y] = [];
for (i = _i = 4289, _ref = content.length - 2; _i <= _ref; i = _i += 2) {
ch = content.substr(i, 1);
if (ch === "\x1a") {
break;
}
attr = this.getByteAt(content, i + 1);
this.screen[y][x] = {
'ch': ch,
'attr': attr
};
x++;
if (x === 80) {
x = 0;
y++;
this.screen[y] = [];
}
}
if (this.screen[y].length === 0) {
return this.screen.pop();
}
};
ImageTextModeADF.prototype.parsePaletteData = function(data) {
var b, colors, g, i, j, r, _i, _len;
colors = [];
for (_i = 0, _len = COLOR_INDEX.length; _i < _len; _i++) {
i = COLOR_INDEX[_i];
j = i * 3;
r = this.getByteAt(data, j);
r = r << 2 | r >> 4;
g = this.getByteAt(data, j + 1);
g = g << 2 | g >> 4;
b = this.getByteAt(data, j + 2);
b = b << 2 | b >> 4;
colors.push([r, g, b]);
}
return this.palette = new ImageTextModePalette({
colors: colors
});
};
return ImageTextModeADF;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,179 +0,0 @@
class @ImageTextModeANSI extends @ImageTextMode
constructor: ( options ) ->
super @screen
super @font
@palette = new ImageTextModePaletteANSI
@tabstop = 8
@linewrap = 80
@[k] = v for own k, v of options
ANSI_ESC = String.fromCharCode(0x1b)
ANSI_CSI = ANSI_ESC + '['
ANSI_TEXT_PROP = 'm'
ANSI_RESET = '0'
ANSI_FG = '3'
ANSI_BG = '4'
ANSI_FG_INTENSE = '9'
ANSI_BG_INTENSE = '10'
ANSI_CUR_DOWN = 'B'
ANSI_SEP = ';'
ANSI_RETURN = 'A'
# not going to mess with this for now, as I think it is the 'write' code
# for the actual ansi editor. That would be bad to mess up.
# did redo the for loops to read nicer tho.
write: ->
content = "#{ ANSI_CSI }2J" # initiate document
for y in [0...@screen.length]
content += "\n" if !@screen[y]?
continue if !@screen[y]?
for x in [0...@getWidth()]
pixel = @screen[y][x]
if !pixel?
pixel = { ch: ' ', attr: 7 }
attr = @gen_args(pixel.attr)
if (attr != prevattr)
content += "#{ANSI_CSI}0;#{attr}#{ANSI_TEXT_PROP}"
prevattr = attr
content += if pixel.ch? then pixel.ch else ' '
max_x = x
content += "#{ ANSI_CSI }0m"
@toBinaryArray(content)
gen_args: ( attr ) ->
fg = 30 + ( attr & 7 )
bg = 40 + ( ( attr & 112 ) >> 4)
bl = if attr & 128 then 5 else ''
intense = if attr & 8 then 1 else ''
# um why do we make this attrs variable and not use it?
attrs = a for a in [fg, bg, bl, intense] when a != ''
return [fg, bg, bl, intense].join(";")
parse: ( content ) ->
@screen = []
@state = 0
@x = 0
@y = 0
@save_x = 0
@save_y = 0
@attr = 7
@argbuf = ''
content = content.split( '' )
while ch = content.shift()
if @state is 0
switch ch
when "\x1a" then @state = 3
when "\x1b" then @state = 1
when "\n"
@x = 0
@y++
when "\r" then break
when "\t"
i = ( @x + 1 ) % @tabstop
@putpixel ' ' while i-- > 0
else
@putpixel ch
else if @state is 1
if ch isnt "["
@putpixel "\x1b"
@putpixel "["
@state = 0
else
@state = 2
else if @state is 2
if ch.match( '[A-Za-z]' )
args = ( parseInt( i ) for i in @argbuf.split ';' )
switch ch
when "m"
for arg in args
if arg is 0
@attr = 7
else if arg is 1
@attr |= 8
else if arg is 5
@attr |= 128
else if 30 <= arg <= 37
@attr &= 248
@attr |= ( arg - 30 )
else if 40 <= arg <= 47
@attr &= 143
@attr |= ( arg - 40 ) << 4
when "H", "f"
@y = ( args[ 0 ] or 1 ) - 1
@x = ( args[ 1 ] or 1 ) - 1
@y = 0 if @y < 0
@x = 0 if @x < 0
when "A"
@y -= args[ 0 ] or 1
@y = 0 if @y < 0
when "B"
@y += args[ 0 ] or 1
when "C"
@x += args[ 0 ] or 1
when "D"
@x -= args[ 0 ] or 1
@x = 0 if @x < 0
when "E"
@y += args[ 0 ] or 1
@x = 0
when "F"
@y -= args[ 0 ] or 1
@y = 0 if @y > 0
@x = 0
when "G"
@x = ( args[ 0 ] or 1 ) - 1
when "s"
@save_x = @x
@save_y = @y
when "u"
@x = @save_x
@y = @save_y
when "J"
if args.length is 0 or args[ 0 ] is 0
@screen[ i ] = null for i in [ @y + 1 .. screen.length - 1 ]
@screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ]
else if args[ 0 ] is 1
@screen[ i ] = null for i in [ 0 .. @y - 1 ]
@screen[ @y ][ i ] = null for i in [ 0 .. @x ]
else if args[ 0 ] is 2
@x = 0
@y = 0
@screen = []
when "K"
if args.length is 0 or args[ 0 ] is 0
@screen[ @y ][ i ] = null for i in [ @x .. @screen[ @y ].length - 1 ]
else if args[ 0 ] is 1
@screen[ @y ][ i ] = null for i in [ 0 .. @x ]
else if args[ 0 ] is 2
@screen[ @y ] = null
@argbuf = ''
@state = 0
else
@argbuf += ch
else if @state is 3
break
else
@state = 0
putpixel: ( ch ) ->
@screen[ @y ] = [] if !@screen[ @y ]?
@screen[ @y ][ @x ] = { ch: ch, attr: @attr }
if ++@x >= @linewrap
@x = 0
@y++

View file

@ -1,266 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var ANSI_BG, ANSI_BG_INTENSE, ANSI_CSI, ANSI_CUR_DOWN, ANSI_ESC, ANSI_FG, ANSI_FG_INTENSE, ANSI_RESET, ANSI_RETURN, ANSI_SEP, ANSI_TEXT_PROP;
ANSI_ESC = String.fromCharCode(0x1b);
ANSI_CSI = ANSI_ESC + '[';
ANSI_TEXT_PROP = 'm';
ANSI_RESET = '0';
ANSI_FG = '3';
ANSI_BG = '4';
ANSI_FG_INTENSE = '9';
ANSI_BG_INTENSE = '10';
ANSI_CUR_DOWN = 'B';
ANSI_SEP = ';';
ANSI_RETURN = 'A';
({
write: function() {
var attr, content, max_x, pixel, prevattr, x, y, _i, _j, _ref, _ref1;
content = "" + ANSI_CSI + "2J";
for (y = _i = 0, _ref = this.screen.length; 0 <= _ref ? _i < _ref : _i > _ref; y = 0 <= _ref ? ++_i : --_i) {
if (this.screen[y] == null) {
content += "\n";
}
if (this.screen[y] == null) {
continue;
}
for (x = _j = 0, _ref1 = this.getWidth(); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; x = 0 <= _ref1 ? ++_j : --_j) {
pixel = this.screen[y][x];
if (pixel == null) {
pixel = {
ch: ' ',
attr: 7
};
}
attr = this.gen_args(pixel.attr);
if (attr !== prevattr) {
content += "" + ANSI_CSI + "0;" + attr + ANSI_TEXT_PROP;
prevattr = attr;
}
content += pixel.ch != null ? pixel.ch : ' ';
max_x = x;
}
}
content += "" + ANSI_CSI + "0m";
return this.toBinaryArray(content);
},
gen_args: function(attr) {
var a, attrs, bg, bl, fg, intense, _i, _len, _ref;
fg = 30 + (attr & 7);
bg = 40 + ((attr & 112) >> 4);
bl = attr & 128 ? 5 : '';
intense = attr & 8 ? 1 : '';
_ref = [fg, bg, bl, intense];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
a = _ref[_i];
if (a !== '') {
attrs = a;
}
}
return [fg, bg, bl, intense].join(";");
},
parse: function(content) {
var arg, args, ch, i, _i, _j, _k, _l, _len, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _results;
this.screen = [];
this.state = 0;
this.x = 0;
this.y = 0;
this.save_x = 0;
this.save_y = 0;
this.attr = 7;
this.argbuf = '';
content = content.split('');
_results = [];
while (ch = content.shift()) {
if (this.state === 0) {
switch (ch) {
case "\x1a":
_results.push(this.state = 3);
break;
case "\x1b":
_results.push(this.state = 1);
break;
case "\n":
this.x = 0;
_results.push(this.y++);
break;
case "\r":
break;
case "\t":
i = (this.x + 1) % this.tabstop;
_results.push((function() {
var _results1;
_results1 = [];
while (i-- > 0) {
_results1.push(this.putpixel(' '));
}
return _results1;
}).call(this));
break;
default:
_results.push(this.putpixel(ch));
}
} else if (this.state === 1) {
if (ch !== "[") {
this.putpixel("\x1b");
this.putpixel("[");
_results.push(this.state = 0);
} else {
_results.push(this.state = 2);
}
} else if (this.state === 2) {
if (ch.match('[A-Za-z]')) {
args = (function() {
var _i, _len, _ref, _results1;
_ref = this.argbuf.split(';');
_results1 = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
i = _ref[_i];
_results1.push(parseInt(i));
}
return _results1;
}).call(this);
switch (ch) {
case "m":
for (_i = 0, _len = args.length; _i < _len; _i++) {
arg = args[_i];
if (arg === 0) {
this.attr = 7;
} else if (arg === 1) {
this.attr |= 8;
} else if (arg === 5) {
this.attr |= 128;
} else if ((30 <= arg && arg <= 37)) {
this.attr &= 248;
this.attr |= arg - 30;
} else if ((40 <= arg && arg <= 47)) {
this.attr &= 143;
this.attr |= (arg - 40) << 4;
}
}
break;
case "H":
case "f":
this.y = (args[0] || 1) - 1;
this.x = (args[1] || 1) - 1;
if (this.y < 0) {
this.y = 0;
}
if (this.x < 0) {
this.x = 0;
}
break;
case "A":
this.y -= args[0] || 1;
if (this.y < 0) {
this.y = 0;
}
break;
case "B":
this.y += args[0] || 1;
break;
case "C":
this.x += args[0] || 1;
break;
case "D":
this.x -= args[0] || 1;
if (this.x < 0) {
this.x = 0;
}
break;
case "E":
this.y += args[0] || 1;
this.x = 0;
break;
case "F":
this.y -= args[0] || 1;
if (this.y > 0) {
this.y = 0;
}
this.x = 0;
break;
case "G":
this.x = (args[0] || 1) - 1;
break;
case "s":
this.save_x = this.x;
this.save_y = this.y;
break;
case "u":
this.x = this.save_x;
this.y = this.save_y;
break;
case "J":
if (args.length === 0 || args[0] === 0) {
for (i = _j = _ref = this.y + 1, _ref1 = screen.length - 1; _ref <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = _ref <= _ref1 ? ++_j : --_j) {
this.screen[i] = null;
}
for (i = _k = _ref2 = this.x, _ref3 = screen[this.y].length - 1; _ref2 <= _ref3 ? _k <= _ref3 : _k >= _ref3; i = _ref2 <= _ref3 ? ++_k : --_k) {
this.screen[this.y][i] = null;
}
} else if (args[0] === 1) {
for (i = _l = 0, _ref4 = this.y - 1; 0 <= _ref4 ? _l <= _ref4 : _l >= _ref4; i = 0 <= _ref4 ? ++_l : --_l) {
this.screen[i] = null;
}
for (i = _m = 0, _ref5 = this.x; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {
this.screen[this.y][i] = null;
}
} else if (args[0] === 2) {
this.x = 0;
this.y = 0;
this.screen = [];
}
break;
case "K":
if (args.length === 0 || args[0] === 0) {
for (i = _n = _ref6 = this.x, _ref7 = this.screen[this.y].length - 1; _ref6 <= _ref7 ? _n <= _ref7 : _n >= _ref7; i = _ref6 <= _ref7 ? ++_n : --_n) {
this.screen[this.y][i] = null;
}
} else if (args[0] === 1) {
for (i = _o = 0, _ref8 = this.x; 0 <= _ref8 ? _o <= _ref8 : _o >= _ref8; i = 0 <= _ref8 ? ++_o : --_o) {
this.screen[this.y][i] = null;
}
} else if (args[0] === 2) {
this.screen[this.y] = null;
}
}
this.argbuf = '';
_results.push(this.state = 0);
} else {
_results.push(this.argbuf += ch);
}
} else if (this.state === 3) {
break;
} else {
_results.push(this.state = 0);
}
}
return _results;
},
putpixel: function(ch) {
if (this.screen[this.y] == null) {
this.screen[this.y] = [];
}
this.screen[this.y][this.x] = {
ch: ch,
attr: this.attr
};
if (++this.x >= this.linewrap) {
this.x = 0;
return this.y++;
}
}
});
}).call(this);

View file

@ -1,68 +0,0 @@
class @ImageTextModeAVATAR extends @ImageTextMode
constructor: ( options ) ->
super
@tabstop = 8
@linewrap = 80
this[k] = v for own k, v of options
parse: ( content ) ->
@screen = []
@x = 0
@y = 0
@attr = 3
content = content.split( '' )
while ch = content.shift()
if ch is "\x1a"
break
else if ch is "\n"
@x = 0
@y++
else if ch is "\r"
continue
else if ch is "\t"
i = ( @x + 1 ) % @tabstop
@putpixel ' ' while i-- > 0
else if ch.charCodeAt( 0 ) is 12
@screen = []
@attr = 3
@insert = false
else if ch.charCodeAt( 0 ) is 25
ch = content.shift()
i = content.shift().charCodeAt( 0 )
@putpixel( ch ) while i-- > 0
else if ch.charCodeAt( 0 ) is 22
c = content.shift().charCodeAt( 0 )
switch c
when 1
@attr = content.shift().charCodeAt( 0 ) & 0x7f
when 2
@attr |= 0x80
when 3
@y--
@y = 0 if @y < 0
when 4
@y++
when 5
@x--
@x = 0 if @x < 0
when 6
@x++
when 7
@screen[ @y ][ i ] = null for i in [ @x .. screen[ @y ].length - 1 ]
when 8
@y = content.shift().charCodeAt( 0 ) - 1
@x = content.shift().charCodeAt( 0 ) - 1
@y = 0 if @y < 0
@x = 0 if @x < 0
else
@putpixel ch
putpixel: ( ch ) ->
@screen[ @y ] = [] if !@screen[ @y ]?
@screen[ @y ][ @x ] = { ch: ch, attr: @attr }
if ++@x >= @linewrap
@x = 0
@y++

View file

@ -1,143 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeAVATAR = (function(_super) {
__extends(ImageTextModeAVATAR, _super);
function ImageTextModeAVATAR(options) {
var k, v;
ImageTextModeAVATAR.__super__.constructor.apply(this, arguments);
this.tabstop = 8;
this.linewrap = 80;
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeAVATAR.prototype.parse = function(content) {
var c, ch, i, _results;
this.screen = [];
this.x = 0;
this.y = 0;
this.attr = 3;
content = content.split('');
_results = [];
while (ch = content.shift()) {
if (ch === "\x1a") {
break;
} else if (ch === "\n") {
this.x = 0;
_results.push(this.y++);
} else if (ch === "\r") {
continue;
} else if (ch === "\t") {
i = (this.x + 1) % this.tabstop;
_results.push((function() {
var _results1;
_results1 = [];
while (i-- > 0) {
_results1.push(this.putpixel(' '));
}
return _results1;
}).call(this));
} else if (ch.charCodeAt(0) === 12) {
this.screen = [];
this.attr = 3;
_results.push(this.insert = false);
} else if (ch.charCodeAt(0) === 25) {
ch = content.shift();
i = content.shift().charCodeAt(0);
_results.push((function() {
var _results1;
_results1 = [];
while (i-- > 0) {
_results1.push(this.putpixel(ch));
}
return _results1;
}).call(this));
} else if (ch.charCodeAt(0) === 22) {
c = content.shift().charCodeAt(0);
switch (c) {
case 1:
_results.push(this.attr = content.shift().charCodeAt(0) & 0x7f);
break;
case 2:
_results.push(this.attr |= 0x80);
break;
case 3:
this.y--;
if (this.y < 0) {
_results.push(this.y = 0);
} else {
_results.push(void 0);
}
break;
case 4:
_results.push(this.y++);
break;
case 5:
this.x--;
if (this.x < 0) {
_results.push(this.x = 0);
} else {
_results.push(void 0);
}
break;
case 6:
_results.push(this.x++);
break;
case 7:
_results.push((function() {
var _i, _ref, _ref1, _results1;
_results1 = [];
for (i = _i = _ref = this.x, _ref1 = screen[this.y].length - 1; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = _ref <= _ref1 ? ++_i : --_i) {
_results1.push(this.screen[this.y][i] = null);
}
return _results1;
}).call(this));
break;
case 8:
this.y = content.shift().charCodeAt(0) - 1;
this.x = content.shift().charCodeAt(0) - 1;
if (this.y < 0) {
this.y = 0;
}
if (this.x < 0) {
_results.push(this.x = 0);
} else {
_results.push(void 0);
}
break;
default:
_results.push(void 0);
}
} else {
_results.push(this.putpixel(ch));
}
}
return _results;
};
ImageTextModeAVATAR.prototype.putpixel = function(ch) {
if (this.screen[this.y] == null) {
this.screen[this.y] = [];
}
this.screen[this.y][this.x] = {
ch: ch,
attr: this.attr
};
if (++this.x >= this.linewrap) {
this.x = 0;
return this.y++;
}
};
return ImageTextModeAVATAR;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,25 +0,0 @@
class @ImageTextModeBin extends @ImageTextMode
constructor: ( options ) ->
super
@linewrap = 160
this[k] = v for own k, v of options
parse: ( content ) ->
x = 0
y = 0
@screen[ y ] = []
for i in [ 0 .. content.length - 2 ] by 2
ch = content.substr( i, 1 )
break if ch == "\x1a"
attr = @getByteAt( content, i + 1 )
@screen[ y ][ x ] = { 'ch': ch, 'attr': attr }
x++
if x == @linewrap
x = 0
y++
@screen[ y ] = []
@screen.pop() if @screen[ y ].length == 0

View file

@ -1,51 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeBin = (function(_super) {
__extends(ImageTextModeBin, _super);
function ImageTextModeBin(options) {
var k, v;
ImageTextModeBin.__super__.constructor.apply(this, arguments);
this.linewrap = 160;
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeBin.prototype.parse = function(content) {
var attr, ch, i, x, y, _i, _ref;
x = 0;
y = 0;
this.screen[y] = [];
for (i = _i = 0, _ref = content.length - 2; _i <= _ref; i = _i += 2) {
ch = content.substr(i, 1);
if (ch === "\x1a") {
break;
}
attr = this.getByteAt(content, i + 1);
this.screen[y][x] = {
'ch': ch,
'attr': attr
};
x++;
if (x === this.linewrap) {
x = 0;
y++;
this.screen[y] = [];
}
}
if (this.screen[y].length === 0) {
return this.screen.pop();
}
};
return ImageTextModeBin;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,797 +0,0 @@
class @ImageTextModeFont
constructor: ( options ) ->
@chars = []
@width = 8
@[k] = v for own k, v of options
class @ImageTextModeFont8x16 extends @ImageTextModeFont
constructor: ( options ) ->
super @width
@chars = [
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 ],
[ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00 ],
[ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00 ],
[ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00 ],
[ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00 ],
[ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ],
[ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ],
[ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00 ],
[ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44 ],
[ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ],
[ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ],
[ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
]
@height = 16
@[k] = v for own k, v of options
class @ImageTextModeFont8x8 extends @ImageTextModeFont
constructor: ( options ) ->
super @width
@chars = [
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e ],
[ 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e ],
[ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00 ],
[ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00 ],
[ 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38 ],
[ 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x38 ],
[ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00 ],
[ 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff ],
[ 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00 ],
[ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff ],
[ 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78 ],
[ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18 ],
[ 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0 ],
[ 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0 ],
[ 0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18 ],
[ 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00 ],
[ 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00 ],
[ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18 ],
[ 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00 ],
[ 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00 ],
[ 0x3e, 0x61, 0x3c, 0x66, 0x66, 0x3c, 0x86, 0x7c ],
[ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00 ],
[ 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff ],
[ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00 ],
[ 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00 ],
[ 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00 ],
[ 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00 ],
[ 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00 ],
[ 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00 ],
[ 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00 ],
[ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00 ],
[ 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00 ],
[ 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00 ],
[ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00 ],
[ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00 ],
[ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00 ],
[ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30 ],
[ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 ],
[ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00 ],
[ 0x38, 0x6c, 0xc6, 0xd6, 0xc6, 0x6c, 0x38, 0x00 ],
[ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00 ],
[ 0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x66, 0xfe, 0x00 ],
[ 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00 ],
[ 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00 ],
[ 0xfe, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0x7c, 0x00 ],
[ 0x38, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00 ],
[ 0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00 ],
[ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00 ],
[ 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30 ],
[ 0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00 ],
[ 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00 ],
[ 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00 ],
[ 0x7c, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00 ],
[ 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00 ],
[ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ],
[ 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00 ],
[ 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00 ],
[ 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00 ],
[ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00 ],
[ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00 ],
[ 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3a, 0x00 ],
[ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00 ],
[ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00 ],
[ 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00 ],
[ 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00 ],
[ 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00 ],
[ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00 ],
[ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00 ],
[ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0x7c, 0x0e ],
[ 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00 ],
[ 0x3c, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x3c, 0x00 ],
[ 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ],
[ 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ],
[ 0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00 ],
[ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00 ],
[ 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00 ],
[ 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00 ],
[ 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00 ],
[ 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00 ],
[ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff ],
[ 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0xdc, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc6, 0x7c, 0x00 ],
[ 0x1c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ],
[ 0x3c, 0x66, 0x60, 0xf8, 0x60, 0x60, 0xf0, 0x00 ],
[ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8 ],
[ 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00 ],
[ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c ],
[ 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00 ],
[ 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0x00 ],
[ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x00 ],
[ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0 ],
[ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e ],
[ 0x00, 0x00, 0xdc, 0x76, 0x60, 0x60, 0xf0, 0x00 ],
[ 0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00 ],
[ 0x30, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00 ],
[ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00 ],
[ 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ],
[ 0x00, 0x00, 0x7e, 0x4c, 0x18, 0x32, 0x7e, 0x00 ],
[ 0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 ],
[ 0x70, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x70, 0x00 ],
[ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00 ],
[ 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x0c, 0x78 ],
[ 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0x0c, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ],
[ 0x7c, 0x82, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0xc6, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0x30, 0x18, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7e, 0x0c, 0x38 ],
[ 0x7c, 0x82, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ],
[ 0xc6, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ],
[ 0x30, 0x18, 0x7c, 0xc6, 0xfe, 0xc0, 0x7c, 0x00 ],
[ 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x7c, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ],
[ 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ],
[ 0x38, 0x6c, 0x7c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00 ],
[ 0x18, 0x30, 0xfe, 0xc0, 0xf8, 0xc0, 0xfe, 0x00 ],
[ 0x00, 0x00, 0x7e, 0x18, 0x7e, 0xd8, 0x7e, 0x00 ],
[ 0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00 ],
[ 0x7c, 0x82, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x78, 0x84, 0x00, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0x60, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xfc ],
[ 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x00 ],
[ 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18 ],
[ 0x38, 0x6c, 0x64, 0xf0, 0x60, 0x66, 0xfc, 0x00 ],
[ 0x66, 0x66, 0x3c, 0x7e, 0x18, 0x7e, 0x18, 0x18 ],
[ 0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7 ],
[ 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0xd8, 0x70, 0x00 ],
[ 0x18, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00 ],
[ 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00 ],
[ 0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00 ],
[ 0x18, 0x30, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00 ],
[ 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x00 ],
[ 0x76, 0xdc, 0x00, 0xe6, 0xf6, 0xde, 0xce, 0x00 ],
[ 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00 ],
[ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00 ],
[ 0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3e, 0x00 ],
[ 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x00, 0x00 ],
[ 0x63, 0xe6, 0x6c, 0x7e, 0x33, 0x66, 0xcc, 0x0f ],
[ 0x63, 0xe6, 0x6c, 0x7a, 0x36, 0x6a, 0xdf, 0x06 ],
[ 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x00 ],
[ 0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00 ],
[ 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00 ],
[ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88 ],
[ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa ],
[ 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ],
[ 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36 ],
[ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36 ],
[ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00 ],
[ 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36 ],
[ 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36 ],
[ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18 ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ],
[ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 ],
[ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f ],
[ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00 ],
[ 0x78, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xcc, 0x00 ],
[ 0xfe, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00 ],
[ 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00 ],
[ 0xfe, 0xc6, 0x60, 0x30, 0x60, 0xc6, 0xfe, 0x00 ],
[ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0xc0 ],
[ 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00 ],
[ 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x7e ],
[ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00 ],
[ 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00 ],
[ 0x0e, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x3c, 0x00 ],
[ 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00 ],
[ 0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0 ],
[ 0x1e, 0x30, 0x60, 0x7e, 0x60, 0x30, 0x1e, 0x00 ],
[ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00 ],
[ 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00 ],
[ 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00 ],
[ 0x30, 0x18, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00 ],
[ 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00 ],
[ 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70 ],
[ 0x00, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x00, 0x00 ],
[ 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00 ],
[ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c ],
[ 0x6c, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00 ],
[ 0x78, 0x0c, 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
]
@height = 8
@[k] = v for own k, v of options
class @ImageTextModeFontAmiga extends @ImageTextModeFont
constructor: ( options ) ->
super @width
@chars = [
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x83, 0x83, 0x39, 0x39, 0x21, 0x21, 0x29, 0x29, 0x21, 0x21, 0x3f, 0x3f, 0x87, 0x87, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0xff, 0xff ],
[ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xff, 0xff ],
[ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ],
[ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0x81, 0x81, 0x9f, 0x9f, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x9f, 0x9f, 0x91, 0x91, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xc1, 0xff, 0xff ],
[ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x9c, 0x9c, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x9c, 0x9c, 0xff, 0xff ],
[ 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0x9c, 0x9c, 0x88, 0x88, 0x80, 0x80, 0x94, 0x94, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ],
[ 0x9c, 0x9c, 0x8c, 0x8c, 0x84, 0x84, 0x90, 0x90, 0x98, 0x98, 0x9c, 0x9c, 0x9c, 0x9c, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x91, 0x91, 0xc0, 0xc0, 0xff, 0xff ],
[ 0x83, 0x83, 0x99, 0x99, 0x99, 0x99, 0x83, 0x83, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x8f, 0x8f, 0xc3, 0xc3, 0xf1, 0xf1, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x81, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ],
[ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x81, 0xc3, 0xc3, 0xe7, 0xe7, 0xff, 0xff ],
[ 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x94, 0x94, 0x80, 0x80, 0x88, 0x88, 0x9c, 0x9c, 0xff, 0xff ],
[ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x3c, 0x3c, 0xff, 0xff ],
[ 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ],
[ 0x80, 0x80, 0xf9, 0xf9, 0xf3, 0xf3, 0xe7, 0xe7, 0xcf, 0xcf, 0x9f, 0x9f, 0x80, 0x80, 0xff, 0xff ],
[ 0xc3, 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x3f, 0x3f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe7, 0xe7, 0xf3, 0xf3, 0xf9, 0xf9, 0xfc, 0xfc, 0xff, 0xff ],
[ 0xc3, 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf7, 0xf7, 0xe3, 0xe3, 0xc9, 0xc9, 0x9c, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ],
[ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0xfe, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x3e, 0x3e, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0xac, 0xac, 0xd8, 0xd8, 0x36, 0x36, 0x6a, 0x6a, 0xcc, 0xcc, 0x00, 0x00 ],
[ 0x38, 0x38, 0x6c, 0x6c, 0x68, 0x68, 0x76, 0x76, 0xdc, 0xdc, 0xce, 0xce, 0x7b, 0x7b, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x3c, 0xff, 0xff, 0x3c, 0x3c, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x38, 0x38, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x1c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x1c, 0x1c, 0x3c, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xfe, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x60, 0x60, 0x7c, 0x7c, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x1c, 0x1c, 0x30, 0x30, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x0c, 0x0c, 0x38, 0x38, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30 ],
[ 0x00, 0x00, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x60, 0x60, 0x18, 0x18, 0x06, 0x06, 0x18, 0x18, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 ],
[ 0x7c, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xd6, 0xd6, 0xde, 0xde, 0xc0, 0xc0, 0x78, 0x78, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ],
[ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x00, 0x00 ],
[ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x6e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0xc6, 0xc6, 0xcc, 0xcc, 0xd8, 0xd8, 0xf0, 0xf0, 0xd8, 0xd8, 0xcc, 0xcc, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0xc6, 0xc6, 0xee, 0xee, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0xc6, 0xc6, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ],
[ 0x78, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0xdc, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x70, 0x70, 0x3c, 0x3c, 0x0e, 0x0e, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ],
[ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0xee, 0xee, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00 ],
[ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xfe, 0xfe, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe ],
[ 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x06, 0x06, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x1c, 0x1c, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x3c, 0x3c ],
[ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x78, 0x78 ],
[ 0x60, 0x60, 0x60, 0x60, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xec, 0xec, 0xfe, 0xfe, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x06, 0x06, 0x06, 0x06 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x06, 0x06, 0x7c, 0x7c, 0x00, 0x00 ],
[ 0x30, 0x30, 0x30, 0x30, 0x7c, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x1c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0xfe, 0x6c, 0x6c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x70, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x70, 0x00, 0x00 ],
[ 0x72, 0x72, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0xc3, 0xc3, 0x0f, 0x0f, 0x3c, 0x3c, 0xf0, 0xf0, 0x00, 0x00 ],
[ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xe7, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x99, 0x99, 0x81, 0x81, 0x99, 0x99, 0x99, 0x99, 0xff, 0xff ],
[ 0xe0, 0xe0, 0xc3, 0xc3, 0xc3, 0xc3, 0x90, 0x90, 0x83, 0x83, 0x33, 0x33, 0x30, 0x30, 0xff, 0xff ],
[ 0xe1, 0xe1, 0xcf, 0xcf, 0x9f, 0x9f, 0x9f, 0x9f, 0xcf, 0xcf, 0xe1, 0xe1, 0xf3, 0xf3, 0xe7, 0xe7 ],
[ 0xcf, 0xcf, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0xf3, 0xf3, 0xe7, 0xe7, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0xe7, 0xe7, 0x99, 0x99, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0x99, 0x99, 0xff, 0xff, 0x81, 0x81, 0x9f, 0x9f, 0x87, 0x87, 0x9f, 0x9f, 0x81, 0x81, 0xff, 0xff ],
[ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x99, 0x99, 0xff, 0xff, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x87, 0x87, 0x93, 0x93, 0x99, 0x99, 0x09, 0x09, 0x99, 0x99, 0x93, 0x93, 0x87, 0x87, 0xff, 0xff ],
[ 0x8e, 0x8e, 0x31, 0x31, 0x19, 0x19, 0x09, 0x09, 0x21, 0x21, 0x31, 0x31, 0x39, 0x39, 0xff, 0xff ],
[ 0xcf, 0xcf, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf3, 0xf3, 0xe7, 0xe7, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xe7, 0xe7, 0x99, 0x99, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x8e, 0x8e, 0x71, 0x71, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x3c, 0x3c, 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xff, 0xff, 0x39, 0x39, 0x93, 0x93, 0xc7, 0xc7, 0x93, 0x93, 0x39, 0x39, 0xff, 0xff, 0xff, 0xff ],
[ 0xc0, 0xc0, 0x99, 0x99, 0x91, 0x91, 0x81, 0x81, 0x89, 0x89, 0x99, 0x99, 0x03, 0x03, 0xff, 0xff ],
[ 0xcf, 0xcf, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf3, 0xf3, 0xe7, 0xe7, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xe7, 0xe7, 0xdb, 0xdb, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xc3, 0xff, 0xff ],
[ 0xf9, 0xf9, 0xf7, 0xf7, 0x3c, 0x3c, 0x99, 0x99, 0xc3, 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff ],
[ 0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x39, 0x39, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff ],
[ 0xc3, 0xc3, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x99, 0x99, 0x99, 0x99, 0x93, 0x93, 0x9f, 0x9f ],
[ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80 ],
[ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x3e, 0x6c, 0x6c, 0x3e, 0x3e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x1c, 0x1c, 0x36, 0x36, 0x30, 0x30, 0x78, 0x78, 0x30, 0x30, 0x30, 0x30, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x42, 0x42, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x60, 0x60, 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x81, 0x81, 0x9d, 0x9d, 0xb1, 0xb1, 0x9d, 0x9d, 0x81, 0x81, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x1c, 0x1c, 0x24, 0x24, 0x44, 0x44, 0x3c, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 ],
[ 0x3e, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x7e, 0x7e, 0x81, 0x81, 0xb9, 0xb9, 0xa5, 0xa5, 0xb9, 0xb9, 0xa5, 0xa5, 0x81, 0x81, 0x7e, 0x7e ],
[ 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x78, 0x78, 0x0c, 0x0c, 0x18, 0x18, 0x0c, 0x0c, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x7f, 0x60, 0x60 ],
[ 0x3e, 0x3e, 0x7a, 0x7a, 0x7a, 0x7a, 0x3a, 0x3a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30 ],
[ 0x30, 0x30, 0x70, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ],
[ 0x38, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xcc, 0xcc, 0x66, 0x66, 0x33, 0x33, 0x66, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00 ],
[ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x32, 0x32, 0x66, 0x66, 0xcf, 0xcf, 0x02, 0x02 ],
[ 0x40, 0x40, 0xc6, 0xc6, 0x4c, 0x4c, 0x58, 0x58, 0x3e, 0x3e, 0x62, 0x62, 0xc4, 0xc4, 0x0e, 0x0e ],
[ 0xc0, 0xc0, 0x23, 0x23, 0x66, 0x66, 0x2c, 0x2c, 0xd9, 0xd9, 0x33, 0x33, 0x67, 0x67, 0x01, 0x01 ],
[ 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x1f, 0x1f, 0x3c, 0x3c, 0x3c, 0x3c, 0x6f, 0x6f, 0x7c, 0x7c, 0xcc, 0xcc, 0xcf, 0xcf, 0x00, 0x00 ],
[ 0x1e, 0x1e, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x1e, 0x1e, 0x0c, 0x0c, 0x18, 0x18 ],
[ 0x30, 0x30, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x7e, 0x7e, 0x60, 0x60, 0x78, 0x78, 0x60, 0x60, 0x7e, 0x7e, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x78, 0x78, 0x6c, 0x6c, 0x66, 0x66, 0xf6, 0xf6, 0x66, 0x66, 0x6c, 0x6c, 0x78, 0x78, 0x00, 0x00 ],
[ 0x71, 0x71, 0xce, 0xce, 0xe6, 0xe6, 0xf6, 0xf6, 0xde, 0xde, 0xce, 0xce, 0xc6, 0xc6, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0xc3, 0xc3, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00 ],
[ 0x3f, 0x3f, 0x66, 0x66, 0x6e, 0x6e, 0x7e, 0x7e, 0x76, 0x76, 0x66, 0x66, 0xfc, 0xfc, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x24, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x06, 0x06, 0x08, 0x08, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00 ],
[ 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xc6, 0xc6, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00 ],
[ 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x6c, 0x60, 0x60 ],
[ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x71, 0x71, 0x8e, 0x8e, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x18, 0x18, 0x24, 0x24, 0x3c, 0x3c, 0x06, 0x06, 0x3e, 0x3e, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x1b, 0x1b, 0x7f, 0x7f, 0xd8, 0xd8, 0x77, 0x77, 0x00, 0x00 ],
[ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x3c, 0x3c, 0x18, 0x18 ],
[ 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x7e, 0x7e, 0x60, 0x60, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00 ],
[ 0x60, 0x60, 0xfc, 0xfc, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00 ],
[ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x71, 0x71, 0x8e, 0x8e, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x3c, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x00, 0x00 ],
[ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0x02, 0x02, 0x7c, 0x7c, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x7c, 0x7c, 0x80, 0x80 ],
[ 0x30, 0x30, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x18, 0x18, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x3e, 0x00, 0x00 ],
[ 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ],
[ 0x60, 0x60, 0x60, 0x60, 0x7c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x7c, 0x60, 0x60, 0x60, 0x60 ],
[ 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x30 ]
]
@height = 16
@[k] = v for own k, v of options

View file

@ -1,5 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
}).call(this);

View file

@ -1,55 +0,0 @@
class @ImageTextModeIDF extends @ImageTextMode
constructor: ( options ) ->
super
@header = { x0: 0, x1: 0, y0: 0, y1: 0 }
this[k] = v for own k, v of options
parse: ( content ) ->
headerData = content.substr( 0, 12 )
if headerData.length isnt 12 || !headerData.match( '^\x041.4' )
throw new Error( 'File is not an IDF' )
@header.x0 = @unpackShort( headerData.substr( 4, 2 ) )
@header.y0 = @unpackShort( headerData.substr( 6, 2 ) )
@header.x1 = @unpackShort( headerData.substr( 8, 2 ) )
@header.y1 = @unpackShort( headerData.substr( 10, 2 ) )
eodata = content.length - 48 - 4096
if content.substr( content.length - 128, 5 ) == 'SAUCE'
eodata -= 128
@parseFontData( content.substr( eodata, 4096 ) )
@parsePaletteData( content.substr( eodata + 4096, 48 ) )
y = 0
x = 0
@screen[ y ] = []
offset = 12
while offset < eodata
buffer = content.substr( offset, 2 )
info = @unpackShort( buffer )
offset += 2
len = 1
if info == 1
len = @unpackShort( content.substr( offset, 2 ) ) & 255
offset += 2
buffer = content.substr( offset, 2 )
offset += 2
ch = buffer.substr( 0, 1 )
attr = @getByteAt( buffer, 1 )
for i in [ 1 .. len ]
@screen[ y ][ x ] = { 'ch': ch, 'attr': attr }
x++
if x > @header.x1
x = 0
y++
@screen[ y ] = []
@screen.pop() if @screen[ y ].length == 0

View file

@ -1,80 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeIDF = (function(_super) {
__extends(ImageTextModeIDF, _super);
function ImageTextModeIDF(options) {
var k, v;
ImageTextModeIDF.__super__.constructor.apply(this, arguments);
this.header = {
x0: 0,
x1: 0,
y0: 0,
y1: 0
};
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeIDF.prototype.parse = function(content) {
var attr, buffer, ch, eodata, headerData, i, info, len, offset, x, y, _i;
headerData = content.substr(0, 12);
if (headerData.length !== 12 || !headerData.match('^\x041.4')) {
throw new Error('File is not an IDF');
}
this.header.x0 = this.unpackShort(headerData.substr(4, 2));
this.header.y0 = this.unpackShort(headerData.substr(6, 2));
this.header.x1 = this.unpackShort(headerData.substr(8, 2));
this.header.y1 = this.unpackShort(headerData.substr(10, 2));
eodata = content.length - 48 - 4096;
if (content.substr(content.length - 128, 5) === 'SAUCE') {
eodata -= 128;
}
this.parseFontData(content.substr(eodata, 4096));
this.parsePaletteData(content.substr(eodata + 4096, 48));
y = 0;
x = 0;
this.screen[y] = [];
offset = 12;
while (offset < eodata) {
buffer = content.substr(offset, 2);
info = this.unpackShort(buffer);
offset += 2;
len = 1;
if (info === 1) {
len = this.unpackShort(content.substr(offset, 2)) & 255;
offset += 2;
buffer = content.substr(offset, 2);
offset += 2;
}
ch = buffer.substr(0, 1);
attr = this.getByteAt(buffer, 1);
for (i = _i = 1; 1 <= len ? _i <= len : _i >= len; i = 1 <= len ? ++_i : --_i) {
this.screen[y][x] = {
'ch': ch,
'attr': attr
};
x++;
if (x > this.header.x1) {
x = 0;
y++;
this.screen[y] = [];
}
}
}
if (this.screen[y].length === 0) {
return this.screen.pop();
}
};
return ImageTextModeIDF;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,115 +0,0 @@
class @ImageTextMode
@VERSION = '0.01'
constructor: ( options ) ->
@screen = []
@palette = new ImageTextModePaletteVGA()
@font = new ImageTextModeFont8x16()
@[k] = v for own k, v of options
parseUrl: ( url ) ->
req = new XMLHttpRequest()
req.open 'GET', url, false
req.overrideMimeType 'text/plain; charset=x-user-defined'
req.send null
content = if req.status is 200 or req.status is 0 then req.responseText else ''
@parse content
unpackShort: ( data ) ->
shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 )
if shrt < 0
shrt += 65536
shrt
unpackLong: ( data ) ->
lng = ((( @getByteAt( data, 0 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 3 )
if lng < 0
lng += 4294967296
lng
getByteAt: ( data, offset ) ->
data.charCodeAt( offset ) & 0xFF
# could we replace this with math.max ? Not worth it,called once per view
# we COULD, but we'd do some crap like "Math.max.apply(null,blah) and that's not readable"
getWidth: ->
max = 0
for y in [ 0 .. @screen.length - 1 ]
max = @screen[ y ].length if @screen[ y ]? && @screen[ y ].length > max
max
getHeight: ->
@screen.length
parsePaletteData: ( data ) ->
colors = []
for i in [ 0 .. 45 ] by 3
r = @getByteAt( data, i )
r = r << 2 | r >> 4
g = @getByteAt( data, i + 1 )
g = g << 2 | g >> 4
b = @getByteAt( data, i + 2 )
b = b << 2 | b >> 4
colors.push [ r, g, b ]
@palette = new ImageTextModePalette( colors: colors )
parseFontData: ( data, height = 16 ) ->
chars = []
for i in [ 0 ... data.length / height ]
chr = []
for j in [ 0 ... height ]
chr.push @getByteAt( data, i * height + j )
chars.push chr
@font = new ImageTextModeFont( { chars: chars, height: height } )
# the majority of time is spent in this routine
# list comprehension seems to speed up from 1.8 seconds to 1.29 seconds from first comprehension / cleanup?
renderCanvas: ( canvasElem ) ->
w = @getWidth() * @font.width
h = @getHeight() * @font.height
canvas = document.createElement 'canvas'
canvas.setAttribute 'width', w
canvas.setAttribute 'height', h
ctx = canvas.getContext '2d'
for cy in [ 0 ... @screen.length ]
if @screen[ cy ]?
for cx in [ 0 ... @screen[ cy ].length ]
pixel = @screen[ cy ][ cx ]
curfillstyle = null
if pixel?
if pixel.attr?
fg = pixel.attr & 15
bg = ( pixel.attr & 240 ) >> 4
else
fg = pixel.fg
bg = pixel.bg
px = cx * @font.width
py = cy * @font.height
ctx.fillStyle = @palette.toRgbaString( @palette.colors[ bg ] )
ctx.fillRect px, py, @font.width, @font.height
ctx.fillStyle = @palette.toRgbaString( @palette.colors[ fg ] )
chr = @font.chars[ pixel.ch.charCodeAt( 0 ) & 0xff ]
i = 0
for line in chr
ctx.fillRect px + j, py + i, 1, 1 for j in [ 0 ... @font.width ] when line & (1 << @font.width - 1 - j )
i += 1
canvasElem.setAttribute 'width', w
canvasElem.setAttribute 'height', h
ctx = canvasElem.getContext '2d'
ctx.drawImage canvas, 0, 0
toBinaryArray: (str) ->
buf = new ArrayBuffer(str.length * 2) # 2 bytes for each char
bufView = new Uint8Array(buf)
bufView[i] = str.charCodeAt(i) for i in [0...str.length]
buf

View file

@ -1,143 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty;
this.VERSION = '0.01';
({
constructor: function(options) {
var k, v, _results;
this.screen = [];
this.palette = new ImageTextModePaletteVGA();
this.font = new ImageTextModeFont8x16();
_results = [];
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
_results.push(this[k] = v);
}
return _results;
},
parseUrl: function(url) {
var content, req;
req = new XMLHttpRequest();
req.open('GET', url, false);
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
content = req.status === 200 || req.status === 0 ? req.responseText : '';
return this.parse(content);
},
unpackShort: function(data) {
var shrt;
shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0);
if (shrt < 0) {
shrt += 65536;
}
return shrt;
},
unpackLong: function(data) {
var lng;
lng = (((this.getByteAt(data, 0) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 3);
if (lng < 0) {
lng += 4294967296;
}
return lng;
},
getByteAt: function(data, offset) {
return data.charCodeAt(offset) & 0xFF;
},
getHeight: function() {
return this.screen.length;
},
parsePaletteData: function(data) {
var b, colors, g, i, r, _i;
colors = [];
for (i = _i = 0; _i <= 45; i = _i += 3) {
r = this.getByteAt(data, i);
r = r << 2 | r >> 4;
g = this.getByteAt(data, i + 1);
g = g << 2 | g >> 4;
b = this.getByteAt(data, i + 2);
b = b << 2 | b >> 4;
colors.push([r, g, b]);
}
return this.palette = new ImageTextModePalette({
colors: colors
});
},
parseFontData: function(data, height) {
var chars, chr, i, j, _i, _j, _ref;
if (height == null) {
height = 16;
}
chars = [];
for (i = _i = 0, _ref = data.length / height; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
chr = [];
for (j = _j = 0; 0 <= height ? _j < height : _j > height; j = 0 <= height ? ++_j : --_j) {
chr.push(this.getByteAt(data, i * height + j));
}
chars.push(chr);
}
return this.font = new ImageTextModeFont({
chars: chars,
height: height
});
},
renderCanvas: function(canvasElem) {
var bg, canvas, chr, ctx, curfillstyle, cx, cy, fg, h, i, j, line, pixel, px, py, w, _i, _j, _k, _l, _len, _ref, _ref1, _ref2;
w = this.getWidth() * this.font.width;
h = this.getHeight() * this.font.height;
canvas = document.createElement('canvas');
canvas.setAttribute('width', w);
canvas.setAttribute('height', h);
ctx = canvas.getContext('2d');
for (cy = _i = 0, _ref = this.screen.length; 0 <= _ref ? _i < _ref : _i > _ref; cy = 0 <= _ref ? ++_i : --_i) {
if (this.screen[cy] != null) {
for (cx = _j = 0, _ref1 = this.screen[cy].length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; cx = 0 <= _ref1 ? ++_j : --_j) {
pixel = this.screen[cy][cx];
curfillstyle = null;
if (pixel != null) {
if (pixel.attr != null) {
fg = pixel.attr & 15;
bg = (pixel.attr & 240) >> 4;
} else {
fg = pixel.fg;
bg = pixel.bg;
}
px = cx * this.font.width;
py = cy * this.font.height;
ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[bg]);
ctx.fillRect(px, py, this.font.width, this.font.height);
ctx.fillStyle = this.palette.toRgbaString(this.palette.colors[fg]);
chr = this.font.chars[pixel.ch.charCodeAt(0) & 0xff];
i = 0;
for (_k = 0, _len = chr.length; _k < _len; _k++) {
line = chr[_k];
for (j = _l = 0, _ref2 = this.font.width; 0 <= _ref2 ? _l < _ref2 : _l > _ref2; j = 0 <= _ref2 ? ++_l : --_l) {
if (line & (1 << this.font.width - 1 - j)) {
ctx.fillRect(px + j, py + i, 1, 1);
}
}
i += 1;
}
}
}
}
}
canvasElem.setAttribute('width', w);
canvasElem.setAttribute('height', h);
ctx = canvasElem.getContext('2d');
return ctx.drawImage(canvas, 0, 0);
},
toBinaryArray: function(str) {
var buf, bufView, i, _i, _ref;
buf = new ArrayBuffer(str.length * 2);
bufView = new Uint8Array(buf);
for (i = _i = 0, _ref = str.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
});
}).call(this);

View file

@ -1,62 +0,0 @@
class @ImageTextModePalette
constructor: ( options ) ->
@colors = []
@[k] = v for own k, v of options
toRgbaString: ( color ) ->
return 'rgba(' + color.join( ',' ) + ',1)';
# getting a "cannot call super outside an instance method" error here -
# the resulting code produced does not end up using the super/parent bit
# or at least it doesn't produce bugs in the result if it is not here.
# calling the constructor without super works, and with super the difference is
# ImageTextModePaletteVGA.__super__.constructor.apply(this, arguments);
# is placed inside the constructor. I believe the end result, based on how
# this is used, is identical.
# I am not seeing this pattern (the 'super by itself') being used or referenced
# - instead I am seeting very different patterns using super to reference
# complete items. (referenced meaning "in books, searches, or coffescript
# documentation")
class @ImageTextModePaletteVGA extends @ImageTextModePalette
constructor: (options) ->
@colors = [
[ 0x00, 0x00, 0x00 ],
[ 0x00, 0x00, 0xaa ],
[ 0x00, 0xaa, 0x00 ],
[ 0x00, 0xaa, 0xaa ],
[ 0xaa, 0x00, 0x00 ],
[ 0xaa, 0x00, 0xaa ],
[ 0xaa, 0x55, 0x00 ],
[ 0xaa, 0xaa, 0xaa ],
[ 0x55, 0x55, 0x55 ],
[ 0x55, 0x55, 0xff ],
[ 0x55, 0xff, 0x55 ],
[ 0x55, 0xff, 0xff ],
[ 0xff, 0x55, 0x55 ],
[ 0xff, 0x55, 0xff ],
[ 0xff, 0xff, 0x55 ],
[ 0xff, 0xff, 0xff ]
]
class @ImageTextModePaletteANSI extends @ImageTextModePalette
constructor: (options) ->
@colors = [
[ 0x00, 0x00, 0x00 ],
[ 0xaa, 0x00, 0x00 ],
[ 0x00, 0xaa, 0x00 ],
[ 0xaa, 0x55, 0x00 ],
[ 0x00, 0x00, 0xaa ],
[ 0xaa, 0x00, 0xaa ],
[ 0x00, 0xaa, 0xaa ],
[ 0xaa, 0xaa, 0xaa ],
[ 0x55, 0x55, 0x55 ],
[ 0xff, 0x55, 0x55 ],
[ 0x55, 0xff, 0x55 ],
[ 0xff, 0xff, 0x55 ],
[ 0x55, 0x55, 0xff ],
[ 0xff, 0x55, 0xff ],
[ 0x55, 0xff, 0xff ],
[ 0xff, 0xff, 0xff ]
]

View file

@ -1,22 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty;
({
constructor: function(options) {
var k, v, _results;
this.colors = [];
_results = [];
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
_results.push(this[k] = v);
}
return _results;
},
toRgbaString: function(color) {
return 'rgba(' + color.join(',') + ',1)';
}
});
}).call(this);

View file

@ -1,67 +0,0 @@
class @ImageTextModePCBoard extends @ImageTextMode
constructor: ( options ) ->
super
@tabstop = 8
@linewrap = 80
@codes = { POFF: '', WAIT: '' }
this[k] = v for own k, v of options
parse: ( content ) ->
@screen = []
@state = 0
@x = 0
@y = 0
@attr = 7
for key, val of @codes
code = new RegExp '@' + key + '@', 'g'
content.replace code, val
content = content.split( '' )
while ch = content.shift()
if @state is 0
switch ch
when "\x1a" then @state = 2
when '@' then @state = 1
when "\n"
@x = 0
@y++
when "\r" then break
when "\t"
i = ( @x + 1 ) % @tabstop
@putpixel ' ' while i-- > 0
else
@putpixel ch
else if @state is 1
if ch is 'X'
@attr = ( parseInt( content.shift(), 16 ) << 4 ) + parseInt( content.shift(), 16 )
else if ch + content[ 0..2 ].join( '' ) is 'CLS@'
content.shift() for [ 1 .. 3 ]
@screen = []
else if ch + content[ 0..2 ].join( '' ) is 'POS:'
content.shift() for [ 1 .. 3 ]
@x = content.shift()
@x += content.shift() if content[ 0 ] isnt '@'
@x--
content.shift()
else
@putpixel '@'
@putpixel ch
@state = 0
else if @state is 2
break
else
@state = 0
putpixel: ( ch ) ->
@screen[ @y ] = [] if !@screen[ @y ]?
@screen[ @y ][ @x ] = { ch: ch, attr: @attr }
if ++@x >= @linewrap
@x = 0
@y++

View file

@ -1,119 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModePCBoard = (function(_super) {
__extends(ImageTextModePCBoard, _super);
function ImageTextModePCBoard(options) {
var k, v;
ImageTextModePCBoard.__super__.constructor.apply(this, arguments);
this.tabstop = 8;
this.linewrap = 80;
this.codes = {
POFF: '',
WAIT: ''
};
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModePCBoard.prototype.parse = function(content) {
var ch, code, i, key, val, _i, _j, _ref, _results;
this.screen = [];
this.state = 0;
this.x = 0;
this.y = 0;
this.attr = 7;
_ref = this.codes;
for (key in _ref) {
val = _ref[key];
code = new RegExp('@' + key + '@', 'g');
content.replace(code, val);
}
content = content.split('');
_results = [];
while (ch = content.shift()) {
if (this.state === 0) {
switch (ch) {
case "\x1a":
_results.push(this.state = 2);
break;
case '@':
_results.push(this.state = 1);
break;
case "\n":
this.x = 0;
_results.push(this.y++);
break;
case "\r":
break;
case "\t":
i = (this.x + 1) % this.tabstop;
_results.push((function() {
var _results1;
_results1 = [];
while (i-- > 0) {
_results1.push(this.putpixel(' '));
}
return _results1;
}).call(this));
break;
default:
_results.push(this.putpixel(ch));
}
} else if (this.state === 1) {
if (ch === 'X') {
this.attr = (parseInt(content.shift(), 16) << 4) + parseInt(content.shift(), 16);
} else if (ch + content.slice(0, 3).join('') === 'CLS@') {
for (_i = 1; _i <= 3; _i++) {
content.shift();
}
this.screen = [];
} else if (ch + content.slice(0, 3).join('') === 'POS:') {
for (_j = 1; _j <= 3; _j++) {
content.shift();
}
this.x = content.shift();
if (content[0] !== '@') {
this.x += content.shift();
}
this.x--;
content.shift();
} else {
this.putpixel('@');
this.putpixel(ch);
}
_results.push(this.state = 0);
} else if (this.state === 2) {
break;
} else {
_results.push(this.state = 0);
}
}
return _results;
};
ImageTextModePCBoard.prototype.putpixel = function(ch) {
if (this.screen[this.y] == null) {
this.screen[this.y] = [];
}
this.screen[this.y][this.x] = {
ch: ch,
attr: this.attr
};
if (++this.x >= this.linewrap) {
this.x = 0;
return this.y++;
}
};
return ImageTextModePCBoard;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,56 +0,0 @@
class @ImageTextModeSAUCE
parseUrl: ( url ) ->
req = new XMLHttpRequest()
req.open 'GET', url, false
req.overrideMimeType 'text/plain; charset=x-user-defined'
req.send null
content = if req.status is 200 or req.status is 0 then req.responseText else ''
@parse content
parse: ( content ) ->
sauceMarker = content.length - 128;
return false if content.substr( sauceMarker, 5 ) isnt 'SAUCE'
@id = 'SAUCE'
@version = content.substr( sauceMarker + 5, 2 )
@title = content.substr( sauceMarker + 7, 35 )
@author = content.substr( sauceMarker + 42, 20 )
@group = content.substr( sauceMarker + 62, 20 )
@date = content.substr( sauceMarker + 82, 8 )
@fileSize = @unpackLong content.substr( sauceMarker + 90, 4 )
@dataType = @getByteAt content.substr( sauceMarker + 94, 1 )
@fileType = @getByteAt content.substr( sauceMarker + 95, 1 )
@tinfo1 = @unpackShort content.substr( sauceMarker + 96, 2 )
@tinfo2 = @unpackShort content.substr( sauceMarker + 98, 2 )
@tinfo3 = @unpackShort content.substr( sauceMarker + 100, 2 )
@tinfo4 = @unpackShort content.substr( sauceMarker + 102, 2 )
@commentCount = @getByteAt content.substr( sauceMarker + 104, 1 )
@flags = @getByteAt content.substr( sauceMarker + 105, 1 )
@filler = content.substr( sauceMarker + 106, 22 )
commentMarker = sauceMarker - 5 - @commentCount * 64
if @commentCount > 0 and content.substr( commentMarker, 5 ) is 'COMNT'
commentMarker += 5
@comments = []
i = @commentCount
while i-- > 0
@comments.push content.substr( commentMarker, 64 )
commentMarker += 64
return true
unpackLong: ( data ) ->
lng = ((( @getByteAt( data, 3 ) << 8 ) + @getByteAt( data, 2 ) << 8 ) + @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 )
if lng < 0
lng += 4294967296
return lng;
unpackShort: ( data ) ->
shrt = ( @getByteAt( data, 1 ) << 8 ) + @getByteAt( data, 0 )
if shrt < 0
shrt += 65536
return shrt
getByteAt: ( data, offset ) ->
return data.charCodeAt( offset ) & 0xFF

View file

@ -1,68 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
({
parseUrl: function(url) {
var content, req;
req = new XMLHttpRequest();
req.open('GET', url, false);
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
content = req.status === 200 || req.status === 0 ? req.responseText : '';
return this.parse(content);
},
parse: function(content) {
var commentMarker, i, sauceMarker;
sauceMarker = content.length - 128;
if (content.substr(sauceMarker, 5) !== 'SAUCE') {
return false;
}
this.id = 'SAUCE';
this.version = content.substr(sauceMarker + 5, 2);
this.title = content.substr(sauceMarker + 7, 35);
this.author = content.substr(sauceMarker + 42, 20);
this.group = content.substr(sauceMarker + 62, 20);
this.date = content.substr(sauceMarker + 82, 8);
this.fileSize = this.unpackLong(content.substr(sauceMarker + 90, 4));
this.dataType = this.getByteAt(content.substr(sauceMarker + 94, 1));
this.fileType = this.getByteAt(content.substr(sauceMarker + 95, 1));
this.tinfo1 = this.unpackShort(content.substr(sauceMarker + 96, 2));
this.tinfo2 = this.unpackShort(content.substr(sauceMarker + 98, 2));
this.tinfo3 = this.unpackShort(content.substr(sauceMarker + 100, 2));
this.tinfo4 = this.unpackShort(content.substr(sauceMarker + 102, 2));
this.commentCount = this.getByteAt(content.substr(sauceMarker + 104, 1));
this.flags = this.getByteAt(content.substr(sauceMarker + 105, 1));
this.filler = content.substr(sauceMarker + 106, 22);
commentMarker = sauceMarker - 5 - this.commentCount * 64;
if (this.commentCount > 0 && content.substr(commentMarker, 5) === 'COMNT') {
commentMarker += 5;
this.comments = [];
i = this.commentCount;
while (i-- > 0) {
this.comments.push(content.substr(commentMarker, 64));
commentMarker += 64;
}
}
return true;
},
unpackLong: function(data) {
var lng;
lng = (((this.getByteAt(data, 3) << 8) + this.getByteAt(data, 2) << 8) + this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0);
if (lng < 0) {
lng += 4294967296;
}
return lng;
},
unpackShort: function(data) {
var shrt;
shrt = (this.getByteAt(data, 1) << 8) + this.getByteAt(data, 0);
if (shrt < 0) {
shrt += 65536;
}
return shrt;
},
getByteAt: function(data, offset) {
return data.charCodeAt(offset) & 0xFF;
}
});
}).call(this);

View file

@ -1,70 +0,0 @@
class @ImageTextModeTundra extends @ImageTextMode
constructor: ( options ) ->
super
this[k] = v for own k, v of options
parse: ( content ) ->
colors = [ [ 0, 0, 0 ] ]
palidx = 1
x = 0
y = 0
fg = 0
bg = 0
@screen[ y ] = []
content = content.substr( 8 ).split( '' )
while command = content.shift()
break if command == "\x1a"
command = command.charCodeAt( 0 )
if command is 1
y = @unpackLong( content.splice( 0, 4 ).join( '' ) )
x = @unpackLong( content.splice( 0, 4 ).join( '' ) )
@screen[ y ] = [] if !@screen[ y ]?
continue
ch = null
if command is 2
ch = content.shift()
rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) )
fg = palidx++
colors.push [
( rgb >> 16 ) & 0x000000ff,
( rgb >> 8 ) & 0x000000ff,
rgb & 0x000000ff
]
else if command is 4
ch = content.shift()
rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) )
bg = palidx++
colors.push [
( rgb >> 16 ) & 0x000000ff,
( rgb >> 8 ) & 0x000000ff,
rgb & 0x000000ff
]
else if command is 6
ch = content.shift()
fg = palidx++
bg = palidx++
for [ 0 .. 1 ]
rgb = @unpackLong( content.splice( 0, 4 ).join( '' ) )
colors.push [
( rgb >> 16 ) & 0x000000ff,
( rgb >> 8 ) & 0x000000ff,
rgb & 0x000000ff
]
ch = String.fromCharCode( command ) unless ch?
@screen[ y ][ x ] = { 'ch': ch, 'fg': fg, 'bg': bg }
x++
if x == 80
x = 0
y++
@screen[ y ] = []
@screen.pop() if @screen[ y ].length == 0
@palette = new ImageTextModePalette( { colors: colors } )

View file

@ -1,89 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeTundra = (function(_super) {
__extends(ImageTextModeTundra, _super);
function ImageTextModeTundra(options) {
var k, v;
ImageTextModeTundra.__super__.constructor.apply(this, arguments);
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeTundra.prototype.parse = function(content) {
var bg, ch, colors, command, fg, palidx, rgb, x, y, _i;
colors = [[0, 0, 0]];
palidx = 1;
x = 0;
y = 0;
fg = 0;
bg = 0;
this.screen[y] = [];
content = content.substr(8).split('');
while (command = content.shift()) {
if (command === "\x1a") {
break;
}
command = command.charCodeAt(0);
if (command === 1) {
y = this.unpackLong(content.splice(0, 4).join(''));
x = this.unpackLong(content.splice(0, 4).join(''));
if (this.screen[y] == null) {
this.screen[y] = [];
}
continue;
}
ch = null;
if (command === 2) {
ch = content.shift();
rgb = this.unpackLong(content.splice(0, 4).join(''));
fg = palidx++;
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
} else if (command === 4) {
ch = content.shift();
rgb = this.unpackLong(content.splice(0, 4).join(''));
bg = palidx++;
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
} else if (command === 6) {
ch = content.shift();
fg = palidx++;
bg = palidx++;
for (_i = 0; _i <= 1; _i++) {
rgb = this.unpackLong(content.splice(0, 4).join(''));
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
}
}
if (ch == null) {
ch = String.fromCharCode(command);
}
this.screen[y][x] = {
'ch': ch,
'fg': fg,
'bg': bg
};
x++;
if (x === 80) {
x = 0;
y++;
this.screen[y] = [];
}
}
if (this.screen[y].length === 0) {
this.screen.pop();
}
return this.palette = new ImageTextModePalette({
colors: colors
});
};
return ImageTextModeTundra;
})(this.ImageTextMode);
}).call(this);

View file

@ -1,117 +0,0 @@
class @ImageTextModeXBin extends @ImageTextMode
# Header constants
PALETTE = 1
FONT = 2
COMPRESSED = 4
NON_BLINK = 8
FIVETWELVE_CHARS = 16
# Compression type constants
NO_COMPRESSION = 0
CHARACTER_COMPRESSION = 64
ATTRIBUTE_COMPRESSION = 128
FULL_COMPRESSION = 192
# Compression byte constants
COMPRESSION_TYPE = 192
COMPRESSION_COUNTER = 63
constructor: ( options ) ->
super
@header = { width: 0, height: 0, fontisze: 0, flags: 0 }
this[k] = v for own k, v of options
parse: ( content ) ->
@screen = []
headerData = content.substr( 0, 11 )
if headerData.length isnt 11 || !headerData.match( '^XBIN\x1a' )
throw new Error( 'File is not an XBin' )
@header.width = @unpackShort( headerData.substr( 5, 2 ) )
@header.height = @unpackShort( headerData.substr( 7, 2 ) )
@header.fontsize = @getByteAt( headerData.substr( 9, 1 ) )
@header.flags = @getByteAt( headerData.substr( 10, 1 ) )
offset = 11
if @header.flags & PALETTE
@parsePaletteData( content.substr( offset, 48 ) );
offset += 48
if @header.flags & FONT
fontlength = @header.fontsize
if @header.flags & FIVETWELVE_CHARS
fontlength *= 512
else
fontlength *= 256
@parseFontData( content.substr( offset, fontlength ), @header.fontsize );
offset += fontlength
if @header.flags & COMPRESSED
@_parse_compressed( content.substr( offset ) )
else
@_parse_uncompressed( content.substr( offset ) )
_parse_compressed: ( data ) ->
x = 0
y = 0
@screen[ y ] = []
data = data.split( '' )
while info = data.shift()
info = @getByteAt( info, 0 )
break if info == 26
type = info & COMPRESSION_TYPE
counter = ( info & COMPRESSION_COUNTER ) + 1
ch = null
attr = null
while counter-- > 0
switch type
when NO_COMPRESSION
ch = data.shift()
attr = data.shift()
when CHARACTER_COMPRESSION
ch = data.shift() if !ch?
attr = data.shift()
when ATTRIBUTE_COMPRESSION
attr = data.shift() if !attr?
ch = data.shift()
else
ch = data.shift() if !ch?
attr = data.shift() if !attr?
@screen[ y ][ x ] = { ch: ch, attr: @getByteAt( attr, 0 ) }
x++
if x == @header.width
x = 0
y++
break if y == @header.height
@screen[ y ] = [] if !@screen[ y ]?
_parse_uncompressed: ( data ) ->
x = 0
y = 0
@screen[ y ] = []
for i in [ 0 .. data.length - 2 ] by 2
ch = data.substr( i, 1 )
break if ch == "\x1a"
attr = @getByteAt( data, i + 1 )
@screen[ y ][ x ] = { 'ch': ch, 'attr': attr }
x++
if x == @header.width
x = 0
y++
break if y == @header.height
@screen[ y ] = [] if !@screen[ y ]?
getWidth: ->
return @header.width
getHeight: ->
return @header.height

View file

@ -1,200 +0,0 @@
// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeXBin = (function(_super) {
var ATTRIBUTE_COMPRESSION, CHARACTER_COMPRESSION, COMPRESSED, COMPRESSION_COUNTER, COMPRESSION_TYPE, FIVETWELVE_CHARS, FONT, FULL_COMPRESSION, NON_BLINK, NO_COMPRESSION, PALETTE;
__extends(ImageTextModeXBin, _super);
PALETTE = 1;
FONT = 2;
COMPRESSED = 4;
NON_BLINK = 8;
FIVETWELVE_CHARS = 16;
NO_COMPRESSION = 0;
CHARACTER_COMPRESSION = 64;
ATTRIBUTE_COMPRESSION = 128;
FULL_COMPRESSION = 192;
COMPRESSION_TYPE = 192;
COMPRESSION_COUNTER = 63;
function ImageTextModeXBin(options) {
var k, v;
ImageTextModeXBin.__super__.constructor.apply(this, arguments);
this.header = {
width: 0,
height: 0,
fontisze: 0,
flags: 0
};
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeXBin.prototype.parse = function(content) {
var fontlength, headerData, offset;
this.screen = [];
headerData = content.substr(0, 11);
if (headerData.length !== 11 || !headerData.match('^XBIN\x1a')) {
throw new Error('File is not an XBin');
}
this.header.width = this.unpackShort(headerData.substr(5, 2));
this.header.height = this.unpackShort(headerData.substr(7, 2));
this.header.fontsize = this.getByteAt(headerData.substr(9, 1));
this.header.flags = this.getByteAt(headerData.substr(10, 1));
offset = 11;
if (this.header.flags & PALETTE) {
this.parsePaletteData(content.substr(offset, 48));
offset += 48;
}
if (this.header.flags & FONT) {
fontlength = this.header.fontsize;
if (this.header.flags & FIVETWELVE_CHARS) {
fontlength *= 512;
} else {
fontlength *= 256;
}
this.parseFontData(content.substr(offset, fontlength), this.header.fontsize);
offset += fontlength;
}
if (this.header.flags & COMPRESSED) {
return this._parse_compressed(content.substr(offset));
} else {
return this._parse_uncompressed(content.substr(offset));
}
};
ImageTextModeXBin.prototype._parse_compressed = function(data) {
var attr, ch, counter, info, type, x, y, _results;
x = 0;
y = 0;
this.screen[y] = [];
data = data.split('');
_results = [];
while (info = data.shift()) {
info = this.getByteAt(info, 0);
if (info === 26) {
break;
}
type = info & COMPRESSION_TYPE;
counter = (info & COMPRESSION_COUNTER) + 1;
ch = null;
attr = null;
_results.push((function() {
var _results1;
_results1 = [];
while (counter-- > 0) {
switch (type) {
case NO_COMPRESSION:
ch = data.shift();
attr = data.shift();
break;
case CHARACTER_COMPRESSION:
if (ch == null) {
ch = data.shift();
}
attr = data.shift();
break;
case ATTRIBUTE_COMPRESSION:
if (attr == null) {
attr = data.shift();
}
ch = data.shift();
break;
default:
if (ch == null) {
ch = data.shift();
}
if (attr == null) {
attr = data.shift();
}
}
this.screen[y][x] = {
ch: ch,
attr: this.getByteAt(attr, 0)
};
x++;
if (x === this.header.width) {
x = 0;
y++;
if (y === this.header.height) {
break;
}
if (this.screen[y] == null) {
_results1.push(this.screen[y] = []);
} else {
_results1.push(void 0);
}
} else {
_results1.push(void 0);
}
}
return _results1;
}).call(this));
}
return _results;
};
ImageTextModeXBin.prototype._parse_uncompressed = function(data) {
var attr, ch, i, x, y, _i, _ref, _results;
x = 0;
y = 0;
this.screen[y] = [];
_results = [];
for (i = _i = 0, _ref = data.length - 2; _i <= _ref; i = _i += 2) {
ch = data.substr(i, 1);
if (ch === "\x1a") {
break;
}
attr = this.getByteAt(data, i + 1);
this.screen[y][x] = {
'ch': ch,
'attr': attr
};
x++;
if (x === this.header.width) {
x = 0;
y++;
if (y === this.header.height) {
break;
}
if (this.screen[y] == null) {
_results.push(this.screen[y] = []);
} else {
_results.push(void 0);
}
} else {
_results.push(void 0);
}
}
return _results;
};
ImageTextModeXBin.prototype.getWidth = function() {
return this.header.width;
};
ImageTextModeXBin.prototype.getHeight = function() {
return this.header.height;
};
return ImageTextModeXBin;
})(this.ImageTextMode);
}).call(this);

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long