├── LICENSE ├── README.md ├── README.txt ├── ST7789v_arduino.cpp ├── ST7789v_arduino.h ├── examples ├── graphicsControllerMods │ └── graphicsControllerMods.ino ├── graphicsIMG │ ├── bitmap.h │ └── graphicsIMG.ino ├── graphicsSDcrad │ └── graphicsSDcrad.ino └── graphicsTEST │ └── graphicsTEST.ino └── library.properties /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Kamran Gasimov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ST7789v-Arduino 2 | 3 | I have faced many challenges to up on running display with the ST7789v driver. There is very poor information about this Driver on the Internet. The most information is about the ST7789 Driver. The main difference between ST7789 and ST7789v is the availability of DC pin. On ST7789v DC signal send as 9's bit of data in SPI communication, but DC is a physical pin on ST7789. 4 | 5 | In this library i collected all the research that i have done about ST7789v driver. 6 | 7 | ### I have made following example sketchs: 8 | * **Graphic test sketch** (graphicsTEST.ino) 9 | * **Load .bmp files directly from SD Card** (graphicsSDcrad.ino) 10 | * **Load Image from MEMORY from .h** (graphicsIMG.ino) 11 | * **Display control modes test** (graphicsControllerMods.ino) 12 | 13 | 14 | ### From my tests: 15 | ![Kamran Gasimov Smart Watch](https://i.ibb.co/TR8fWPp/kamran-gasimov-smart-watch.jpg) 16 | ![Deirvlon OS Mini - Demo](https://user-images.githubusercontent.com/50843190/79635070-b2ded880-817f-11ea-8efb-6513d3524a86.png) 17 | 18 | ### If you want to connect SD Card then Display pin configuration will be like 19 | ``` 20 | #define TFT_DC 8 21 | #define TFT_RST 9 22 | #define TFT_CS 10 // only for displays with CS pin 23 | #define TFT_MOSI 7 // for hardware SPI data pin (all of available pins) 24 | #define TFT_SCLK 8 // for hardware SPI sclk pin (all of available pins) 25 | ``` 26 | 27 | ![GitHub Logo](https://www.mschoeffler.de/wp-content/uploads/2017/02/fritzing_bb.png) 28 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | This is a library for the ST7789 IPS SPI display. 2 | 3 | Also requires the Adafruit_GFX library for Arduino. 4 | -------------------------------------------------------------------------------- /ST7789v_arduino.cpp: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | Originally written by Limor Fried/Ladyada for 5 | Adafruit Industries. 6 | 7 | Modified by Ananev Ilia 8 | Modified by Kamran Gasimov 9 | ****************************************************/ 10 | 11 | #include "ST7789v_arduino.h" 12 | #include 13 | #include "pins_arduino.h" 14 | #include "wiring_private.h" 15 | #include "SPI.h" 16 | // #include 17 | 18 | static const uint8_t PROGMEM 19 | cmd_240x240[] = { // Initialization commands for 7789 screens 20 | 10, // 9 commands in list: 21 | ST7789_SWRESET, ST_CMD_DELAY, // 1: Software reset, no args, w/delay 22 | 150, // 150 ms delay 23 | ST7789_SLPOUT , ST_CMD_DELAY, // 2: Out of sleep mode, no args, w/delay 24 | 255, // 255 = 500 ms delay 25 | ST7789_COLMOD , 1+ST_CMD_DELAY, // 3: Set color mode, 1 arg + delay: 26 | 0x55, // 16-bit color 27 | 10, // 10 ms delay 28 | ST7789_MADCTL , 1, // 4: Memory access ctrl (directions), 1 arg: 29 | 0x00, // Row addr/col addr, bottom to top refresh 30 | ST7789_CASET , 4, // 5: Column addr set, 4 args, no delay: 31 | 0x00, ST7789_240x240_XSTART, // XSTART = 0 32 | (ST7789_TFTWIDTH+ST7789_240x240_XSTART) >> 8, 33 | (ST7789_TFTWIDTH+ST7789_240x240_XSTART) & 0xFF, // XEND = 240 34 | ST7789_RASET , 4, // 6: Row addr set, 4 args, no delay: 35 | 0x00, ST7789_240x240_YSTART, // YSTART = 0 36 | (ST7789_TFTHEIGHT+ST7789_240x240_YSTART) >> 8, 37 | (ST7789_TFTHEIGHT+ST7789_240x240_YSTART) & 0xFF, // YEND = 240 38 | ST7789_INVON , ST_CMD_DELAY, // 7: Inversion ON 39 | 10, 40 | ST7789_NORON , ST_CMD_DELAY, // 8: Normal display on, no args, w/delay 41 | 10, // 10 ms delay 42 | ST7789_DISPON , ST_CMD_DELAY, // 9: Main screen turn on, no args, w/delay 43 | 255 }; // 255 = 500 ms delay 44 | 45 | inline uint16_t swapcolor(uint16_t x) { 46 | return (x << 11) | (x & 0x07E0) | (x >> 11); 47 | } 48 | 49 | // #if defined (SPI_HAS_TRANSACTION) 50 | static SPISettings mySPISettings; 51 | // #elif defined (__AVR__) || defined(CORE_TEENSY) 52 | // static uint8_t SPCRbackup; 53 | // static uint8_t mySPCR; 54 | // #endif 55 | 56 | 57 | #if defined (SPI_HAS_TRANSACTION) 58 | #define SPI_BEGIN_TRANSACTION() if (_hwSPI) SPI.begin(); 59 | #define SPI_END_TRANSACTION() if (_hwSPI) SPI.endTransaction() 60 | #else 61 | #define SPI_BEGIN_TRANSACTION() if (_hwSPI) SPI.begin(); 62 | #define SPI_END_TRANSACTION() if (_hwSPI) SPI.endTransaction() 63 | #endif 64 | 65 | // Constructor when using software SPI. All output pins are configurable. 66 | ST7789v_arduino::ST7789v_arduino(int8_t dc, int8_t rst, int8_t sid, int8_t sclk, int8_t cs) 67 | : Adafruit_GFX(ST7789_TFTWIDTH, ST7789_TFTHEIGHT) 68 | { 69 | _cs = cs; 70 | _dc = dc; 71 | _sid = sid; 72 | _sclk = sclk; 73 | _rst = rst; 74 | _hwSPI = false; 75 | if(dc == -1) _SPI9bit = true; 76 | else _SPI9bit = false; 77 | } 78 | 79 | // Constructor when using hardware SPI. Faster, but must use SPI pins 80 | // specific to each board type (e.g. 11,13 for Uno, 51,52 for Mega, etc.) 81 | ST7789v_arduino::ST7789v_arduino(int8_t dc, int8_t rst, int8_t cs) 82 | : Adafruit_GFX(ST7789_TFTWIDTH, ST7789_TFTHEIGHT) { 83 | _cs = cs; 84 | _dc = dc; 85 | _rst = rst; 86 | _hwSPI = true; 87 | _SPI9bit = false; 88 | _sid = _sclk = -1; 89 | } 90 | 91 | inline void ST7789v_arduino::spiwrite(uint8_t c) 92 | { 93 | 94 | //Serial.println(c, HEX); 95 | 96 | if (_hwSPI) 97 | { 98 | #if defined (SPI_HAS_TRANSACTION) 99 | SPI.transfer(c); 100 | #elif defined (__AVR__) || defined(CORE_TEENSY) 101 | SPCRbackup = SPCR; 102 | SPCR = mySPCR; 103 | SPI.transfer(c); 104 | SPCR = SPCRbackup; 105 | #elif defined (__arm__) 106 | SPI.setClockDivider(21); //4MHz 107 | SPI.setDataMode(SPI_MODE2); 108 | SPI.transfer(c); 109 | #endif 110 | } 111 | else 112 | { 113 | if(_SPI9bit) 114 | { 115 | //9s bit send first 116 | #if defined(USE_FAST_IO) 117 | *clkport &= ~clkpinmask; 118 | if(_DCbit) *dataport |= datapinmask; 119 | else *dataport &= ~datapinmask; 120 | *clkport |= clkpinmask; 121 | #else 122 | digitalWrite(_sclk, LOW); 123 | if(_DCbit) digitalWrite(_sid, HIGH); 124 | else digitalWrite(_sid, LOW); 125 | digitalWrite(_sclk, HIGH); 126 | #endif 127 | 128 | 129 | // Fast SPI bitbang swiped from LPD8806 library 130 | for(uint8_t bit = 0x80; bit; bit >>= 1) { 131 | #if defined(USE_FAST_IO) 132 | *clkport &= ~clkpinmask; 133 | if(c & bit) *dataport |= datapinmask; 134 | else *dataport &= ~datapinmask; 135 | *clkport |= clkpinmask; 136 | #else 137 | digitalWrite(_sclk, LOW); 138 | if(c & bit) digitalWrite(_sid, HIGH); 139 | else digitalWrite(_sid, LOW); 140 | digitalWrite(_sclk, HIGH); 141 | #endif 142 | 143 | } 144 | } 145 | else 146 | { 147 | // Fast SPI bitbang swiped from LPD8806 library 148 | for(uint8_t bit = 0x80; bit; bit >>= 1) { 149 | #if defined(USE_FAST_IO) 150 | *clkport &= ~clkpinmask; 151 | if(c & bit) *dataport |= datapinmask; 152 | else *dataport &= ~datapinmask; 153 | *clkport |= clkpinmask; 154 | #else 155 | digitalWrite(_sclk, LOW); 156 | if(c & bit) digitalWrite(_sid, HIGH); 157 | else digitalWrite(_sid, LOW); 158 | digitalWrite(_sclk, HIGH); 159 | #endif 160 | } 161 | } 162 | } 163 | } 164 | 165 | void ST7789v_arduino::writecommand(uint8_t c) { 166 | 167 | DC_LOW(); 168 | CS_LOW(); 169 | SPI_BEGIN_TRANSACTION(); 170 | 171 | spiwrite(c); 172 | 173 | CS_HIGH(); 174 | SPI_END_TRANSACTION(); 175 | } 176 | 177 | void ST7789v_arduino::writedata(uint8_t c) { 178 | SPI_BEGIN_TRANSACTION(); 179 | DC_HIGH(); 180 | CS_LOW(); 181 | 182 | spiwrite(c); 183 | 184 | CS_HIGH(); 185 | SPI_END_TRANSACTION(); 186 | } 187 | 188 | // Companion code to the above tables. Reads and issues 189 | // a series of LCD commands stored in PROGMEM byte array. 190 | void ST7789v_arduino::displayInit(const uint8_t *addr) { 191 | 192 | uint8_t numCommands, numArgs; 193 | uint16_t ms; 194 | //<----------------------------------------------------------------------------------------- 195 | DC_HIGH(); 196 | #if defined(USE_FAST_IO) 197 | *clkport |= clkpinmask; 198 | #else 199 | digitalWrite(_sclk, HIGH); 200 | #endif 201 | //<----------------------------------------------------------------------------------------- 202 | 203 | numCommands = pgm_read_byte(addr++); // Number of commands to follow 204 | while(numCommands--) { // For each command... 205 | writecommand(pgm_read_byte(addr++)); // Read, issue command 206 | numArgs = pgm_read_byte(addr++); // Number of args to follow 207 | ms = numArgs & ST_CMD_DELAY; // If hibit set, delay follows args 208 | numArgs &= ~ST_CMD_DELAY; // Mask out delay bit 209 | while(numArgs--) { // For each argument... 210 | writedata(pgm_read_byte(addr++)); // Read, issue argument 211 | } 212 | 213 | if(ms) { 214 | ms = pgm_read_byte(addr++); // Read post-command delay time (ms) 215 | if(ms == 255) ms = 500; // If 255, delay for 500 ms 216 | delay(ms); 217 | } 218 | } 219 | } 220 | 221 | 222 | // Initialization code common to all ST7789 displays 223 | void ST7789v_arduino::commonInit(const uint8_t *cmdList) { 224 | _ystart = _xstart = 0; 225 | _colstart = _rowstart = 0; // May be overridden in init func 226 | 227 | pinMode(_dc, OUTPUT); 228 | if(_cs) { 229 | pinMode(_cs, OUTPUT); 230 | } 231 | 232 | #if defined(USE_FAST_IO) 233 | dcport = portOutputRegister(digitalPinToPort(_dc)); 234 | dcpinmask = digitalPinToBitMask(_dc); 235 | if(_cs) { 236 | csport = portOutputRegister(digitalPinToPort(_cs)); 237 | cspinmask = digitalPinToBitMask(_cs); 238 | } 239 | 240 | #endif 241 | 242 | if(_hwSPI) { // Using hardware SPI 243 | // #if defined (SPI_HAS_TRANSACTION) 244 | SPI.begin(); 245 | SPI.setClockDivider(SPI_CLOCK_DIV2); 246 | mySPISettings = SPISettings(0, MSBFIRST, SPI_MODE2); 247 | 248 | // #elif defined (__AVR__) || defined(CORE_TEENSY) 249 | // SPCRbackup = SPCR; 250 | // SPI.begin(); 251 | // SPI.setClockDivider(SPI_CLOCK_DIV4); 252 | // SPI.setDataMode(SPI_MODE2); 253 | // mySPCR = SPCR; // save our preferred state 254 | // SPCR = SPCRbackup; // then restore 255 | // #elif defined (__SAM3X8E__) 256 | // SPI.begin(); 257 | // SPI.setClockDivider(21); //4MHz 258 | // SPI.setDataMode(SPI_MODE2); 259 | // #endif 260 | } else { 261 | pinMode(_sclk, OUTPUT); 262 | pinMode(_sid , OUTPUT); 263 | digitalWrite(_sclk, LOW); 264 | digitalWrite(_sid, LOW); 265 | 266 | #if defined(USE_FAST_IO) 267 | clkport = portOutputRegister(digitalPinToPort(_sclk)); 268 | dataport = portOutputRegister(digitalPinToPort(_sid)); 269 | clkpinmask = digitalPinToBitMask(_sclk); 270 | datapinmask = digitalPinToBitMask(_sid); 271 | #endif 272 | } 273 | 274 | // toggle RST low to reset; CS low so it'll listen to us 275 | CS_LOW(); 276 | if (_rst != -1) { 277 | pinMode(_rst, OUTPUT); 278 | digitalWrite(_rst, HIGH); 279 | delay(50); 280 | digitalWrite(_rst, LOW); 281 | delay(50); 282 | digitalWrite(_rst, HIGH); 283 | delay(50); 284 | } 285 | 286 | if(cmdList) 287 | displayInit(cmdList); 288 | } 289 | 290 | void ST7789v_arduino::setRotation(uint8_t m) { 291 | 292 | writecommand(ST7789_MADCTL); 293 | rotation = m % 4; // can't be higher than 3 294 | switch (rotation) { 295 | case 0: 296 | writedata(ST7789_MADCTL_MX | ST7789_MADCTL_MY | ST7789_MADCTL_RGB); 297 | 298 | _xstart = _colstart; 299 | _ystart = _rowstart; 300 | break; 301 | case 1: 302 | writedata(ST7789_MADCTL_MY | ST7789_MADCTL_MV | ST7789_MADCTL_RGB); 303 | 304 | _ystart = _colstart; 305 | _xstart = _rowstart; 306 | break; 307 | case 2: 308 | writedata(ST7789_MADCTL_RGB); 309 | 310 | _xstart = _colstart; 311 | _ystart = _rowstart; 312 | break; 313 | 314 | case 3: 315 | writedata(ST7789_MADCTL_MX | ST7789_MADCTL_MV | ST7789_MADCTL_RGB); 316 | 317 | _ystart = _colstart; 318 | _xstart = _rowstart; 319 | break; 320 | } 321 | } 322 | 323 | void ST7789v_arduino::setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, 324 | uint16_t y1) { 325 | 326 | uint16_t x_start = x0 + _xstart, x_end = x1 + _xstart; 327 | uint16_t y_start = y0 + _ystart, y_end = y1 + _ystart; 328 | 329 | 330 | writecommand(ST7789_CASET); // Column addr set 331 | writedata(x_start >> 8); 332 | writedata(x_start & 0xFF); // XSTART 333 | writedata(x_end >> 8); 334 | writedata(x_end & 0xFF); // XEND 335 | 336 | writecommand(ST7789_RASET); // Row addr set 337 | writedata(y_start >> 8); 338 | writedata(y_start & 0xFF); // YSTART 339 | writedata(y_end >> 8); 340 | writedata(y_end & 0xFF); // YEND 341 | 342 | writecommand(ST7789_RAMWR); // write to RAM 343 | } 344 | 345 | void ST7789v_arduino::pushColor(uint16_t color) { 346 | SPI_BEGIN_TRANSACTION(); 347 | DC_HIGH(); 348 | CS_LOW(); 349 | 350 | spiwrite(color >> 8); 351 | spiwrite(color); 352 | 353 | CS_HIGH(); 354 | SPI_END_TRANSACTION(); 355 | } 356 | 357 | void ST7789v_arduino::drawPixel(int16_t x, int16_t y, uint16_t color) { 358 | 359 | if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return; 360 | 361 | setAddrWindow(x,y,x+1,y+1); 362 | 363 | SPI_BEGIN_TRANSACTION(); 364 | DC_HIGH(); 365 | CS_LOW(); 366 | 367 | spiwrite(color >> 8); 368 | spiwrite(color); 369 | 370 | CS_HIGH(); 371 | SPI_END_TRANSACTION(); 372 | } 373 | 374 | void ST7789v_arduino::drawFastVLine(int16_t x, int16_t y, int16_t h, 375 | uint16_t color) { 376 | 377 | // Rudimentary clipping 378 | if((x >= _width) || (y >= _height)) return; 379 | if((y+h-1) >= _height) h = _height-y; 380 | setAddrWindow(x, y, x, y+h-1); 381 | 382 | uint8_t hi = color >> 8, lo = color; 383 | 384 | SPI_BEGIN_TRANSACTION(); 385 | DC_HIGH(); 386 | CS_LOW(); 387 | 388 | while (h--) { 389 | spiwrite(hi); 390 | spiwrite(lo); 391 | } 392 | 393 | CS_HIGH(); 394 | SPI_END_TRANSACTION(); 395 | } 396 | 397 | void ST7789v_arduino::drawFastHLine(int16_t x, int16_t y, int16_t w, 398 | uint16_t color) { 399 | 400 | // Rudimentary clipping 401 | if((x >= _width) || (y >= _height)) return; 402 | if((x+w-1) >= _width) w = _width-x; 403 | setAddrWindow(x, y, x+w-1, y); 404 | 405 | uint8_t hi = color >> 8, lo = color; 406 | 407 | SPI_BEGIN_TRANSACTION(); 408 | DC_HIGH(); 409 | CS_LOW(); 410 | 411 | while (w--) { 412 | spiwrite(hi); 413 | spiwrite(lo); 414 | } 415 | 416 | CS_HIGH(); 417 | SPI_END_TRANSACTION(); 418 | } 419 | 420 | void ST7789v_arduino::fillScreen(uint16_t color) { 421 | fillRect(0, 0, _width, _height, color); 422 | } 423 | 424 | // // fill a rectangle 425 | // void ST7789v_arduino::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, 426 | // uint16_t color) { 427 | 428 | // // rudimentary clipping (drawChar w/big text requires this) 429 | // if((x >= _width) || (y >= _height)) return; 430 | // if((x + w - 1) >= _width) w = _width - x; 431 | // if((y + h - 1) >= _height) h = _height - y; 432 | 433 | // setAddrWindow(x, y, x+w-1, y+h-1); 434 | 435 | // uint8_t hi = color >> 8, lo = color; 436 | 437 | // SPI_BEGIN_TRANSACTION(); 438 | 439 | // DC_HIGH(); 440 | // CS_LOW(); 441 | // for(y=h; y>0; y--) { 442 | // for(x=w; x>0; x--) { 443 | // spiwrite(hi); 444 | // spiwrite(lo); 445 | // } 446 | // } 447 | // CS_HIGH(); 448 | // SPI_END_TRANSACTION(); 449 | // } 450 | 451 | // fill a rectangle 452 | void ST7789v_arduino::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, 453 | uint16_t color) { 454 | 455 | // rudimentary clipping (drawChar w/big text requires this) 456 | if(x>=_width || y>=_height || w<=0 || h<=0) return; 457 | if(x+w-1>=_width) w=_width -x; 458 | if(y+h-1>=_height) h=_height-y; 459 | setAddrWindow(x, y, x+w-1, y+h-1); 460 | 461 | uint8_t hi = color >> 8, lo = color; 462 | 463 | SPI_BEGIN_TRANSACTION(); 464 | 465 | DC_HIGH(); 466 | CS_LOW(); 467 | 468 | uint32_t num = (uint32_t)w*h; 469 | uint16_t num16 = num>>4; 470 | while(num16--) { 471 | spiwrite(hi); spiwrite(lo); 472 | spiwrite(hi); spiwrite(lo); 473 | spiwrite(hi); spiwrite(lo); 474 | spiwrite(hi); spiwrite(lo); 475 | spiwrite(hi); spiwrite(lo); 476 | spiwrite(hi); spiwrite(lo); 477 | spiwrite(hi); spiwrite(lo); 478 | spiwrite(hi); spiwrite(lo); 479 | spiwrite(hi); spiwrite(lo); 480 | spiwrite(hi); spiwrite(lo); 481 | spiwrite(hi); spiwrite(lo); 482 | spiwrite(hi); spiwrite(lo); 483 | spiwrite(hi); spiwrite(lo); 484 | spiwrite(hi); spiwrite(lo); 485 | spiwrite(hi); spiwrite(lo); 486 | spiwrite(hi); spiwrite(lo); 487 | } 488 | uint8_t num8 = num & 0xf; 489 | while(num8--) { spiwrite(hi); spiwrite(lo); } 490 | 491 | 492 | CS_HIGH(); 493 | SPI_END_TRANSACTION(); 494 | } 495 | 496 | // Pass 8-bit (each) R,G,B, get back 16-bit packed color 497 | uint16_t ST7789v_arduino::Color565(uint8_t r, uint8_t g, uint8_t b) { 498 | return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3); 499 | } 500 | 501 | void ST7789v_arduino::invertDisplay(boolean i) { 502 | writecommand(i ? ST7789_INVON : ST7789_INVOFF); 503 | } 504 | 505 | /******** low level bit twiddling **********/ 506 | 507 | inline void ST7789v_arduino::CS_HIGH(void) { 508 | if(_cs) { 509 | #if defined(USE_FAST_IO) 510 | *csport |= cspinmask; 511 | #else 512 | digitalWrite(_cs, HIGH); 513 | #endif 514 | } 515 | } 516 | 517 | inline void ST7789v_arduino::CS_LOW(void) { 518 | if(_cs) { 519 | #if defined(USE_FAST_IO) 520 | *csport &= ~cspinmask; 521 | #else 522 | digitalWrite(_cs, LOW); 523 | #endif 524 | } 525 | } 526 | 527 | inline void ST7789v_arduino::DC_HIGH(void) { 528 | _DCbit = true; 529 | #if defined(USE_FAST_IO) 530 | *dcport |= dcpinmask; 531 | #else 532 | digitalWrite(_dc, HIGH); 533 | #endif 534 | } 535 | 536 | inline void ST7789v_arduino::DC_LOW(void) { 537 | _DCbit = false; 538 | #if defined(USE_FAST_IO) 539 | *dcport &= ~dcpinmask; 540 | #else 541 | digitalWrite(_dc, LOW); 542 | #endif 543 | } 544 | 545 | void ST7789v_arduino::init(uint16_t width, uint16_t height) { 546 | commonInit(NULL); 547 | 548 | _colstart = ST7789_240x240_XSTART; 549 | _rowstart = ST7789_240x240_YSTART; 550 | _height = 320; 551 | _width = 240; 552 | 553 | displayInit(cmd_240x240); 554 | 555 | setRotation(2); 556 | } 557 | 558 | // ---------------------------------------------------------- 559 | // draws image from RAM 560 | void ST7789v_arduino::drawImage(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t *img16) 561 | { 562 | if(x>=_width || y>=_height || w<=0 || h<=0) return; 563 | setAddrWindow(x, y, x+w-1, y+h-1); 564 | 565 | SPI_BEGIN_TRANSACTION(); 566 | 567 | DC_HIGH(); 568 | CS_LOW(); 569 | 570 | uint32_t num = (uint32_t)w*h; 571 | uint16_t num16 = num>>3; 572 | uint8_t *img = (uint8_t *)img16; 573 | while(num16--) { 574 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 575 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 576 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 577 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 578 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 579 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 580 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 581 | spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; 582 | } 583 | uint8_t num8 = num & 0x7; 584 | while(num8--) { spiwrite(*(img+1)); spiwrite(*(img+0)); img+=2; } 585 | 586 | CS_HIGH(); 587 | SPI_END_TRANSACTION(); 588 | } 589 | 590 | 591 | // ---------------------------------------------------------- 592 | // draws image from flash (PROGMEM) 593 | void ST7789v_arduino::drawImageF(int16_t x, int16_t y, int16_t w, int16_t h, const uint16_t *img16) 594 | { 595 | if(x>=_width || y>=_height || w<=0 || h<=0) return; 596 | setAddrWindow(x, y, x+w-1, y+h-1); 597 | 598 | SPI_BEGIN_TRANSACTION(); 599 | 600 | DC_HIGH(); 601 | CS_LOW(); 602 | 603 | uint32_t num = (uint32_t)w*h; 604 | uint16_t num16 = num>>3; 605 | uint8_t *img = (uint8_t *)img16; 606 | while(num16--) { 607 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 608 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 609 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 610 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 611 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 612 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 613 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 614 | spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; 615 | } 616 | uint8_t num8 = num & 0x7; 617 | while(num8--) { spiwrite(pgm_read_byte(img+1)); spiwrite(pgm_read_byte(img+0)); img+=2; } 618 | 619 | CS_HIGH(); 620 | SPI_END_TRANSACTION(); 621 | 622 | 623 | } 624 | 625 | 626 | 627 | // ---------------------------------------------------------- 628 | void ST7789v_arduino::partialDisplay(boolean mode) 629 | { 630 | writecommand(mode ? ST7789_PTLON : ST7789_NORON); 631 | } 632 | 633 | // ---------------------------------------------------------- 634 | void ST7789v_arduino::sleepDisplay(boolean mode) 635 | { 636 | writecommand(mode ? ST7789_SLPIN : ST7789_SLPOUT); 637 | delay(5); 638 | } 639 | 640 | // ---------------------------------------------------------- 641 | void ST7789v_arduino::enableDisplay(boolean mode) 642 | { 643 | writecommand(mode ? ST7789_DISPON : ST7789_DISPOFF); 644 | } 645 | 646 | // ---------------------------------------------------------- 647 | void ST7789v_arduino::idleDisplay(boolean mode) 648 | { 649 | writecommand(mode ? ST7789_IDMON : ST7789_IDMOFF); 650 | } 651 | 652 | // ---------------------------------------------------------- 653 | void ST7789v_arduino::resetDisplay() 654 | { 655 | writecommand(ST7789_SWRESET); 656 | delay(5); 657 | } 658 | 659 | // ---------------------------------------------------------- 660 | void ST7789v_arduino::setScrollArea(uint16_t tfa, uint16_t bfa) 661 | { 662 | uint16_t vsa = 240-tfa-bfa; // ST7789 320x240 VRAM 663 | writecommand(ST7789_VSCRDEF); // SETSCROLLAREA = 0x33 664 | writedata(tfa >> 8); 665 | writedata(tfa); 666 | writedata(vsa >> 8); 667 | writedata(vsa); 668 | writedata(bfa >> 8); 669 | writedata(bfa); 670 | } 671 | 672 | // ---------------------------------------------------------- 673 | void ST7789v_arduino::setScroll(uint16_t vsp) 674 | { 675 | writecommand(ST7789_VSCRSADD); // VSCRSADD = 0x37 676 | writedata(vsp >> 8); 677 | writedata(vsp); 678 | } 679 | 680 | // ---------------------------------------------------------- 681 | void ST7789v_arduino::setPartArea(uint16_t sr, uint16_t er) 682 | { 683 | writecommand(ST7789_PTLAR); // SETPARTAREA = 0x30 684 | writedata(sr >> 8); 685 | writedata(sr); 686 | writedata(er >> 8); 687 | writedata(er); 688 | } 689 | 690 | // ---------------------------------------------------------- 691 | // doesn't work 692 | void ST7789v_arduino::setBrightness(uint8_t br) 693 | { 694 | //writecommand(ST7789_WRCACE); 695 | //writedata(0xb1); // 80,90,b0, or 00,01,02,03 696 | //writecommand(ST7789_WRCABCMB); 697 | //writedata(120); 698 | 699 | //BCTRL=0x20, dd=0x08, bl=0x04 700 | int val = 0x04; 701 | writecommand(ST7789_WRCTRLD); 702 | writedata(val); 703 | writecommand(ST7789_WRDISBV); 704 | writedata(br); 705 | } 706 | 707 | // ---------------------------------------------------------- 708 | // 0 - off 709 | // 1 - idle 710 | // 2 - normal 711 | // 4 - display off 712 | void ST7789v_arduino::powerSave(uint8_t mode) 713 | { 714 | if(mode==0) { 715 | writecommand(ST7789_POWSAVE); 716 | writedata(0xec|3); 717 | writecommand(ST7789_DLPOFFSAVE); 718 | writedata(0xff); 719 | return; 720 | } 721 | int is = (mode&1) ? 0 : 1; 722 | int ns = (mode&2) ? 0 : 2; 723 | writecommand(ST7789_POWSAVE); 724 | writedata(0xec|ns|is); 725 | if(mode&4) { 726 | writecommand(ST7789_DLPOFFSAVE); 727 | writedata(0xfe); 728 | } 729 | } 730 | 731 | // ------------------------------------------------ 732 | // Input a value 0 to 511 (85*6) to get a color value. 733 | // The colours are a transition R - Y - G - C - B - M - R. 734 | void ST7789v_arduino::rgbWheel(int idx, uint8_t *_r, uint8_t *_g, uint8_t *_b) 735 | { 736 | idx &= 0x1ff; 737 | if(idx < 85) { // R->Y 738 | *_r = 255; *_g = idx * 3; *_b = 0; 739 | return; 740 | } else if(idx < 85*2) { // Y->G 741 | idx -= 85*1; 742 | *_r = 255 - idx * 3; *_g = 255; *_b = 0; 743 | return; 744 | } else if(idx < 85*3) { // G->C 745 | idx -= 85*2; 746 | *_r = 0; *_g = 255; *_b = idx * 3; 747 | return; 748 | } else if(idx < 85*4) { // C->B 749 | idx -= 85*3; 750 | *_r = 0; *_g = 255 - idx * 3; *_b = 255; 751 | return; 752 | } else if(idx < 85*5) { // B->M 753 | idx -= 85*4; 754 | *_r = idx * 3; *_g = 0; *_b = 255; 755 | return; 756 | } else { // M->R 757 | idx -= 85*5; 758 | *_r = 255; *_g = 0; *_b = 255 - idx * 3; 759 | return; 760 | } 761 | } 762 | 763 | uint16_t ST7789v_arduino::rgbWheel(int idx) 764 | { 765 | uint8_t r,g,b; 766 | rgbWheel(idx, &r,&g,&b); 767 | return RGBto565(r,g,b); 768 | } 769 | 770 | void ST7789v_arduino::startWrite(void){ 771 | 772 | SPI_BEGIN_TRANSACTION(); 773 | CS_LOW(); 774 | } 775 | 776 | void ST7789v_arduino::endWrite(void){ 777 | CS_HIGH(); 778 | SPI_END_TRANSACTION(); 779 | } 780 | -------------------------------------------------------------------------------- /ST7789v_arduino.h: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | Originally written by Limor Fried/Ladyada for 5 | Adafruit Industries. 6 | 7 | Modified by Ananev Ilia 8 | Modified by Kamran Gasimov 9 | ****************************************************/ 10 | 11 | #ifndef _ADAFRUIT_ST7789H_ 12 | #define _ADAFRUIT_ST7789H_ 13 | 14 | #include "Arduino.h" 15 | #include "Print.h" 16 | #include 17 | 18 | // #define SPI_FREQ 16000000 19 | 20 | #if defined(__AVR__) || defined(CORE_TEENSY) 21 | #include 22 | #define USE_FAST_IO false 23 | typedef volatile uint8_t RwReg; 24 | #elif defined(ARDUINO_STM32_FEATHER) 25 | typedef volatile uint32 RwReg; 26 | #define USE_FAST_IO false 27 | #elif defined(ARDUINO_FEATHER52) 28 | typedef volatile uint32_t RwReg; 29 | #define USE_FAST_IO false 30 | #elif defined(ESP8266) 31 | #include 32 | #elif defined(__SAM3X8E__) 33 | #undef __FlashStringHelper::F(string_literal) 34 | #define F(string_literal) string_literal 35 | #include 36 | #define PROGMEM 37 | #define pgm_read_byte(addr) (*(const unsigned char *)(addr)) 38 | #define pgm_read_word(addr) (*(const unsigned short *)(addr)) 39 | typedef unsigned char prog_uchar; 40 | #endif 41 | 42 | #define ST7789_TFTWIDTH 240 43 | #define ST7789_TFTHEIGHT 240 44 | 45 | #define ST7789_240x240_XSTART 0 46 | #define ST7789_240x240_YSTART 40 47 | 48 | 49 | #define ST_CMD_DELAY 0x80 50 | 51 | #define ST7789_NOP 0x00 52 | #define ST7789_SWRESET 0x01 53 | 54 | #define ST7789_SLPIN 0x10 // sleep on 55 | #define ST7789_SLPOUT 0x11 // sleep off 56 | #define ST7789_PTLON 0x12 // partial on 57 | #define ST7789_NORON 0x13 // partial off 58 | #define ST7789_INVOFF 0x20 // invert off 59 | #define ST7789_INVON 0x21 // invert on 60 | #define ST7789_DISPOFF 0x28 // display off 61 | #define ST7789_DISPON 0x29 // display on 62 | #define ST7789_IDMOFF 0x38 // idle off 63 | #define ST7789_IDMON 0x39 // idle on 64 | 65 | #define ST7789_CASET 0x2A 66 | #define ST7789_RASET 0x2B 67 | #define ST7789_RAMWR 0x2C 68 | #define ST7789_RAMRD 0x2E 69 | 70 | #define ST7789_COLMOD 0x3A 71 | #define ST7789_MADCTL 0x36 72 | 73 | #define ST7789_PTLAR 0x30 // partial start/end 74 | #define ST7789_VSCRDEF 0x33 // SETSCROLLAREA 75 | #define ST7789_VSCRSADD 0x37 76 | 77 | #define ST7789_WRDISBV 0x51 78 | #define ST7789_WRCTRLD 0x53 79 | #define ST7789_WRCACE 0x55 80 | #define ST7789_WRCABCMB 0x5e 81 | 82 | #define ST7789_POWSAVE 0xbc 83 | #define ST7789_DLPOFFSAVE 0xbd 84 | 85 | // bits in MADCTL 86 | #define ST7789_MADCTL_MY 0x80 87 | #define ST7789_MADCTL_MX 0x40 88 | #define ST7789_MADCTL_MV 0x20 89 | #define ST7789_MADCTL_ML 0x10 90 | #define ST7789_MADCTL_RGB 0x00 91 | 92 | 93 | // Color definitions 94 | #define BLACK 0x0000 95 | #define BLUE 0x001F 96 | #define RED 0xF800 97 | #define GREEN 0x07E0 98 | #define CYAN 0x07FF 99 | #define MAGENTA 0xF81F 100 | #define YELLOW 0xFFE0 101 | #define WHITE 0xFFFF 102 | 103 | 104 | #define RGBto565(r,g,b) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3)) 105 | 106 | 107 | class ST7789v_arduino : public Adafruit_GFX { 108 | 109 | public: 110 | 111 | ST7789v_arduino(int8_t DC, int8_t RST, int8_t SID, int8_t SCLK, int8_t CS = -1); 112 | ST7789v_arduino(int8_t DC, int8_t RST, int8_t CS = -1); 113 | 114 | void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), 115 | pushColor(uint16_t color), 116 | fillScreen(uint16_t color), 117 | drawPixel(int16_t x, int16_t y, uint16_t color), 118 | drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color), 119 | drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color), 120 | fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color), 121 | setRotation(uint8_t r), 122 | invertDisplay(boolean i), 123 | init(uint16_t width, uint16_t height); 124 | uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); 125 | uint16_t color565(uint8_t r, uint8_t g, uint8_t b) { return Color565(r, g, b); } 126 | void drawImage(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t *img); 127 | void drawImageF(int16_t x, int16_t y, int16_t w, int16_t h, const uint16_t *img16); 128 | void drawImageF(int16_t x, int16_t y, const uint16_t *img16) { drawImageF(x,y,pgm_read_word(img16),pgm_read_word(img16+1),img16+3); } 129 | void partialDisplay(boolean mode); 130 | void sleepDisplay(boolean mode); 131 | void enableDisplay(boolean mode); 132 | void idleDisplay(boolean mode); 133 | void resetDisplay(); 134 | void setScrollArea(uint16_t tfa, uint16_t bfa); 135 | void setScroll(uint16_t vsp); 136 | void setPartArea(uint16_t sr, uint16_t er); 137 | void setBrightness(uint8_t br); 138 | void powerSave(uint8_t mode); 139 | void startWrite(); 140 | void endWrite(); 141 | 142 | void rgbWheel(int idx, uint8_t *_r, uint8_t *_g, uint8_t *_b); 143 | uint16_t rgbWheel(int idx); 144 | protected: 145 | uint8_t _colstart, _rowstart, _xstart, _ystart; // some displays need this changed 146 | 147 | void displayInit(const uint8_t *addr); 148 | void spiwrite(uint8_t), 149 | writecommand(uint8_t c), 150 | writedata(uint8_t d), 151 | commonInit(const uint8_t *cmdList); 152 | 153 | 154 | private: 155 | 156 | inline void CS_HIGH(void); 157 | inline void CS_LOW(void); 158 | inline void DC_HIGH(void); 159 | inline void DC_LOW(void); 160 | 161 | boolean _hwSPI; 162 | boolean _SPI9bit; 163 | boolean _DCbit; 164 | 165 | int8_t _cs, _dc, _rst, _sid, _sclk; 166 | 167 | #if defined(USE_FAST_IO) 168 | volatile RwReg *dataport, *clkport, *csport, *dcport; 169 | 170 | #if defined(__AVR__) || defined(CORE_TEENSY) // 8 bit! 171 | uint8_t datapinmask, clkpinmask, cspinmask, dcpinmask; 172 | #else // 32 bit! 173 | uint32_t datapinmask, clkpinmask, cspinmask, dcpinmask; 174 | #endif 175 | #endif 176 | 177 | }; 178 | 179 | #endif 180 | -------------------------------------------------------------------------------- /examples/graphicsControllerMods/graphicsControllerMods.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | Modified by Kamran Gasimov 5 | ****************************************************/ 6 | 7 | //#include // Core graphics library by Adafruit 8 | #include // Hardware-specific library for ST7789 (with or without CS pin) 9 | #include 10 | #include "bitmap.h" 11 | 12 | #define TFT_DC 8 13 | #define TFT_RST 9 14 | #define TFT_CS 10 // only for displays with CS pin 15 | #define TFT_MOSI 11 // for hardware SPI data pin (all of available pins) 16 | #define TFT_SCLK 13 // for hardware SPI sclk pin (all of available pins) 17 | 18 | //You can use different type of hardware initialization 19 | //using hardware SPI (11, 13 on UNO; 51, 52 on MEGA; ICSP-4, ICSP-3 on DUE and etc) 20 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST); //for display without CS pin 21 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_CS); //for display with CS pin 22 | //or you can use software SPI on all available pins (slow) 23 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK); //for display without CS pin 24 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin 25 | ST7789v_arduino tft = ST7789v_arduino(-1, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin and DC via 9bit SPI 26 | 27 | 28 | float p = 3.1415926; 29 | uint16_t colorBar[50]; 30 | void setup(void) { 31 | Serial.begin(9600); 32 | Serial.print("Hello! ST7789 TFT Test"); 33 | 34 | tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels 35 | // 36 | Serial.println("Initialized"); 37 | tft.fillScreen(BLACK); 38 | 39 | 40 | for (int i = 0; i < 256; i += 16) { 41 | uint8_t r, g, b; 42 | tft.rgbWheel(i * 512L / 256, &r, &g, &b); 43 | tft.fillRect(0, i, 240, 16, RGBto565(r, g, b)); 44 | } 45 | } 46 | int bgCols[] = {6, 8, 10, 12, 14, 12, 10, 8}; 47 | char *scrollTxt[] = {"", "This", "is", "an example", "of", "super-smooth", "scrolling", "with regular", 48 | "AVR Arduino,", "ST7789", "240x240 IPS tft", "library", "and", "RRE Fonts", "" 49 | }; 50 | 51 | int c = 0, t = 0; 52 | int maxy = 320; // internal ST7789 fb is 240x320 53 | unsigned long ms; 54 | 55 | void loop() { 56 | 57 | tft.fillScreen(RGBto565(120, 60, 30)); 58 | Serial.println( 95, "ST7789 modes"); 59 | delay(2000); 60 | 61 | tft.powerSave(7); 62 | /* 63 | rainbow(); delay(2000); 64 | tft.setBrightness(0); delay(2000); 65 | tft.setBrightness(128); delay(2000); 66 | tft.setBrightness(255); delay(2000); 67 | */ 68 | rainbow(); 69 | Serial.println( "Idle mode OFF"); 70 | tft.idleDisplay(false); delay(2000); 71 | rainbow(); 72 | Serial.println( "Idle mode ON"); 73 | tft.idleDisplay(true); delay(4000); 74 | rainbow(); 75 | Serial.println( "Idle mode OFF"); 76 | tft.idleDisplay(false); delay(2000); 77 | 78 | rainbow(); 79 | tft.fillRect(30, 87, 240 - 60, 60, BLACK); 80 | Serial.println( "Invert OFF"); 81 | tft.invertDisplay(false); delay(2000); 82 | Serial.println( " Invert ON "); 83 | tft.invertDisplay(true); delay(4000); 84 | Serial.println( "Invert OFF"); 85 | tft.invertDisplay(false); delay(2000); 86 | 87 | tft.fillScreen(RGBto565(180, 0, 180)); 88 | Serial.println( "Sleep mode in 2s"); 89 | delay(2000); 90 | //tft.enableDisplay(false); 91 | tft.sleepDisplay(true); delay(4000); 92 | tft.sleepDisplay(false); 93 | //tft.enableDisplay(true); 94 | 95 | tft.fillScreen(RGBto565(180, 0, 180)); 96 | Serial.println( "Display on/off"); 97 | delay(2000); 98 | tft.enableDisplay(false); delay(4000); 99 | tft.enableDisplay(true); delay(1000); 100 | 101 | tft.fillScreen(RGBto565(180, 0, 180)); 102 | Serial.println( "Partial display"); 103 | 104 | delay(2000); 105 | tft.setPartArea(60 * 1, 60 * 3); tft.partialDisplay(true); delay(4000); 106 | tft.setPartArea(60 * 3, 60 * 1); tft.partialDisplay(true); delay(4000); 107 | tft.partialDisplay(false); 108 | delay(1000); 109 | 110 | tft.fillScreen(RGBto565(180, 0, 0)); 111 | Serial.println( "Sw reset ..."); 112 | delay(2000); 113 | tft.resetDisplay(); delay(2000); 114 | // tft.init(SCR_WD, SCR_HT); 115 | tft.fillScreen(RGBto565(0, 0, 180)); 116 | Serial.println( "After reset"); delay(2000); 117 | } 118 | 119 | void rainbow() 120 | { 121 | for (int i = 0; i < 240; i += 4) { 122 | uint8_t r, g, b; 123 | tft.rgbWheel(i * 512L / 240, &r, &g, &b); 124 | tft.fillRect(0, i, 240, 4, RGBto565(r, g, b)); 125 | } 126 | } 127 | 128 | void testlines(uint16_t color) { 129 | tft.fillScreen(BLACK); 130 | for (int16_t x = 0; x < tft.width(); x += 6) { 131 | tft.drawLine(0, 0, x, tft.height() - 1, color); 132 | } 133 | for (int16_t y = 0; y < tft.height(); y += 6) { 134 | tft.drawLine(0, 0, tft.width() - 1, y, color); 135 | } 136 | 137 | tft.fillScreen(BLACK); 138 | for (int16_t x = 0; x < tft.width(); x += 6) { 139 | tft.drawLine(tft.width() - 1, 0, x, tft.height() - 1, color); 140 | } 141 | for (int16_t y = 0; y < tft.height(); y += 6) { 142 | tft.drawLine(tft.width() - 1, 0, 0, y, color); 143 | } 144 | 145 | tft.fillScreen(BLACK); 146 | for (int16_t x = 0; x < tft.width(); x += 6) { 147 | tft.drawLine(0, tft.height() - 1, x, 0, color); 148 | } 149 | for (int16_t y = 0; y < tft.height(); y += 6) { 150 | tft.drawLine(0, tft.height() - 1, tft.width() - 1, y, color); 151 | } 152 | 153 | tft.fillScreen(BLACK); 154 | for (int16_t x = 0; x < tft.width(); x += 6) { 155 | tft.drawLine(tft.width() - 1, tft.height() - 1, x, 0, color); 156 | } 157 | for (int16_t y = 0; y < tft.height(); y += 6) { 158 | tft.drawLine(tft.width() - 1, tft.height() - 1, 0, y, color); 159 | } 160 | } 161 | 162 | void testdrawtext(char *text, uint16_t color) { 163 | tft.setCursor(0, 0); 164 | tft.setTextColor(color); 165 | tft.setTextWrap(true); 166 | tft.print(text); 167 | } 168 | 169 | void testfastlines(uint16_t color1, uint16_t color2) { 170 | tft.fillScreen(BLACK); 171 | for (int16_t y = 0; y < tft.height(); y += 5) { 172 | tft.drawFastHLine(0, y, tft.width(), color1); 173 | } 174 | for (int16_t x = 0; x < tft.width(); x += 5) { 175 | tft.drawFastVLine(x, 0, tft.height(), color2); 176 | } 177 | } 178 | 179 | void testdrawrects(uint16_t color) { 180 | tft.fillScreen(BLACK); 181 | for (int16_t x = 0; x < tft.width(); x += 6) { 182 | tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, color); 183 | } 184 | } 185 | 186 | void testfillrects(uint16_t color1, uint16_t color2) { 187 | tft.fillScreen(BLACK); 188 | for (int16_t x = tft.width() - 1; x > 6; x -= 6) { 189 | tft.fillRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, color1); 190 | tft.drawRect(tft.width() / 2 - x / 2, tft.height() / 2 - x / 2 , x, x, color2); 191 | } 192 | } 193 | 194 | void testfillcircles(uint8_t radius, uint16_t color) { 195 | for (int16_t x = radius; x < tft.width(); x += radius * 2) { 196 | for (int16_t y = radius; y < tft.height(); y += radius * 2) { 197 | tft.fillCircle(x, y, radius, color); 198 | } 199 | } 200 | } 201 | 202 | void testdrawcircles(uint8_t radius, uint16_t color) { 203 | for (int16_t x = 0; x < tft.width() + radius; x += radius * 2) { 204 | for (int16_t y = 0; y < tft.height() + radius; y += radius * 2) { 205 | tft.drawCircle(x, y, radius, color); 206 | } 207 | } 208 | } 209 | 210 | void testtriangles() { 211 | tft.fillScreen(BLACK); 212 | int color = 0xF800; 213 | int t; 214 | int w = tft.width() / 2; 215 | int x = tft.height() - 1; 216 | int y = 0; 217 | int z = tft.width(); 218 | for (t = 0 ; t <= 15; t++) { 219 | tft.drawTriangle(w, y, y, x, z, x, color); 220 | x -= 4; 221 | y += 4; 222 | z -= 4; 223 | color += 100; 224 | } 225 | } 226 | 227 | void testroundrects() { 228 | tft.fillScreen(BLACK); 229 | int color = 100; 230 | int i; 231 | int t; 232 | for (t = 0 ; t <= 4; t += 1) { 233 | int x = 0; 234 | int y = 0; 235 | int w = tft.width() - 2; 236 | int h = tft.height() - 2; 237 | for (i = 0 ; i <= 16; i += 1) { 238 | tft.drawRoundRect(x, y, w, h, 5, color); 239 | x += 2; 240 | y += 3; 241 | w -= 4; 242 | h -= 6; 243 | color += 1100; 244 | } 245 | color += 100; 246 | } 247 | } 248 | 249 | void tftPrintTest() { 250 | tft.setTextWrap(false); 251 | tft.fillScreen(BLACK); 252 | tft.setCursor(0, 30); 253 | tft.setTextColor(RED); 254 | tft.setTextSize(1); 255 | tft.println("Hello World!"); 256 | tft.setTextColor(YELLOW); 257 | tft.setTextSize(2); 258 | tft.println("Hello World!"); 259 | tft.setTextColor(GREEN); 260 | tft.setTextSize(3); 261 | tft.println("Hello World!"); 262 | tft.setTextColor(BLUE); 263 | tft.setTextSize(4); 264 | tft.print(1234.567); 265 | delay(1500); 266 | tft.setCursor(0, 0); 267 | tft.fillScreen(BLACK); 268 | tft.setTextColor(WHITE); 269 | tft.setTextSize(0); 270 | tft.println("Hello World!"); 271 | tft.setTextSize(1); 272 | tft.setTextColor(GREEN); 273 | tft.print(p, 6); 274 | tft.println(" Want pi?"); 275 | tft.println(" "); 276 | tft.print(8675309, HEX); // print 8,675,309 out in HEX! 277 | tft.println(" Print HEX!"); 278 | tft.println(" "); 279 | tft.setTextColor(WHITE); 280 | tft.println("Sketch has been"); 281 | tft.println("running for: "); 282 | tft.setTextColor(MAGENTA); 283 | tft.print(millis() / 1000); 284 | tft.setTextColor(WHITE); 285 | tft.print(" seconds."); 286 | } 287 | 288 | void mediabuttons() { 289 | // play 290 | tft.fillScreen(BLACK); 291 | tft.fillRoundRect(25, 10, 78, 60, 8, WHITE); 292 | tft.fillTriangle(42, 20, 42, 60, 90, 40, RED); 293 | delay(500); 294 | // pause 295 | tft.fillRoundRect(25, 90, 78, 60, 8, WHITE); 296 | tft.fillRoundRect(39, 98, 20, 45, 5, GREEN); 297 | tft.fillRoundRect(69, 98, 20, 45, 5, GREEN); 298 | delay(500); 299 | // play color 300 | tft.fillTriangle(42, 20, 42, 60, 90, 40, BLUE); 301 | delay(50); 302 | // pause color 303 | tft.fillRoundRect(39, 98, 20, 45, 5, RED); 304 | tft.fillRoundRect(69, 98, 20, 45, 5, RED); 305 | // play color 306 | tft.fillTriangle(42, 20, 42, 60, 90, 40, GREEN); 307 | } 308 | -------------------------------------------------------------------------------- /examples/graphicsIMG/bitmap.h: -------------------------------------------------------------------------------- 1 | // Generated by lcd-image-converter 2 | // Generated from: deirvlon_logo.bmp 3 | // Dimensions : 100x100x16 (65536 colors) 4 | 5 | 6 | const uint16_t logo[] PROGMEM = { 7 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a1, 0x13a4, 0x138b, 0x11ad, 0x11ab, 0x1106, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 8 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a02, 0x0e66, 0x15d1, 0x239b, 0x2b3c, 0x1b79, 0x3c7d, 0x5d5f, 0x445b, 0x198a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 9 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0162, 0x04e7, 0x07a8, 0x1d91, 0x2ade, 0x2b5c, 0x23ba, 0x2399, 0x44de, 0x555f, 0x551f, 0x551f, 0x3bd7, 0x1148, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 10 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x03a5, 0x072a, 0x0749, 0x0f2a, 0x33d9, 0x235c, 0x23da, 0x2399, 0x2bfa, 0x551f, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3313, 0x08a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 11 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0324, 0x0689, 0x072a, 0x072a, 0x0769, 0x0f0b, 0x2bf9, 0x237b, 0x23ba, 0x1b79, 0x343c, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4cfe, 0x2ab0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 12 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0223, 0x0588, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x237b, 0x23ba, 0x1b79, 0x3c7d, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445a, 0x19ec, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 13 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08e1, 0x24e6, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x237b, 0x23ba, 0x23ba, 0x4cff, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3c19, 0x1106, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 14 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1384, 0x070b, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x237b, 0x2399, 0x341b, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3354, 0x0862, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 15 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1283, 0x1608, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x237c, 0x1b79, 0x3c5c, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4cde, 0x2a8f, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 16 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a2, 0x05a8, 0x072b, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x237b, 0x1b99, 0x44be, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4c9c, 0x19aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 17 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0466, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x235b, 0x2bda, 0x551f, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3bf8, 0x1168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 18 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0324, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x2c18, 0x1b3a, 0x343c, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x3313, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 19 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0345, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0b, 0x2c18, 0x1b3a, 0x3c7d, 0x5d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3bf8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 20 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c1, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0b, 0x2bf8, 0x235b, 0x4cdf, 0x555f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3333, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 21 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0426, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0b, 0x23d8, 0x2b9c, 0x553f, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4d3f, 0x08e5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 22 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e09, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0b, 0x23d7, 0x33dd, 0x555f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3b55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 23 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x0f0a, 0x23d8, 0x445f, 0x555f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 24 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2e28, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x06ea, 0x2c18, 0x4cbf, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 25 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x06ea, 0x345a, 0x54ff, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 26 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x0749, 0x06aa, 0x34bf, 0x54ff, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 27 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x1ea6, 0x21a6, 0x2b55, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 28 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x1f47, 0x0000, 0x0000, 0x11ab, 0x445b, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 29 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eeb, 0x18c0, 0x0000, 0x0000, 0x0020, 0x226f, 0x4cfe, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 30 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0883, 0x3312, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 31 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1107, 0x3bb7, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 32 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x11aa, 0x349b, 0x3d7f, 0x453f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 33 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x320b, 0x54fe, 0x2dbf, 0x4d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x443a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 34 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x38a1, 0xa1a1, 0xeb06, 0x8bd3, 0x353f, 0x3ddf, 0x4d3f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4439, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 35 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2608, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2880, 0xa1e3, 0xfae5, 0xfae5, 0xfac3, 0xfa20, 0xaa4a, 0x6417, 0x3dbf, 0x3d9f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4439, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 36 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x89a3, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xfa42, 0xd101, 0x9a6c, 0x5cbb, 0x35ff, 0x457f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 37 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x6942, 0xe2a5, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb46, 0xea85, 0xd0c0, 0xc964, 0x932f, 0x551e, 0x35df, 0x4d5f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 38 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eea, 0x18e0, 0x0000, 0x0000, 0x40c1, 0xca65, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb46, 0xe286, 0xb944, 0xd8e0, 0xc1a5, 0x83b3, 0x459f, 0x3dbf, 0x4d1f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 39 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f4a, 0x0840, 0x0800, 0xb1e4, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0xfb26, 0xd226, 0xb186, 0xc963, 0xd901, 0xb228, 0x6c58, 0x3ddf, 0x3d9f, 0x551f, 0x551f, 0x551f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 40 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x8943, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0xfb26, 0xc9e6, 0xb186, 0xc1c6, 0xd121, 0xd122, 0xa2cc, 0x5cbb, 0x3ddf, 0x457f, 0x551f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 41 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0xa9a4, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0xfb06, 0xc1c6, 0xb986, 0xc1c6, 0xc1a5, 0xd901, 0xd143, 0x9330, 0x4d3e, 0x3d9f, 0x4419, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 42 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xf2c6, 0xb9a6, 0xb986, 0xc1c6, 0xc1c6, 0xc984, 0xd900, 0xc1a5, 0x649a, 0x3479, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 43 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xeaa6, 0xb986, 0xb9a6, 0xc1c6, 0xc1c6, 0xc1c6, 0xd8e0, 0xb24a, 0x3438, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 44 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xe266, 0xb166, 0xc1c6, 0xc1c6, 0xc1c6, 0xc963, 0xba08, 0x4313, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 45 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x070a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0xfb26, 0xd226, 0xb166, 0xc1c6, 0xc1c6, 0xc963, 0xba07, 0x220c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 46 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0xfb26, 0xc9e6, 0xb186, 0xc1c6, 0xd142, 0xa26b, 0x0041, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 47 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xfb06, 0xc1c6, 0xb986, 0xd921, 0x1883, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 48 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb26, 0xf2c6, 0xc1c6, 0x4081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 49 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f49, 0x0000, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xcaa4, 0x2861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 50 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f69, 0x0020, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xda85, 0x6122, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 51 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0x8183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 52 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0840, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xa9e4, 0x2061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 53 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x26a8, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xba24, 0x40c1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 54 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5922, 0x99c3, 0xaa04, 0xaa04, 0x99e3, 0x48a2, 0x0020, 0x26e8, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xe2a5, 0x6122, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 55 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6122, 0xdaa5, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xea25, 0x0840, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0x7963, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 56 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40c1, 0xc244, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1060, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0x99e3, 0x2060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 57 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2061, 0xb204, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1040, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x9983, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xc244, 0x38a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 58 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x8183, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1040, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0xb1a4, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xe2a5, 0x6122, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 59 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6922, 0xe2a5, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1040, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0fa9, 0x1060, 0x68e2, 0xf2c5, 0xfae6, 0xfae6, 0xfae6, 0xc244, 0x7963, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 60 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40c1, 0xc244, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1040, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f4a, 0x2920, 0x0000, 0x1020, 0x38c1, 0x38c1, 0x2060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 61 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2881, 0xaa04, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1040, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2940, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 62 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x89a3, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x1060, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 63 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7142, 0xeaa5, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0840, 0x2667, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 64 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x40c1, 0xca65, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0020, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 65 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7923, 0xfb06, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 66 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88e2, 0xb985, 0xc9e6, 0xfb26, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 67 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39ca, 0xd921, 0xc1c5, 0xb166, 0xda46, 0xfb26, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 68 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0062, 0xa2ad, 0xd121, 0xc1c6, 0xc1a6, 0xb166, 0xe266, 0xfb46, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 69 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21aa, 0xa2ac, 0xd142, 0xc1c6, 0xc1c6, 0xb9a6, 0xb186, 0xeaa6, 0xfb26, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 70 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3332, 0xa2ad, 0xd900, 0xc1c6, 0xc1c6, 0xc1c6, 0xb986, 0xb9a6, 0xfae6, 0xfb26, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 71 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2c36, 0x7437, 0xd8e0, 0xd142, 0xc1c6, 0xc1c6, 0xc1c6, 0xb986, 0xc1c6, 0xfb06, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd1e5, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 72 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bd7, 0x459f, 0x6c57, 0xb9e6, 0xd900, 0xc963, 0xc1c6, 0xc1c6, 0xb166, 0xc9e6, 0xfb26, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xd205, 0x0820, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 73 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bb7, 0x4d3f, 0x3dbf, 0x4d5f, 0x8392, 0xc1a5, 0xd900, 0xc984, 0xc1c6, 0xb166, 0xda26, 0xfb26, 0xfb06, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xea25, 0x0020, 0x2647, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 74 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bd7, 0x551f, 0x551f, 0x455f, 0x35df, 0x551d, 0x9aed, 0xd142, 0xd900, 0xc1a5, 0xb186, 0xe266, 0xfb46, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfb06, 0x7903, 0x0000, 0x2687, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 75 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bd7, 0x551f, 0x551f, 0x551f, 0x551f, 0x457f, 0x35df, 0x6499, 0xa28b, 0xd921, 0xd122, 0xb186, 0xeaa6, 0xfb46, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xba24, 0x40a1, 0x0000, 0x0000, 0x2668, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 76 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bf8, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3dbf, 0x3dbf, 0x7415, 0xba07, 0xd0c0, 0xc143, 0xf2e6, 0xfb26, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xdaa5, 0x6122, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 77 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bf8, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4d3f, 0x35df, 0x457f, 0x8b91, 0xb965, 0xd8e0, 0xfae5, 0xfb26, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0xfae6, 0x89a3, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 78 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bf8, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4d5f, 0x35ff, 0x551d, 0x82ef, 0xd962, 0xfa61, 0xfb05, 0xfae6, 0xfae6, 0xfae6, 0x99c3, 0x2881, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x2100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 79 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bf8, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x457f, 0x35ff, 0x5459, 0xbaeb, 0xfaa1, 0xfa80, 0xc1e1, 0x48c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 80 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3c19, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x3dbf, 0x357f, 0x8456, 0x51c8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 81 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4419, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4d3f, 0x3d7f, 0x2cba, 0x1af0, 0x0083, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 82 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4419, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4cfe, 0x222d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 83 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4419, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x445b, 0x1168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2628, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 84 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x443a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x3b96, 0x1106, 0x0000, 0x0000, 0x0000, 0x0000, 0x2629, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 85 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x443a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x2ab0, 0x0062, 0x0000, 0x0000, 0x3666, 0x072c, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 86 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x443a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4cbd, 0x1a0d, 0x0000, 0x35e4, 0x072b, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 87 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x443a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x4d1f, 0x33d8, 0x160b, 0x0768, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 88 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x443a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x445e, 0x066c, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 89 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x445a, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x33fb, 0x066b, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 90 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x447b, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x4cff, 0x2bba, 0x0e8c, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x20e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 91 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3395, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d5f, 0x449f, 0x2379, 0x0eac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0f0a, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 92 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08e5, 0x553f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d5f, 0x341d, 0x2359, 0x0eac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x1608, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 93 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3bb7, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x553f, 0x2bbb, 0x237a, 0x0eac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x1b64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 94 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x4cbd, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x4cff, 0x237a, 0x2b9a, 0x0eac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x0eca, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 95 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c4, 0x4c9c, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d5f, 0x3c9d, 0x1b5a, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x1161, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 96 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0042, 0x2ad1, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d5f, 0x343c, 0x1b5a, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x1d87, 0x1181, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 97 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c5, 0x3395, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x553f, 0x2bda, 0x1b7a, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x0e89, 0x2262, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 98 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1168, 0x4419, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x555f, 0x44be, 0x2399, 0x239b, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x1ea9, 0x2b23, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 99 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x220d, 0x4c9d, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d7f, 0x3c5c, 0x1b78, 0x239b, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x14a6, 0x0880, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 100 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x2ab0, 0x4d1f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x555f, 0x341b, 0x1b79, 0x239b, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x24e6, 0x1961, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 101 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c5, 0x3375, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x553f, 0x4cff, 0x23ba, 0x23b9, 0x239b, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072a, 0x072a, 0x072b, 0x072b, 0x1608, 0x1283, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 102 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1989, 0x4419, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d5f, 0x449d, 0x1b79, 0x23da, 0x239b, 0x2bba, 0x16ac, 0x0789, 0x072a, 0x072b, 0x072b, 0x0eca, 0x1b84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 103 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x220c, 0x4cbd, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x5d7f, 0x345c, 0x1b79, 0x23da, 0x239a, 0x2b7b, 0x168d, 0x0789, 0x072b, 0x072a, 0x1c05, 0x08a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 104 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0062, 0x2ab0, 0x551f, 0x551f, 0x551f, 0x553f, 0x553f, 0x2bfb, 0x2399, 0x23da, 0x233d, 0x3b9a, 0x0f0a, 0x0769, 0x1ce6, 0x1182, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 105 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08a4, 0x3354, 0x551f, 0x555f, 0x4cde, 0x23b9, 0x237b, 0x2afe, 0x2b7b, 0x166d, 0x0728, 0x2a02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 106 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1127, 0x3332, 0x33b7, 0x1af6, 0x2397, 0x2cd2, 0x1de9, 0x13c3, 0x0080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 107 | }; 108 | -------------------------------------------------------------------------------- /examples/graphicsIMG/graphicsIMG.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | Modified by Kamran Gasimov 5 | ****************************************************/ 6 | 7 | //#include // Core graphics library by Adafruit 8 | #include // Hardware-specific library for ST7789 (with or without CS pin) 9 | #include 10 | #include "bitmap.h" //Deirvlon Logo bitmap 11 | 12 | #define TFT_DC 8 13 | #define TFT_RST 9 14 | #define TFT_CS 10 // only for displays with CS pin 15 | #define TFT_MOSI 11 // for hardware SPI data pin (all of available pins) 16 | #define TFT_SCLK 13 // for hardware SPI sclk pin (all of available pins) 17 | 18 | //You can use different type of hardware initialization 19 | //using hardware SPI (11, 13 on UNO; 51, 52 on MEGA; ICSP-4, ICSP-3 on DUE and etc) 20 | //Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST); //for display without CS pin 21 | //Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST, TFT_CS); //for display with CS pin 22 | //or you can use software SPI on all available pins (slow) 23 | //Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK); //for display without CS pin 24 | //Arduino_ST7789 tft = Arduino_ST7789(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin 25 | ST7789v_test tft = ST7789v_test(-1, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin and DC via 9bit SPI 26 | 27 | 28 | float p = 3.1415926; 29 | uint16_t colorBar[50]; 30 | void setup(void) { 31 | Serial.begin(9600); 32 | Serial.print("Hello! ST7789 TFT Test"); 33 | 34 | tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels 35 | // 36 | tft.idleDisplay(false); 37 | Serial.println("Initialized"); 38 | tft.fillScreen(BLACK); //Empty the screen 39 | 40 | //Draw Single Logo sprite 41 | tft.drawImageF(70, 70, 100, 100, logo); 42 | } 43 | 44 | void loop() { 45 | //Draw random Logo sprites around display 46 | tft.drawImageF(random(0, 240 - 100), random(0, 240 - 100), 100, 100, logo); 47 | } 48 | -------------------------------------------------------------------------------- /examples/graphicsSDcrad/graphicsSDcrad.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | 5 | ATTENTION !!! - Display pins changed in this sketch. 6 | Due to the SD Card connection circuit 7 | 8 | SD Card module CS_PIN = 4 9 | 10 | 11 | Modified by Kamran Gasimov 12 | ****************************************************/ 13 | 14 | //#include // Core graphics library by Adafruit 15 | #include // Hardware-specific library for ST7789 (with or without CS pin) 16 | #include // include Arduino SPI library 17 | #include // include Arduino SD library 18 | 19 | 20 | //#define TFT_DC 8 21 | #define TFT_RST 9 22 | #define TFT_CS 10 // only for displays with CS pin 23 | #define TFT_MOSI 7 // for hardware SPI data pin (all of available pins) 24 | #define TFT_SCLK 8 // for hardware SPI sclk pin (all of available pins) 25 | 26 | //You can use different type of hardware initialization 27 | //using hardware SPI (11, 13 on UNO; 51, 52 on MEGA; ICSP-4, ICSP-3 on DUE and etc) 28 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST); //for display without CS pin 29 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_CS); //for display with CS pin 30 | //or you can use software SPI on all available pins (slow) 31 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK); //for display without CS pin 32 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin 33 | ST7789v_arduino tft = ST7789v_arduino(-1, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin and DC via 9bit SPI 34 | 35 | 36 | float p = 3.1415926; 37 | 38 | void setup(void) { 39 | Serial.begin(9600); 40 | Serial.print("Hello! ST7789 TFT Test"); 41 | 42 | tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels 43 | // 44 | // tft.idleDisplay(false); 45 | Serial.println("Initialized"); 46 | tft.fillScreen(BLACK); 47 | 48 | Serial.print("Initializing SD card..."); 49 | 50 | if (!SD.begin(4)) { 51 | Serial.println("initialization failed!"); 52 | while (1); 53 | } 54 | Serial.println("initialization done."); 55 | 56 | 57 | 58 | /*If you want to see the inside of SD Card uncomment below*/ 59 | 60 | // 61 | // File root = SD.open("/"); // open SD card main root 62 | // printDirectory(root, 0); // print all files names and sizes 63 | // root.close(); 64 | // close the opened root 65 | 66 | 67 | } 68 | void loop() { 69 | //Draw multiple images from SD Card's root directory to show animation 70 | bmpDraw("/10.bmp", 70, 70); //Function for drawing single .bmp Image 71 | bmpDraw("/11.bmp", 70, 70); 72 | bmpDraw("/12.bmp", 70, 70); 73 | bmpDraw("/13.bmp", 70, 70); 74 | bmpDraw("/14.bmp", 70, 70); 75 | bmpDraw("/15.bmp", 70, 70); 76 | bmpDraw("/16.bmp", 70, 70); 77 | bmpDraw("/17.bmp", 70, 70); 78 | bmpDraw("/16.bmp", 70, 70); 79 | bmpDraw("/15.bmp", 70, 70); 80 | bmpDraw("/14.bmp", 70, 70); 81 | bmpDraw("/13.bmp", 70, 70); 82 | bmpDraw("/12.bmp", 70, 70); 83 | bmpDraw("/11.bmp", 70, 70); 84 | } 85 | 86 | // This function opens a Windows Bitmap (BMP) file and 87 | // displays it at the given coordinates. It's sped up 88 | // by reading many pixels worth of data at a time 89 | // (rather than pixel by pixel). Increasing the buffer 90 | // size takes more of the Arduino's precious RAM but 91 | // makes loading a little faster. 20 pixels seems a 92 | // good balance. 93 | 94 | #define BUFFPIXEL 20 95 | 96 | void bmpDraw(char *filename, uint8_t x, uint16_t y) { 97 | 98 | File bmpFile; 99 | int bmpWidth, bmpHeight; // W+H in pixels 100 | uint8_t bmpDepth; // Bit depth (currently must be 24) 101 | uint32_t bmpImageoffset; // Start of image data in file 102 | uint32_t rowSize; // Not always = bmpWidth; may have padding 103 | uint8_t sdbuffer[3 * BUFFPIXEL]; // pixel buffer (R+G+B per pixel) 104 | uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer 105 | boolean goodBmp = false; // Set to true on valid header parse 106 | boolean flip = true; // BMP is stored bottom-to-top 107 | int w, h, row, col; 108 | uint8_t r, g, b; 109 | uint32_t pos = 0, startTime = millis(); 110 | 111 | if ((x >= tft.width()) || (y >= tft.height())) return; 112 | 113 | Serial.println(); 114 | Serial.print(F("Loading image '")); 115 | Serial.print(filename); 116 | Serial.println('\''); 117 | 118 | // Open requested file on SD card 119 | if ((bmpFile = SD.open(filename)) == NULL) { 120 | Serial.print(F("File not found")); 121 | return; 122 | } 123 | 124 | // Parse BMP header 125 | if (read16(bmpFile) == 0x4D42) { // BMP signature 126 | Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); 127 | (void)read32(bmpFile); // Read & ignore creator bytes 128 | bmpImageoffset = read32(bmpFile); // Start of image data 129 | Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); 130 | // Read DIB header 131 | Serial.print(F("Header size: ")); Serial.println(read32(bmpFile)); 132 | bmpWidth = read32(bmpFile); 133 | bmpHeight = read32(bmpFile); 134 | if (read16(bmpFile) == 1) { // # planes -- must be '1' 135 | bmpDepth = read16(bmpFile); // bits per pixel 136 | Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); 137 | if ((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed 138 | 139 | goodBmp = true; // Supported BMP format -- proceed! 140 | Serial.print(F("Image size: ")); 141 | Serial.print(bmpWidth); 142 | Serial.print('x'); 143 | Serial.println(bmpHeight); 144 | 145 | // BMP rows are padded (if needed) to 4-byte boundary 146 | rowSize = (bmpWidth * 3 + 3) & ~3; 147 | 148 | // If bmpHeight is negative, image is in top-down order. 149 | // This is not canon but has been observed in the wild. 150 | if (bmpHeight < 0) { 151 | bmpHeight = -bmpHeight; 152 | flip = false; 153 | } 154 | 155 | // Crop area to be loaded 156 | w = bmpWidth; 157 | h = bmpHeight; 158 | 159 | // Set TFT address window to clipped image bounds 160 | tft.startWrite(); 161 | //Set an address where the image starts to draw 162 | tft.setAddrWindow(x, y, x + w - 1, y + h - 1); 163 | 164 | for (row = 0; row < h; row++) { // For each scanline... 165 | 166 | // Seek to start of scan line. It might seem labor- 167 | // intensive to be doing this on every line, but this 168 | // method covers a lot of gritty details like cropping 169 | // and scanline padding. Also, the seek only takes 170 | // place if the file position actually needs to change 171 | // (avoids a lot of cluster math in SD library). 172 | if (flip) // Bitmap is stored bottom-to-top order (normal BMP) 173 | pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize; 174 | else // Bitmap is stored top-to-bottom 175 | pos = bmpImageoffset + row * rowSize; 176 | if (bmpFile.position() != pos) { // Need seek? 177 | tft.endWrite(); 178 | bmpFile.seek(pos); 179 | buffidx = sizeof(sdbuffer); // Force buffer reload 180 | } 181 | 182 | for (col = 0; col < w; col++) { // For each pixel... 183 | // Time to read more pixel data? 184 | if (buffidx >= sizeof(sdbuffer)) { // Indeed 185 | bmpFile.read(sdbuffer, sizeof(sdbuffer)); 186 | buffidx = 0; // Set index to beginning 187 | tft.startWrite(); 188 | } 189 | 190 | // Convert pixel from BMP to TFT format, push to display 191 | b = sdbuffer[buffidx++]; 192 | g = sdbuffer[buffidx++]; 193 | r = sdbuffer[buffidx++]; 194 | tft.pushColor(tft.color565(r, g, b)); 195 | } // end pixel 196 | } // end scanline 197 | tft.endWrite(); 198 | Serial.print(F("Loaded in ")); 199 | Serial.print(millis() - startTime); 200 | Serial.println(" ms"); 201 | } // end goodBmp 202 | } 203 | } 204 | 205 | bmpFile.close(); 206 | if (!goodBmp) Serial.println(F("BMP format not recognized.")); 207 | } 208 | 209 | 210 | // These read 16- and 32-bit types from the SD card file. 211 | // BMP data is stored little-endian, Arduino is little-endian too. 212 | // May need to reverse subscript order if porting elsewhere. 213 | 214 | uint16_t read16(File f) { 215 | uint16_t result; 216 | ((uint8_t *)&result)[0] = f.read(); // LSB 217 | ((uint8_t *)&result)[1] = f.read(); // MSB 218 | return result; 219 | } 220 | 221 | uint32_t read32(File f) { 222 | uint32_t result; 223 | ((uint8_t *)&result)[0] = f.read(); // LSB 224 | ((uint8_t *)&result)[1] = f.read(); 225 | ((uint8_t *)&result)[2] = f.read(); 226 | ((uint8_t *)&result)[3] = f.read(); // MSB 227 | return result; 228 | } 229 | 230 | 231 | void printDirectory(File dir, int numTabs) { 232 | while (true) { 233 | 234 | File entry = dir.openNextFile(); 235 | if (! entry) { 236 | // no more files 237 | break; 238 | } 239 | for (uint8_t i = 0; i < numTabs; i++) { 240 | Serial.print('\t'); 241 | } 242 | Serial.print(entry.name()); 243 | if (entry.isDirectory()) { 244 | Serial.println("/"); 245 | printDirectory(entry, numTabs + 1); 246 | } else { 247 | // files have sizes, directories do not 248 | Serial.print("\t\t"); 249 | Serial.println(entry.size(), DEC); 250 | } 251 | entry.close(); 252 | } 253 | } 254 | 255 | // end of code. 256 | -------------------------------------------------------------------------------- /examples/graphicsTEST/graphicsTEST.ino: -------------------------------------------------------------------------------- 1 | /*************************************************** 2 | This is a library for the ST7789 IPS SPI display. 3 | 4 | Originally written by Limor Fried/Ladyada for 5 | Adafruit Industries. 6 | 7 | Modified by Kamran Gasimov, Ananev Ilia 8 | ****************************************************/ 9 | 10 | //#include // Core graphics library by Adafruit 11 | #include // Hardware-specific library for ST7789 (with or without CS pin) 12 | #include 13 | 14 | #define TFT_DC 8 15 | #define TFT_RST 9 16 | #define TFT_CS 10 // only for displays with CS pin 17 | #define TFT_MOSI 11 // for hardware SPI data pin (all of available pins) 18 | #define TFT_SCLK 13 // for hardware SPI sclk pin (all of available pins) 19 | 20 | //You can use different type of hardware initialization 21 | //using hardware SPI (11, 13 on UNO; 51, 52 on MEGA; ICSP-4, ICSP-3 on DUE and etc) 22 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST); //for display without CS pin 23 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_CS); //for display with CS pin 24 | //or you can use software SPI on all available pins (slow) 25 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK); //for display without CS pin 26 | //ST7789v_arduino tft = ST7789v_arduino(TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin 27 | ST7789v_arduino tft = ST7789v_arduino(-1, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_CS); //for display with CS pin and DC via 9bit SPI 28 | 29 | 30 | float p = 3.1415926; 31 | 32 | void setup(void) { 33 | Serial.begin(9600); 34 | Serial.print("Hello! ST7789 TFT Test"); 35 | 36 | tft.init(240, 240); // initialize a ST7789 chip, 240x240 pixels 37 | 38 | Serial.println("Initialized"); 39 | 40 | uint16_t time = millis(); 41 | tft.fillScreen(BLACK); 42 | time = millis() - time; 43 | 44 | Serial.println(time, DEC); 45 | delay(500); 46 | 47 | // large block of text 48 | tft.fillScreen(BLACK); 49 | testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", WHITE); 50 | delay(1000); 51 | 52 | // tft print function 53 | tftPrintTest(); 54 | delay(4000); 55 | 56 | // a single pixel 57 | tft.drawPixel(tft.width()/2, tft.height()/2, GREEN); 58 | delay(500); 59 | 60 | // line draw test 61 | testlines(YELLOW); 62 | delay(500); 63 | 64 | // optimized lines 65 | testfastlines(RED, BLUE); 66 | delay(500); 67 | 68 | testdrawrects(GREEN); 69 | delay(500); 70 | 71 | testfillrects(YELLOW, MAGENTA); 72 | delay(500); 73 | 74 | tft.fillScreen(BLACK); 75 | testfillcircles(10, BLUE); 76 | testdrawcircles(10, WHITE); 77 | delay(500); 78 | 79 | testroundrects(); 80 | delay(500); 81 | 82 | testtriangles(); 83 | delay(500); 84 | 85 | mediabuttons(); 86 | delay(500); 87 | 88 | Serial.println("done"); 89 | delay(1000); 90 | } 91 | 92 | void loop() { 93 | tft.invertDisplay(true); 94 | delay(500); 95 | tft.invertDisplay(false); 96 | delay(500); 97 | } 98 | 99 | void testlines(uint16_t color) { 100 | tft.fillScreen(BLACK); 101 | for (int16_t x=0; x < tft.width(); x+=6) { 102 | tft.drawLine(0, 0, x, tft.height()-1, color); 103 | } 104 | for (int16_t y=0; y < tft.height(); y+=6) { 105 | tft.drawLine(0, 0, tft.width()-1, y, color); 106 | } 107 | 108 | tft.fillScreen(BLACK); 109 | for (int16_t x=0; x < tft.width(); x+=6) { 110 | tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); 111 | } 112 | for (int16_t y=0; y < tft.height(); y+=6) { 113 | tft.drawLine(tft.width()-1, 0, 0, y, color); 114 | } 115 | 116 | tft.fillScreen(BLACK); 117 | for (int16_t x=0; x < tft.width(); x+=6) { 118 | tft.drawLine(0, tft.height()-1, x, 0, color); 119 | } 120 | for (int16_t y=0; y < tft.height(); y+=6) { 121 | tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); 122 | } 123 | 124 | tft.fillScreen(BLACK); 125 | for (int16_t x=0; x < tft.width(); x+=6) { 126 | tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); 127 | } 128 | for (int16_t y=0; y < tft.height(); y+=6) { 129 | tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); 130 | } 131 | } 132 | 133 | void testdrawtext(char *text, uint16_t color) { 134 | tft.setCursor(0, 0); 135 | tft.setTextColor(color); 136 | tft.setTextWrap(true); 137 | tft.print(text); 138 | } 139 | 140 | void testfastlines(uint16_t color1, uint16_t color2) { 141 | tft.fillScreen(BLACK); 142 | for (int16_t y=0; y < tft.height(); y+=5) { 143 | tft.drawFastHLine(0, y, tft.width(), color1); 144 | } 145 | for (int16_t x=0; x < tft.width(); x+=5) { 146 | tft.drawFastVLine(x, 0, tft.height(), color2); 147 | } 148 | } 149 | 150 | void testdrawrects(uint16_t color) { 151 | tft.fillScreen(BLACK); 152 | for (int16_t x=0; x < tft.width(); x+=6) { 153 | tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); 154 | } 155 | } 156 | 157 | void testfillrects(uint16_t color1, uint16_t color2) { 158 | tft.fillScreen(BLACK); 159 | for (int16_t x=tft.width()-1; x > 6; x-=6) { 160 | tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); 161 | tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); 162 | } 163 | } 164 | 165 | void testfillcircles(uint8_t radius, uint16_t color) { 166 | for (int16_t x=radius; x < tft.width(); x+=radius*2) { 167 | for (int16_t y=radius; y < tft.height(); y+=radius*2) { 168 | tft.fillCircle(x, y, radius, color); 169 | } 170 | } 171 | } 172 | 173 | void testdrawcircles(uint8_t radius, uint16_t color) { 174 | for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { 175 | for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { 176 | tft.drawCircle(x, y, radius, color); 177 | } 178 | } 179 | } 180 | 181 | void testtriangles() { 182 | tft.fillScreen(BLACK); 183 | int color = 0xF800; 184 | int t; 185 | int w = tft.width()/2; 186 | int x = tft.height()-1; 187 | int y = 0; 188 | int z = tft.width(); 189 | for(t = 0 ; t <= 15; t++) { 190 | tft.drawTriangle(w, y, y, x, z, x, color); 191 | x-=4; 192 | y+=4; 193 | z-=4; 194 | color+=100; 195 | } 196 | } 197 | 198 | void testroundrects() { 199 | tft.fillScreen(BLACK); 200 | int color = 100; 201 | int i; 202 | int t; 203 | for(t = 0 ; t <= 4; t+=1) { 204 | int x = 0; 205 | int y = 0; 206 | int w = tft.width()-2; 207 | int h = tft.height()-2; 208 | for(i = 0 ; i <= 16; i+=1) { 209 | tft.drawRoundRect(x, y, w, h, 5, color); 210 | x+=2; 211 | y+=3; 212 | w-=4; 213 | h-=6; 214 | color+=1100; 215 | } 216 | color+=100; 217 | } 218 | } 219 | 220 | void tftPrintTest() { 221 | tft.setTextWrap(false); 222 | tft.fillScreen(BLACK); 223 | tft.setCursor(0, 30); 224 | tft.setTextColor(RED); 225 | tft.setTextSize(1); 226 | tft.println("Hello World!"); 227 | tft.setTextColor(YELLOW); 228 | tft.setTextSize(2); 229 | tft.println("Hello World!"); 230 | tft.setTextColor(GREEN); 231 | tft.setTextSize(3); 232 | tft.println("Hello World!"); 233 | tft.setTextColor(BLUE); 234 | tft.setTextSize(4); 235 | tft.print(1234.567); 236 | delay(1500); 237 | tft.setCursor(0, 0); 238 | tft.fillScreen(BLACK); 239 | tft.setTextColor(WHITE); 240 | tft.setTextSize(0); 241 | tft.println("Hello World!"); 242 | tft.setTextSize(1); 243 | tft.setTextColor(GREEN); 244 | tft.print(p, 6); 245 | tft.println(" Want pi?"); 246 | tft.println(" "); 247 | tft.print(8675309, HEX); // print 8,675,309 out in HEX! 248 | tft.println(" Print HEX!"); 249 | tft.println(" "); 250 | tft.setTextColor(WHITE); 251 | tft.println("Sketch has been"); 252 | tft.println("running for: "); 253 | tft.setTextColor(MAGENTA); 254 | tft.print(millis() / 1000); 255 | tft.setTextColor(WHITE); 256 | tft.print(" seconds."); 257 | } 258 | 259 | void mediabuttons() { 260 | // play 261 | tft.fillScreen(BLACK); 262 | tft.fillRoundRect(25, 10, 78, 60, 8, WHITE); 263 | tft.fillTriangle(42, 20, 42, 60, 90, 40, RED); 264 | delay(500); 265 | // pause 266 | tft.fillRoundRect(25, 90, 78, 60, 8, WHITE); 267 | tft.fillRoundRect(39, 98, 20, 45, 5, GREEN); 268 | tft.fillRoundRect(69, 98, 20, 45, 5, GREEN); 269 | delay(500); 270 | // play color 271 | tft.fillTriangle(42, 20, 42, 60, 90, 40, BLUE); 272 | delay(50); 273 | // pause color 274 | tft.fillRoundRect(39, 98, 20, 45, 5, RED); 275 | tft.fillRoundRect(69, 98, 20, 45, 5, RED); 276 | // play color 277 | tft.fillTriangle(42, 20, 42, 60, 90, 40, GREEN); 278 | } 279 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=st7789v-arduino 2 | version=0.1 3 | author=Kamran Gasimov 4 | maintainer=Kamran Gasimov 5 | sentence=This is a library for the ST7789 IPS SPI display. 6 | paragraph=This is a library for the ST7789 IPS SPI display. 7 | category=Display 8 | url=https://github.com/deirvlon/ST7789v-Arduino 9 | architectures=* 10 | --------------------------------------------------------------------------------