--- /dev/null
+#include <Arduino.h>
+#include <Wire.h>
+#include <Adafruit_SSD1306.h>
+#include "sprites.h"
+
+#define SCREEN_WIDTH 128
+#define SCREEN_HEIGHT 32
+#define SCREEN_ADDRS 0x3C
+
+// Coordinate system is origin top left, x going right, y going down
+
+typedef struct {
+ // in pixels
+ int x;
+ int y;
+ int w;
+ int h;
+} t_swatch;
+
+#define S_COUNT 24
+static t_swatch swatches[S_COUNT] =
+{
+ // 0-9
+ t_swatch{0, 0, 8, 16},
+ t_swatch{8, 0, 8, 16},
+ t_swatch{16, 0, 8, 16},
+ t_swatch{24, 0, 8, 16},
+ t_swatch{32, 0, 8, 16},
+ t_swatch{40, 0, 8, 16},
+ t_swatch{48, 0, 8, 16},
+ t_swatch{56, 0, 8, 16},
+ t_swatch{64, 0, 8, 16},
+ t_swatch{72, 0, 8, 16},
+ // small 0-9
+ t_swatch{80, 0, 4, 8},
+ t_swatch{80, 8, 4, 8},
+ t_swatch{84, 0, 4, 8},
+ t_swatch{84, 8, 4, 8},
+ t_swatch{88, 0, 4, 8},
+ t_swatch{88, 8, 4, 8},
+ t_swatch{92, 0, 4, 8},
+ t_swatch{92, 8, 4, 8},
+ t_swatch{96, 0, 4, 8},
+ t_swatch{96, 8, 4, 8},
+ // gmt, +, -
+ t_swatch{100, 0, 16, 8},
+ t_swatch{100, 8, 4, 4},
+ t_swatch{100, 12, 4, 4},
+ // :
+ t_swatch{116, 0, 4, 16},
+};
+
+#define S_ZERO 0
+#define S_ONE 1
+#define S_TWO 2
+#define S_THREE 3
+#define S_FOUR 4
+#define S_FIVE 5
+#define S_SIX 6
+#define S_SEVEN 7
+#define S_EIGHT 8
+#define S_NINE 9
+#define S_ZERO_SM 10
+#define S_ONE_SM 11
+#define S_TWO_SM 12
+#define S_THREE_SM 13
+#define S_FOUR_SM 14
+#define S_FIVE_SM 15
+#define S_SIX_SM 16
+#define S_SEVEN_SM 17
+#define S_EIGHT_SM 18
+#define S_NINE_SM 19
+#define S_GMT 20
+#define S_PLUS 21
+#define S_MINUS 22
+#define S_COLON 23
+
+void drawSwatch(int x, int y, t_swatch swatch);
+void drawSwatchLine(int x, int y, int count, t_swatch *swatches);
+
+Adafruit_SSD1306 display;
+
+void setup() {
+ Wire.setPins(7,6);
+ display = Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
+ Serial.begin(9600);
+ // wait for display
+ delay(100);
+
+ if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRS)) {
+ while (true) {
+ Serial.println("dead");
+ delay(100);
+ }
+ }
+
+ display.clearDisplay();
+ display.display();
+ delay(100);
+}
+
+void loop() {
+
+ t_swatch mainLine[5] = {swatches[S_TWO], swatches[S_TWO], swatches[S_COLON], swatches[S_FOUR], swatches[S_SIX]};
+ drawSwatchLine(40, 8, 5, mainLine);
+
+ t_swatch timezone[3] = {swatches[S_GMT], swatches[S_PLUS], swatches[S_ONE_SM]};
+ drawSwatch(68, 20, timezone[0]);
+ drawSwatch(84, 22, timezone[1]);
+ drawSwatch(88, 20, timezone[2]);
+
+ display.display();
+ delay(1000);
+}
+
+void drawSwatch(int x, int y, t_swatch swatch) {
+ char* image;
+ int pixel[3] = {};
+ int maxx = x+swatch.w;
+ int maxy = y+swatch.h;
+ for (int dy = 0; dy < swatch.h; dy++) {
+ image = header_data + 4*(dy*width + swatch.x + swatch.y*width);
+ for (int dx = x; dx < maxx; dx++) {
+ HEADER_PIXEL(image, pixel);
+ if (pixel[0])
+ display.drawPixel(dx, y+dy, SSD1306_WHITE);
+ else
+ display.drawPixel(dx, y+dy, SSD1306_BLACK);
+ }
+ }
+}
+
+void drawSwatchLine(int x, int y, int count, t_swatch *swatches) {
+ for (int i = 0; i < count ; i++) {
+ drawSwatch(x, y, swatches[i]);
+ x += swatches[i].w;
+ }
+}
--- /dev/null
+/* GIMP header image file format (RGB): /home/Fl_GUI/repos/unitime/src/sprites.h */
+
+static unsigned int width = 128;
+static unsigned int height = 32;
+
+/* Call this macro repeatedly. After each use, the pixel data can be extracted */
+
+#define HEADER_PIXEL(data,pixel) {\
+pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
+pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
+pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
+data += 4; \
+}
+static char *header_data =
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!````````````````!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````````````````````!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!````````````````````````!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!````````````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!!!!!````````````!!!!!!!!"
+ "!!!!````````````````````````!!!!!!!!````````````````````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````````````````````!!!!"
+ "!!!!````````````````````````!!!!!!!!````````````````````````!!!!"
+ "!!!!````````````````````````!!!!!!!!````````````````````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````!!!!````!!!!````````````"
+ "!!!!````````!!!!!!!!_@HZ_@HZ````````!!!!````!!!!!!!!_@HZ!!!!_@HZ"
+ "_@HZ_@HZ_@HZ_@HZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````````````!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````!!!!````!!!!!!!!!!!!````!!!!````!!!!````!!!!````!!!!!!!!"
+ "!!!!````!!!!````!!!!_@HZ!!!!!!!!!!!!!!!!````````_@HZ_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````````````````!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````!!!!````!!!!!!!!!!!!````!!!!````!!!!````!!!!````!!!!!!!!"
+ "!!!!````!!!!````!!!!_@HZ!!!!!!!!!!!!!!!!````!!!!!!!!_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!````````````````````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````!!!!````!!!!````````!!!!!!!!````````````!!!!````````````"
+ "!!!!````````````!!!!_@HZ!!!!````````!!!!````!!!!!!!!_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!````````````````````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````!!!!````!!!!````!!!!!!!!!!!!!!!!!!!!````!!!!````!!!!````"
+ "!!!!````!!!!````!!!!_@HZ!!!!!!!!_@HZ!!!!````!!!!!!!!_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!````````````!!!!!!!!!!!!!!!!!!!!!!!!````````````"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````````````!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!````!!!!````!!!!````!!!!!!!!!!!!!!!!!!!!````!!!!````!!!!````"
+ "!!!!````!!!!````!!!!_@HZ!!!!!!!!_@HZ!!!!````!!!!!!!!_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!!!!!````````````!!!!!!!!!!!!!!!!!!!!````````````````!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````````````````!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!````````````````````````!!!!"
+ "!!!!````````````!!!!````````````!!!!!!!!!!!!````!!!!````````!!!!"
+ "!!!!````````!!!!!!!!_@HZ_@HZ_@HZ_@HZ!!!!````!!!!!!!!_@HZ!!!!!!!!"
+ "!!!!_@HZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!````````````````!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!````````````!!!!!!!!"
+ "!!!!````````````````````!!!!!!!!!!!!!!!!!!!!````````````!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!````````````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````````"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````````!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!````````````!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!````````!!!!!!!!````````````!!!!````````````"
+ "!!!!````````#!A)!!!!!!!!````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!````!!!!````!!!!!!!!!!!!!!!!!!!!````"
+ "!!!!````!!!!````!!!!````````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!!!!!!!!!````!!!!````!!!!!!!!!!!!!!!!!!!!````"
+ "!!!!````!!!!````!!!!!!!!````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!````````"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````````!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!````````!!!!!!!!!!!!````````!!!!!!!!````!!!!"
+ "!!!!````````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!````````````!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!````````!!!!!!!!````````!!!!!!!!!!!!````````````!!!!!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!!!!!!!!!````!!!!!!!!!!!!````!!!!!!!!````!!!!"
+ "!!!!!!!!!!!!````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!````````````````````!!!!"
+ "!!!!````````````````````!!!!!!!!!!!!````````````````````````!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````````````````!!!!!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!!!!!!!!!````!!!!!!!!!!!!````!!!!!!!!````!!!!"
+ "!!!!!!!!!!!!````!!!!````````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!````````````````````````!!!!"
+ "!!!!````````````````````````!!!!!!!!!!!!````````````````!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!````````!!!!!!!!````````````````!!!!!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!!!!!````````````````!!!!!!!!!!!!!!!!````````!!!!!!!!!!!!!!!!"
+ "!!!!!!!!````!!!!!!!!````````````!!!!````````!!!!!!!!!!!!````!!!!"
+ "!!!!````````!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ "";