From 38a400a83fe17fa828f4fa668c6dce0fce3f8dd6 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 27 May 2018 22:03:26 +0200 Subject: [PATCH] added fonts and chars, but more improvement is needed there --- examples/embedded_linux/src/main.rs | 19 +- src/drawing/font.rs | 644 ++++++++++++++++++++++++++++ src/drawing/mod.rs | 43 +- 3 files changed, 697 insertions(+), 9 deletions(-) create mode 100644 src/drawing/font.rs diff --git a/examples/embedded_linux/src/main.rs b/examples/embedded_linux/src/main.rs index 39400e5..c5728ab 100644 --- a/examples/embedded_linux/src/main.rs +++ b/examples/embedded_linux/src/main.rs @@ -127,21 +127,30 @@ fn main() { epd4in2.clear_frame(None).expect("clear frame error"); - let mut small_buffer = [0xff; 128]; + //Test fast updating a bit more + let mut small_buffer = [0x00; 128]; let circle_graphics = Graphics::new(32,32); graphics.draw_circle(&mut small_buffer, 16,16, 10, &Color::Black); epd4in2.set_partial_window(&small_buffer, 16,16, 32, 32, false); - epd4in2.display_frame_quick(); + epd4in2.display_frame(); epd4in2.set_partial_window(&small_buffer, 128,64, 32, 32, false); - epd4in2.display_frame_quick(); + epd4in2.display_frame(); epd4in2.set_partial_window(&small_buffer, 320,24, 32, 32, false); - epd4in2.display_frame_quick(); + epd4in2.display_frame(); epd4in2.set_partial_window(&small_buffer, 160,240, 32, 32, false); - epd4in2.display_frame_quick(); + + + + epd4in2.display_frame(); + + epd4in2.delay_ms(3000); + //pub fn draw_string(&self, buffer: &mut[u8], x0: u16, y0: u16, input: String, color: &Color) { + graphics.draw_string(&mut buffer, 16, 16, &['h', 'e', 'l', 'l', 'o'], &Color::Black); + epd4in2.display_and_transfer_frame(&buffer, None).expect("display and transfer error"); epd4in2.delay_ms(3000); diff --git a/src/drawing/font.rs b/src/drawing/font.rs new file mode 100644 index 0000000..79f8654 --- /dev/null +++ b/src/drawing/font.rs @@ -0,0 +1,644 @@ + + pub(crate) fn to_bitmap(input: char) -> [u8; 8] { + // Populate the array with the data from the character array at the right index + match input { + '!' => [0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00], + '"' => [0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00], + '#' => [0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x00, 0x00], + '$' => [0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x00, 0x00], + '%' => [0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x00, 0x00], + '&' => [0x36, 0x49, 0x55, 0x22, 0x50, 0x00, 0x00, 0x00], + '\'' => [0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00], + '(' => [0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00], + ')' => [0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00], + '*' => [0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00, 0x00, 0x00], + '+' => [0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x00], + ',' => [0x00, 0x50, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00], + '-' => [0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00], + '.' => [0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00], + '/' => [0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00], + '0' => [0x1C, 0x3E, 0x61, 0x41, 0x43, 0x3E, 0x1C, 0x00], + '1' => [0x40, 0x42, 0x7F, 0x7F, 0x40, 0x40, 0x00, 0x00], + '2' => [0x62, 0x73, 0x79, 0x59, 0x5D, 0x4F, 0x46, 0x00], + '3' => [0x20, 0x61, 0x49, 0x4D, 0x4F, 0x7B, 0x31, 0x00], + '4' => [0x18, 0x1C, 0x16, 0x13, 0x7F, 0x7F, 0x10, 0x00], + '5' => [0x27, 0x67, 0x45, 0x45, 0x45, 0x7D, 0x38, 0x00], + '6' => [0x3C, 0x7E, 0x4B, 0x49, 0x49, 0x79, 0x30, 0x00], + '7' => [0x03, 0x03, 0x71, 0x79, 0x0D, 0x07, 0x03, 0x00], + '8' => [0x36, 0x7F, 0x49, 0x49, 0x49, 0x7F, 0x36, 0x00], + '9' => [0x06, 0x4F, 0x49, 0x49, 0x69, 0x3F, 0x1E, 0x00], + ':' => [0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00], + ';' => [0x00, 0x56, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00], + '<' => [0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00], + '=' => [0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00], + '>' => [0x41, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00], + '?' => [0x02, 0x01, 0x51, 0x09, 0x06, 0x00, 0x00, 0x00], + '@' => [0x32, 0x49, 0x79, 0x41, 0x3E, 0x00, 0x00, 0x00], + 'A' => [0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00, 0x00, 0x00], + 'B' => [0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00], + 'C' => [0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00, 0x00], + 'D' => [0x7F, 0x7F, 0x41, 0x41, 0x63, 0x3E, 0x1C, 0x00], + 'E' => [0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x00, 0x00], + 'F' => [0x7F, 0x09, 0x09, 0x01, 0x01, 0x00, 0x00, 0x00], + 'G' => [0x3E, 0x41, 0x41, 0x51, 0x32, 0x00, 0x00, 0x00], + 'H' => [0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x00], + 'I' => [0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00], + 'J' => [0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, 0x00, 0x00], + 'K' => [0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00], + 'L' => [0x7F, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00], + 'M' => [0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00, 0x00, 0x00], + 'N' => [0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x00, 0x00], + 'O' => [0x3E, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x3E, 0x00], + 'P' => [0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00], + 'Q' => [0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x00, 0x00], + 'R' => [0x7F, 0x7F, 0x11, 0x31, 0x79, 0x6F, 0x4E, 0x00], + 'S' => [0x46, 0x49, 0x49, 0x49, 0x31, 0x00, 0x00, 0x00], + 'T' => [0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, 0x00, 0x00], + 'U' => [0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00], + 'V' => [0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x00, 0x00], + 'W' => [0x7F, 0x7F, 0x38, 0x1C, 0x38, 0x7F, 0x7F, 0x00], + 'X' => [0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x00, 0x00], + 'Y' => [0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x00, 0x00], + 'Z' => [0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x00, 0x00], + '[' => [0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00], + '\\' => [0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00], + ']' => [0x41, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00], + '^' => [0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00], + '_' => [0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00], + '`' => [0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00], + 'a' => [0x20, 0x54, 0x54, 0x54, 0x78, 0x00, 0x00, 0x00], + 'b' => [0x7F, 0x48, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00], + 'c' => [0x38, 0x44, 0x44, 0x44, 0x20, 0x00, 0x00, 0x00], + 'd' => [0x38, 0x44, 0x44, 0x48, 0x7F, 0x00, 0x00, 0x00], + 'e' => [0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x00], + 'f' => [0x08, 0x7E, 0x09, 0x01, 0x02, 0x00, 0x00, 0x00], + 'g' => [0x08, 0x14, 0x54, 0x54, 0x3C, 0x00, 0x00, 0x00], + 'h' => [0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00], + 'i' => [0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x00, 0x00], + 'j' => [0x20, 0x40, 0x44, 0x3D, 0x00, 0x00, 0x00, 0x00], + 'k' => [0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00], + 'l' => [0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x00, 0x00], + 'm' => [0x7C, 0x04, 0x18, 0x04, 0x78, 0x00, 0x00, 0x00], + 'n' => [0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x00], + 'o' => [0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00], + 'p' => [0x7C, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00, 0x00], + 'q' => [0x08, 0x14, 0x14, 0x18, 0x7C, 0x00, 0x00, 0x00], + 'r' => [0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00], + 's' => [0x48, 0x54, 0x54, 0x54, 0x20, 0x00, 0x00, 0x00], + 't' => [0x04, 0x3F, 0x44, 0x40, 0x20, 0x00, 0x00, 0x00], + 'u' => [0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, 0x00, 0x00], + 'v' => [0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x00, 0x00], + 'w' => [0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x00, 0x00], + 'x' => [0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00], + 'y' => [0x0C, 0x50, 0x50, 0x50, 0x3C, 0x00, 0x00, 0x00], + 'z' => [0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x00], + '{' => [0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00], + '|' => [0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00], + '}' => [0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x00, 0x00], + _ => [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], + } +} +/* +pub(crate) const VCR_OSD_MONO_Bitmap = [ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, + 0xFC, 0x3F, 0x30, 0x0C, 0x30, 0x0C, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x0F, + 0x0F, 0x00, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0xFF, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, + 0x0F, 0x0F, 0x00, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0xFF, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, + 0xF0, 0x0F, 0x0F, 0x00, 0xF0, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, + 0xFF, 0xFC, 0xFC, 0xF3, 0xFF, 0xCF, 0x3F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, + 0xFC, 0xF0, 0x0F, 0xCF, 0x00, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x0F, 0xFF, + 0xC0, 0xFF, 0xFC, 0x00, 0xF3, 0xF0, 0x0F, 0x3F, 0xF0, 0xF0, 0xFF, 0x0F, + 0x0F, 0xFC, 0xF3, 0xFF, 0xCF, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, + 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x3F, 0x00, 0xF3, + 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xF3, 0xC0, 0xFF, 0x3C, 0x0F, + 0xF3, 0xC3, 0xFF, 0x3C, 0x3F, 0xFF, 0xCF, 0xCF, 0xFC, 0xFC, 0x3F, 0x3F, + 0x03, 0xF3, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x3F, + 0x00, 0x0F, 0xCF, 0xC0, 0xFC, 0xFC, 0x3F, 0x3F, 0xF3, 0xF3, 0xFF, 0xFC, + 0x3C, 0xFF, 0xC3, 0xCF, 0xF0, 0x3C, 0xFF, 0x03, 0xCF, 0xF0, 0x3F, 0xFF, + 0x03, 0xFF, 0xF0, 0x0F, 0xCF, 0x00, 0xFC, 0x03, 0xF0, 0x00, 0x3F, 0x00, + 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, + 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, + 0xF0, 0x0F, 0x3C, 0x00, 0xF3, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x3F, + 0xF0, 0x03, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0xFC, 0xFF, + 0x0F, 0xCF, 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x0F, 0xCF, 0x00, 0xFC, + 0xFC, 0x0F, 0xCF, 0xC0, 0xFC, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0x0F, 0xFC, + 0xF0, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x0C, 0x03, 0xC0, 0xF0, + 0xF0, 0x3C, 0x3C, 0x0F, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, + 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, + 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x03, 0xC0, 0xF0, 0x0F, 0x03, 0xC0, 0x3C, + 0x0F, 0xF0, 0x3C, 0x03, 0xC0, 0xF0, 0x0F, 0x03, 0xC0, 0x3C, 0x0F, 0x03, + 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, + 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0xF0, 0x3C, + 0x3C, 0x0F, 0x0F, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xC3, 0xC3, 0xC3, + 0xC3, 0xF3, 0xCF, 0xF3, 0xCF, 0x3F, 0xFC, 0x3F, 0xFC, 0x0F, 0xF0, 0x0F, + 0xF0, 0x3F, 0xFC, 0x3F, 0xFC, 0xF3, 0xCF, 0xF3, 0xCF, 0xC3, 0xC3, 0xC3, + 0xC3, 0x03, 0xC0, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x3C, + 0x3C, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, + 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, + 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x00, + 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x0F, + 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, + 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0xFC, 0xFF, 0x0F, 0xCF, 0xF3, 0xF0, + 0xFF, 0x3F, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, + 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0x00, 0xF0, + 0x3F, 0x03, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x0F, 0xFF, 0xC0, + 0xFF, 0xFC, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0xFC, 0x00, 0x0F, 0xC0, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, + 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, + 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x0F, 0xCF, 0x00, 0xFC, 0xF0, + 0x3F, 0x0F, 0x03, 0xF0, 0xF0, 0xFC, 0x0F, 0x0F, 0xC0, 0xF0, 0xF0, 0x0F, + 0x0F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, + 0xCF, 0xFF, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, + 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, + 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF0, + 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, + 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, + 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, + 0xFF, 0xFC, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, + 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, + 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, + 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x3C, 0x3C, 0xF0, 0xF0, 0x00, 0x0F, 0x00, + 0x0F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xFC, 0x03, 0xF0, 0x03, + 0xF0, 0x0F, 0xC0, 0x0F, 0xC0, 0x3F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xFC, + 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x3F, + 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x03, 0xF0, 0x03, 0xF0, 0x00, 0xFC, 0x00, + 0xFC, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x3F, + 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x03, 0xF0, 0x03, 0xF0, 0x00, + 0xFC, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x0F, 0x00, 0x0F, 0x00, + 0x3F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xFC, 0x03, 0xF0, 0x03, 0xF0, 0x0F, + 0xC0, 0x0F, 0xC0, 0x3F, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xF0, + 0x00, 0xF0, 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, + 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3C, 0x03, 0xC3, 0xC0, 0x3C, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xC3, 0xCC, 0x3C, 0x3C, 0xC3, 0xCF, 0x3C, 0x3C, + 0xF3, 0xC3, 0xCF, 0x3C, 0x3C, 0xF3, 0xC3, 0xCF, 0x3C, 0x3C, 0xF3, 0xC3, + 0xCF, 0x3C, 0xFC, 0xF3, 0xCF, 0xC3, 0xF3, 0xCC, 0x3F, 0x3C, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0x3C, 0x03, 0xC3, 0xC0, 0x3C, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x0F, + 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0xFC, 0x03, 0xFF, + 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, + 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF0, 0x03, 0xFF, + 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, + 0xCF, 0xFF, 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, + 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, + 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, + 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, + 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, + 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x0F, + 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x3F, 0xFF, 0x03, 0xFF, + 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, + 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, + 0xFF, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0xF0, 0x0F, 0x0F, 0x00, 0xF0, 0xFC, 0x3F, + 0x0F, 0xC3, 0xF0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, + 0x0F, 0xCF, 0x00, 0xFC, 0xF0, 0x3F, 0x0F, 0x03, 0xF0, 0xF0, 0xFC, 0x0F, + 0x0F, 0xC0, 0xF3, 0xF0, 0x0F, 0x3F, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, + 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xF3, 0xF0, 0x0F, 0x3F, 0x00, 0xF0, 0xFC, + 0x0F, 0x0F, 0xC0, 0xF0, 0x3F, 0x0F, 0x03, 0xF0, 0xF0, 0x0F, 0xCF, 0x00, + 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, + 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFC, + 0xFF, 0x3F, 0xCF, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x00, + 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, + 0x0F, 0xF3, 0xF0, 0xFF, 0x3F, 0x0F, 0xF0, 0xFC, 0xFF, 0x0F, 0xCF, 0xF0, + 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x03, 0xFF, + 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, + 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, + 0x00, 0xFF, 0xF0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, + 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, + 0xFF, 0xFC, 0xFF, 0xFF, 0x0F, 0xFF, 0xF0, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xFC, + 0xFF, 0x0F, 0xCF, 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xFC, 0x0F, 0xCF, 0xC0, + 0xFC, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0xFF, + 0xFF, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF0, 0x03, 0xFF, + 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, + 0x0F, 0xFF, 0xF0, 0xF3, 0xF0, 0x0F, 0x3F, 0x00, 0xF0, 0xFC, 0x0F, 0x0F, + 0xC0, 0xF0, 0x3F, 0x0F, 0x03, 0xF0, 0xF0, 0x0F, 0xCF, 0x00, 0xFC, 0xF0, + 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0xFF, 0x00, + 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFC, 0x00, + 0x0F, 0xC0, 0x00, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, + 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, + 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0xF0, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, + 0x00, 0xFF, 0xF0, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x0F, 0xFF, + 0x00, 0xFF, 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, + 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, + 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0x0F, 0x00, 0xF0, 0xF0, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, + 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xFC, + 0x00, 0x3F, 0xC0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0x0F, 0xC3, 0xF0, + 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, + 0xFF, 0xC0, 0x3F, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, + 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x03, + 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, + 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, + 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xC0, + 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x03, + 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, + 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x3F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, 0xFC, 0x00, 0x3F, + 0xC0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x03, 0xF0, 0xFC, 0x03, 0xC0, 0xF0, + 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, 0x00, 0x03, + 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x0F, 0xFC, 0xF0, 0xFF, + 0xCF, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, 0xFF, + 0xC0, 0x3F, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0x0F, 0xFC, 0xF0, 0xFF, 0xCF, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0xFC, 0x0F, 0x0F, 0xC0, 0xF3, 0xFF, 0x0F, 0x3F, + 0xF0, 0xFF, 0xCF, 0xCF, 0xFC, 0xFC, 0xFF, 0x03, 0xFF, 0xF0, 0x3F, 0xFC, + 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, + 0xC0, 0x0F, 0xFF, 0x03, 0xFF, 0xF0, 0x3F, 0xFF, 0xCF, 0xCF, 0xFC, 0xFC, + 0xF3, 0xFF, 0x0F, 0x3F, 0xF0, 0xF0, 0xFC, 0x0F, 0x0F, 0xC0, 0x0F, 0xFF, + 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, + 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, + 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x03, 0xF0, 0xF0, 0x3F, + 0x0F, 0x0F, 0xFC, 0xF0, 0xFF, 0xCF, 0x3F, 0x3F, 0xF3, 0xF3, 0xFF, 0xFC, + 0x0F, 0xFF, 0xC0, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x03, 0xFF, + 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFC, 0x0F, 0xFF, 0xC0, 0xFF, + 0x3F, 0x3F, 0xF3, 0xF3, 0xFF, 0x0F, 0xFC, 0xF0, 0xFF, 0xCF, 0x03, 0xF0, + 0xF0, 0x3F, 0x0F, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, + 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xFF, + 0x00, 0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, + 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, + 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, + 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, + 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, + 0x0F, 0xFC, 0xF0, 0xFF, 0xCF, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x3C, 0x03, 0xF3, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, + 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0xFC, 0x0F, + 0x0F, 0xC0, 0xF3, 0xFF, 0x0F, 0x3F, 0xF0, 0xFF, 0xCF, 0xCF, 0xFC, 0xFC, + 0xFF, 0x03, 0xFF, 0xF0, 0x3F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xC0, + 0xFC, 0x03, 0xF0, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, + 0xFF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x03, 0xF0, 0x3F, 0xFF, 0xCF, + 0xFC, 0xFF, 0x0F, 0xF0, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, + 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x0F, 0xCF, 0x00, 0xFC, 0xF0, 0x3F, + 0x0F, 0x03, 0xF0, 0xF0, 0xFC, 0x0F, 0x0F, 0xC0, 0xF3, 0xF0, 0x0F, 0x3F, + 0x00, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0xFF, 0x3F, 0x0F, 0xF3, 0xF0, 0xFC, + 0x0F, 0xCF, 0xC0, 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x0F, 0x3F, 0xF0, 0xFF, 0xFF, 0xCF, + 0xFF, 0xFC, 0xFC, 0xF3, 0xFF, 0xCF, 0x3F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, + 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, + 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, + 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF3, + 0xFF, 0x0F, 0x3F, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, + 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, + 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, + 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0xF3, 0xFF, 0x0F, 0x3F, 0xF0, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, + 0x03, 0xFF, 0xF0, 0x3F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, + 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xFF, 0x03, 0xFF, 0xF0, 0x3F, + 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xF3, 0xFF, 0x0F, 0x3F, 0xF0, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x00, 0x0F, 0xFC, 0xF0, 0xFF, 0xCF, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0xFC, + 0x0F, 0xFF, 0xC0, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x03, 0xFF, + 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xFC, 0x0F, 0xFF, 0xC0, 0xFF, + 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0x0F, 0xF3, 0xF0, 0xFF, 0x3F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF3, 0xFF, 0xCF, 0x3F, 0xFC, 0xFF, + 0xC3, 0xFF, 0xFC, 0x3F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFC, 0x00, 0x0F, + 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, + 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, + 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, + 0x00, 0xFF, 0xC0, 0x0F, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0x00, + 0x3F, 0xF0, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0xF0, 0x03, 0xFF, 0x00, 0x3F, + 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, 0xFF, + 0x00, 0xFF, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0xC0, 0xFC, 0x03, 0xF0, 0x3F, 0x00, 0xF0, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, + 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, 0xFC, 0x0F, + 0xFF, 0x00, 0xFF, 0xF0, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, + 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, 0x03, + 0xFF, 0xC0, 0x3F, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0xF0, + 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, + 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, + 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0xF0, 0xF0, + 0xFF, 0x0F, 0x0F, 0xFC, 0xF3, 0xFF, 0xCF, 0x3F, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0x0F, 0x0F, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, + 0x03, 0xFF, 0xC0, 0x3F, 0x3F, 0x0F, 0xC3, 0xF0, 0xFC, 0x0F, 0xFF, 0x00, + 0xFF, 0xF0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0xF0, 0x00, 0x0F, 0x00, + 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x3F, 0x0F, + 0xC3, 0xF0, 0xFC, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0xFF, 0x00, + 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, + 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x0F, 0xFF, + 0x00, 0xFF, 0xFC, 0x3F, 0xFF, 0xC3, 0xFF, 0x3F, 0xFC, 0xF3, 0xFF, 0xCF, + 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x03, + 0xF0, 0x00, 0x3F, 0x0F, 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xFF, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x00, + 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x3F, 0x00, + 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x3F, 0x03, + 0xF0, 0x3F, 0x0F, 0xF0, 0xFF, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0xF0, 0xFF, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFF, 0x0F, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x03, 0xF0, 0x3F, + 0x03, 0xF0, 0x3F, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0xFF, 0x0F, 0xF0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, + 0x0F, 0xC0, 0x30, 0xFC, 0x03, 0x3F, 0xF0, 0xF3, 0xFF, 0x0F, 0xF0, 0xFF, + 0xCF, 0x0F, 0xFC, 0xC0, 0x3F, 0x0C, 0x03, 0xF0 ]; + +// uint16_t bitmapOffset; // Pointer into GFXfont->bitmap +// uint8_t width, height; // Bitmap dimensions in pixels +// uint8_t xAdvance; // Distance to advance cursor (x axis) +//int8_t xOffset, yOffset; // Dist from cursor pos to UL corner +pub(crate) const VCR_OSD_MONO_Glyphs = [ //: [u8; 44] = [ + [ 0, 0, 0, 24, 0, 1 ], // 0x20 ' ' + [ 0, 4, 28, 24, 8, -29 ], // 0x21 '!' + [ 14, 16, 8, 24, 4, -29 ], // 0x22 '"' + [ 30, 20, 26, 24, 2, -29 ], // 0x23 '#' + [ 95, 20, 28, 24, 2, -29 ], // 0x24 '$' + [ 165, 20, 28, 24, 2, -29 ], // 0x25 '%' + [ 235, 20, 32, 24, 2, -33 ], // 0x26 '&' + [ 315, 6, 8, 24, 8, -29 ], // 0x27 ''' + [ 321, 10, 32, 24, 6, -33 ], // 0x28 '(' + [ 361, 10, 32, 24, 8, -33 ], // 0x29 ')' + [ 401, 16, 18, 24, 4, -31 ], // 0x2A '*' + [ 437, 20, 20, 24, 2, -25 ], // 0x2B '+' + [ 487, 8, 8, 24, 6, -9 ], // 0x2C ',' + [ 495, 16, 4, 24, 4, -17 ], // 0x2D '-' + [ 503, 4, 4, 24, 8, -5 ], // 0x2E '.' + [ 505, 20, 28, 24, 2, -29 ], // 0x2F '/' + [ 575, 20, 28, 24, 2, -29 ], // 0x30 '0' + [ 645, 12, 28, 24, 6, -29 ], // 0x31 '1' + [ 687, 20, 28, 24, 2, -29 ], // 0x32 '2' + [ 757, 20, 28, 24, 2, -29 ], // 0x33 '3' + [ 827, 20, 28, 24, 2, -29 ], // 0x34 '4' + [ 897, 20, 28, 24, 2, -29 ], // 0x35 '5' + [ 967, 20, 28, 24, 2, -29 ], // 0x36 '6' + [ 1037, 20, 28, 24, 2, -29 ], // 0x37 '7' + [ 1107, 20, 28, 24, 2, -29 ], // 0x38 '8' + [ 1177, 20, 28, 24, 2, -29 ], // 0x39 '9' + [ 1247, 4, 20, 24, 8, -25 ], // 0x3A ':' + [ 1257, 8, 24, 24, 4, -25 ], // 0x3B ';' + [ 1281, 16, 30, 24, 4, -31 ], // 0x3C '<' + [ 1341, 20, 12, 24, 2, -21 ], // 0x3D '=' + [ 1371, 16, 30, 24, 4, -31 ], // 0x3E '>' + [ 1431, 20, 28, 24, 2, -29 ], // 0x3F '?' + [ 1501, 20, 24, 24, 2, -27 ], // 0x40 '@' + [ 1561, 20, 28, 24, 2, -29 ], // 0x41 'A' + [ 1631, 20, 28, 24, 2, -29 ], // 0x42 'B' + [ 1701, 20, 28, 24, 2, -29 ], // 0x43 'C' + [ 1771, 20, 28, 24, 2, -29 ], // 0x44 'D' + [ 1841, 20, 28, 24, 2, -29 ], // 0x45 'E' + [ 1911, 20, 28, 24, 2, -29 ], // 0x46 'F' + [ 1981, 20, 28, 24, 2, -29 ], // 0x47 'G' + [ 2051, 20, 28, 24, 2, -29 ], // 0x48 'H' + [ 2121, 12, 28, 24, 6, -29 ], // 0x49 'I' + [ 2163, 20, 28, 24, 2, -29 ], // 0x4A 'J' + [ 2233, 20, 28, 24, 2, -29 ], // 0x4B 'K' + [ 2303, 20, 28, 24, 2, -29 ], // 0x4C 'L' + [ 2373, 20, 28, 24, 2, -29 ], // 0x4D 'M' + [ 2443, 20, 28, 24, 2, -29 ], // 0x4E 'N' + [ 2513, 20, 28, 24, 2, -29 ], // 0x4F 'O' + [ 2583, 20, 28, 24, 2, -29 ], // 0x50 'P' + [ 2653, 20, 28, 24, 2, -29 ], // 0x51 'Q' + [ 2723, 20, 28, 24, 2, -29 ], // 0x52 'R' + [ 2793, 20, 28, 24, 2, -29 ], // 0x53 'S' + [ 2863, 20, 28, 24, 2, -29 ], // 0x54 'T' + [ 2933, 20, 28, 24, 2, -29 ], // 0x55 'U' + [ 3003, 20, 28, 24, 2, -29 ], // 0x56 'V' + [ 3073, 20, 28, 24, 2, -29 ], // 0x57 'W' + [ 3143, 20, 28, 24, 2, -29 ], // 0x58 'X' + [ 3213, 20, 28, 24, 2, -29 ], // 0x59 'Y' + [ 3283, 20, 28, 24, 2, -29 ], // 0x5A 'Z' + [ 3353, 12, 32, 24, 8, -33 ], // 0x5B '[' + [ 3401, 20, 28, 24, 2, -29 ], // 0x5C '\' + [ 3471, 12, 32, 24, 4, -33 ], // 0x5D ']' + [ 3519, 20, 10, 24, 2, -29 ], // 0x5E '^' + [ 3544, 24, 4, 24, 0, -3 ], // 0x5F '_' + [ 3556, 10, 6, 24, 6, -29 ], // 0x60 '`' + [ 3564, 20, 24, 24, 2, -25 ], // 0x61 'a' + [ 3624, 20, 28, 24, 2, -29 ], // 0x62 'b' + [ 3694, 20, 22, 24, 2, -23 ], // 0x63 'c' + [ 3749, 20, 28, 24, 2, -29 ], // 0x64 'd' + [ 3819, 20, 22, 24, 2, -23 ], // 0x65 'e' + [ 3874, 16, 28, 24, 4, -29 ], // 0x66 'f' + [ 3930, 20, 24, 24, 2, -25 ], // 0x67 'g' + [ 3990, 20, 28, 24, 2, -29 ], // 0x68 'h' + [ 4060, 12, 26, 24, 6, -27 ], // 0x69 'i' + [ 4099, 12, 30, 24, 6, -31 ], // 0x6A 'j' + [ 4144, 20, 28, 24, 2, -29 ], // 0x6B 'k' + [ 4214, 4, 28, 24, 10, -29 ], // 0x6C 'l' + [ 4228, 20, 22, 24, 2, -23 ], // 0x6D 'm' + [ 4283, 20, 22, 24, 2, -23 ], // 0x6E 'n' + [ 4338, 20, 22, 24, 2, -23 ], // 0x6F 'o' + [ 4393, 20, 24, 24, 2, -25 ], // 0x70 'p' + [ 4453, 20, 24, 24, 2, -25 ], // 0x71 'q' + [ 4513, 20, 22, 24, 2, -23 ], // 0x72 'r' + [ 4568, 20, 22, 24, 2, -23 ], // 0x73 's' + [ 4623, 12, 28, 24, 6, -29 ], // 0x74 't' + [ 4665, 20, 22, 24, 2, -23 ], // 0x75 'u' + [ 4720, 20, 22, 24, 2, -23 ], // 0x76 'v' + [ 4775, 20, 22, 24, 2, -23 ], // 0x77 'w' + [ 4830, 20, 22, 24, 2, -23 ], // 0x78 'x' + [ 4885, 20, 24, 24, 2, -25 ], // 0x79 'y' + [ 4945, 20, 22, 24, 2, -23 ], // 0x7A 'z' + [ 5000, 12, 32, 24, 6, -33 ], // 0x7B '[' + [ 5048, 4, 32, 24, 10, -33 ], // 0x7C '|' + [ 5064, 12, 32, 24, 6, -33 ], // 0x7D ']' + [ 5112, 20, 8, 24, 2, -19 ] ]; // 0x7E '~' + + +*/ +/* +pub(crate) const LUT_VCOM0_QUICK: [u8; 44] = [ +0x00, 0x0E, 0x00, 0x00, 0x00, 0x01, +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, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +];*/ \ No newline at end of file diff --git a/src/drawing/mod.rs b/src/drawing/mod.rs index b4ecf70..0e2eb59 100644 --- a/src/drawing/mod.rs +++ b/src/drawing/mod.rs @@ -1,4 +1,5 @@ +mod font; #[derive(Clone, Copy)] @@ -114,14 +115,48 @@ impl Graphics { } } + /// Draw a single Pixel with `color` + /// + /// limited to i16::max images (buffer_size) at the moment + fn draw_byte(&self, buffer: &mut[u8], x: u16, y: u16, filling: u8, color: &Color) { + let idx = match self.rotation { + Displayorientation::Rotate0 | Displayorientation::Rotate180 + => x as usize / 8 + (self.width as usize / 8) * y as usize, + Displayorientation::Rotate90 | Displayorientation::Rotate270 + => y as usize / 8 + (self.width as usize / 8) * x as usize, + }; + + if idx >= buffer.len() { + return; + } + + match color { + Color::Black => { + buffer[idx] = !filling; + }, + Color::White => { + buffer[idx] = filling; + } + } + } + ///TODO: implement! - pub fn draw_char(&self, buffer: &mut[u8]) { - unimplemented!(); + pub fn draw_char(&self, buffer: &mut[u8], x0: u16, y0: u16, input: char, color: &Color) { + let mut counter = 0; + for &elem in font::to_bitmap(input).iter() { + self.draw_byte(buffer, x0, y0 + counter * self.width, elem, color); + counter += 1; + } } ///TODO: implement! - pub fn draw_string(&self, buffer: &mut[u8]) { - unimplemented!(); + /// no autobreak line yet + pub fn draw_string(&self, buffer: &mut[u8], x0: u16, y0: u16, input: &[char], color: &Color) { + let mut counter = 0; + for &input_char in input.iter() { + self.draw_char(buffer, x0 + counter, y0, input_char, color); + counter += 1; + } } // void plotLine(int x0, int y0, int x1, int y1)