From da54c87173201e17e29a67c63b005db94c5362ce Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Wed, 27 May 2015 19:44:14 +1000 Subject: [PATCH] Added Adafruit_SSD1306 and OLED_I2C libs ported by @Madias --- .../Adafruit_SSD1306_STM32.cpp | 777 ++++++++++++++++ .../Adafruit_SSD1306/Adafruit_SSD1306_STM32.h | 172 ++++ STM32F1/libraries/Adafruit_SSD1306/README.txt | 24 + .../Adafruit_SSD1306/STM32 README.txt | 6 + .../ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino | 357 ++++++++ .../ssd1306_128x32_spi/ssd1306_128x32_spi.ino | 368 ++++++++ .../ssd1306_128x64_i2c_STM32.ino | 362 ++++++++ .../ssd1306_128x64_spi/ssd1306_128x64_spi.ino | 368 ++++++++ .../libraries/Adafruit_SSD1306/license.txt | 26 + STM32F1/libraries/OLED_I2C/DefaultFonts.c | 168 ++++ .../OLED_I2C/Documentation/OLED_I2C.pdf | Bin 0 -> 115762 bytes .../OLED_I2C/Documentation/version.txt | 3 + .../License - CC BY-NC-SA 3.0 - Legal.pdf | Bin 0 -> 150761 bytes .../License - CC BY-NC-SA 3.0 - Summary.pdf | Bin 0 -> 109586 bytes STM32F1/libraries/OLED_I2C/OLED_I2C.cpp | 862 ++++++++++++++++++ STM32F1/libraries/OLED_I2C/OLED_I2C.h | 162 ++++ .../OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.ino | 158 ++++ .../OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino | 81 ++ .../Arduino/OLED_I2C_Bitmap/graphics.c | 112 +++ .../OLED_I2C_Brightness.ino | 64 ++ .../OLED_I2C_Graph_Demo.ino | 195 ++++ .../Arduino/OLED_I2C_Graph_Demo/graphics.c | 89 ++ .../OLED_I2C_NumberFonts.ino | 79 ++ .../OLED_I2C_Scrolling_Text.ino | 64 ++ .../OLED_I2C_TinyFont_View.ino | 65 ++ .../OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino | 83 ++ .../OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.pde | 148 +++ .../OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino | 71 ++ .../chipKit/OLED_I2C_Bitmap/graphics.c | 110 +++ .../OLED_I2C_Brightness.ino | 54 ++ .../OLED_I2C_Graph_Demo.ino | 185 ++++ .../chipKit/OLED_I2C_Graph_Demo/graphics.c | 87 ++ .../OLED_I2C_NumberFonts.ino | 69 ++ .../OLED_I2C_Scrolling_Text.ino | 54 ++ .../OLED_I2C_TinyFont_View.ino | 55 ++ .../OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino | 73 ++ .../libraries/OLED_I2C/hardware/arm/HW_ARM.h | 127 +++ .../OLED_I2C/hardware/arm/HW_ARM_defines.h | 22 + .../OLED_I2C/hardware/arm/HW_STM32.h | 168 ++++ .../OLED_I2C/hardware/arm/HW_STM32_defines.h | 22 + .../libraries/OLED_I2C/hardware/avr/HW_AVR.h | 103 +++ .../OLED_I2C/hardware/avr/HW_AVR_defines.h | 14 + .../OLED_I2C/hardware/pic32/HW_PIC32.h | 121 +++ .../hardware/pic32/HW_PIC32_defines.h | 30 + STM32F1/libraries/OLED_I2C/keywords.txt | 31 + 45 files changed, 6189 insertions(+) create mode 100644 STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.cpp create mode 100644 STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.h create mode 100644 STM32F1/libraries/Adafruit_SSD1306/README.txt create mode 100644 STM32F1/libraries/Adafruit_SSD1306/STM32 README.txt create mode 100644 STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino create mode 100644 STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x32_spi/ssd1306_128x32_spi.ino create mode 100644 STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x64_i2c_STM32/ssd1306_128x64_i2c_STM32.ino create mode 100644 STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x64_spi/ssd1306_128x64_spi.ino create mode 100644 STM32F1/libraries/Adafruit_SSD1306/license.txt create mode 100644 STM32F1/libraries/OLED_I2C/DefaultFonts.c create mode 100644 STM32F1/libraries/OLED_I2C/Documentation/OLED_I2C.pdf create mode 100644 STM32F1/libraries/OLED_I2C/Documentation/version.txt create mode 100644 STM32F1/libraries/OLED_I2C/License/License - CC BY-NC-SA 3.0 - Legal.pdf create mode 100644 STM32F1/libraries/OLED_I2C/License/License - CC BY-NC-SA 3.0 - Summary.pdf create mode 100644 STM32F1/libraries/OLED_I2C/OLED_I2C.cpp create mode 100644 STM32F1/libraries/OLED_I2C/OLED_I2C.h create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/graphics.c create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Brightness/OLED_I2C_Brightness.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/graphics.c create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.pde create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/graphics.c create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Brightness/OLED_I2C_Brightness.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/graphics.c create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino create mode 100644 STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino create mode 100644 STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM_defines.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32_defines.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR_defines.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32.h create mode 100644 STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32_defines.h create mode 100644 STM32F1/libraries/OLED_I2C/keywords.txt diff --git a/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.cpp b/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.cpp new file mode 100644 index 0000000..c0c24a0 --- /dev/null +++ b/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.cpp @@ -0,0 +1,777 @@ +/********************************************************************* +This is a library for our Monochrome OLEDs based on SSD1306 drivers + + Pick one up today in the adafruit shop! + ------> http://www.adafruit.com/category/63_98 + +These displays use SPI to communicate, 4 or 5 pins are required to +interface + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen below must be included in any redistribution +*********************************************************************/ + +#include +//#ifndef __SAM3X8E__ || __STM32F1__ + //#include +//#endif +#include + +//#include +#include +//HardWire HWIRE(1,I2C_FAST_MODE); // I2c1 +HardWire HWIRE(2,I2C_FAST_MODE); // I2c2 +#include "Adafruit_GFX.h" +#include "Adafruit_SSD1306_STM32.h" + +// the memory buffer for the LCD + +static uint8_t buffer[SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH / 8] = { +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, +0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x80, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, +0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF, +#if (SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH > 96*16) +0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, +0x80, 0xFF, 0xFF, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x8C, 0x8E, 0x84, 0x00, 0x00, 0x80, 0xF8, +0xF8, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, +0x00, 0xE0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0x01, 0x01, +0x01, 0x01, 0x83, 0xFF, 0xFF, 0x00, 0x00, 0x7C, 0xFE, 0xC7, 0x01, 0x01, 0x01, 0x01, 0x83, 0xFF, +0xFF, 0xFF, 0x00, 0x38, 0xFE, 0xC7, 0x83, 0x01, 0x01, 0x01, 0x83, 0xC7, 0xFF, 0xFF, 0x00, 0x00, +0x01, 0xFF, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x7F, 0xFF, +0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, +0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x8F, +0x8F, 0x9F, 0xBF, 0xFF, 0xFF, 0xC3, 0xC0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, +0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x01, 0x03, 0x03, 0x03, +0x03, 0x03, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, +0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, +0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, +0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +#if (SSD1306_LCDHEIGHT == 64) +0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F, +0x87, 0xC7, 0xF7, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0x7C, 0x7D, 0xFF, +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x00, 0x30, 0x30, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F, +0x0F, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, +0x00, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0E, +0x06, 0x06, 0x06, 0x0C, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFC, +0xFE, 0xFC, 0x00, 0x18, 0x3C, 0x7E, 0x66, 0xE6, 0xCE, 0x84, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x06, +0x06, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x06, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xC0, 0xF8, +0xFC, 0x4E, 0x46, 0x46, 0x46, 0x4E, 0x7C, 0x78, 0x40, 0x18, 0x3C, 0x76, 0xE6, 0xCE, 0xCC, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x0F, 0x03, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, +0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x0C, +0x18, 0x18, 0x0C, 0x06, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, +0x07, 0x01, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, +0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x07, +0x07, 0x0C, 0x0C, 0x18, 0x1C, 0x0C, 0x06, 0x06, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +#endif +#endif +}; + + + +// the most basic function, set a single pixel +void Adafruit_SSD1306::drawPixel(int16_t x, int16_t y, uint16_t color) { + if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) + return; + + // check rotation, move pixel around if necessary + switch (getRotation()) { + case 1: + swap(x, y); + x = WIDTH - x - 1; + break; + case 2: + x = WIDTH - x - 1; + y = HEIGHT - y - 1; + break; + case 3: + swap(x, y); + y = HEIGHT - y - 1; + break; + } + + // x is which column + switch (color) + { + case WHITE: buffer[x+ (y/8)*SSD1306_LCDWIDTH] |= (1 << (y&7)); break; + case BLACK: buffer[x+ (y/8)*SSD1306_LCDWIDTH] &= ~(1 << (y&7)); break; + case INVERSE: buffer[x+ (y/8)*SSD1306_LCDWIDTH] ^= (1 << (y&7)); break; + } + +} + +Adafruit_SSD1306::Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS) : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) { + cs = CS; + rst = RST; + dc = DC; + sclk = SCLK; + sid = SID; + hwSPI = false; +} + +// constructor for hardware SPI - we indicate DataCommand, ChipSelect, Reset +Adafruit_SSD1306::Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS) : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) { + dc = DC; + rst = RST; + cs = CS; + hwSPI = true; +} + +// initializer for I2C - we only indicate the reset pin! +Adafruit_SSD1306::Adafruit_SSD1306(int8_t reset) : +Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT) { + sclk = dc = cs = sid = -1; + rst = reset; +} + + +void Adafruit_SSD1306::begin(uint8_t vccstate, uint8_t i2caddr, bool reset) { + _vccstate = vccstate; + _i2caddr = i2caddr; + + // set pin directions + if (sid != -1){ + pinMode(dc, OUTPUT); + pinMode(cs, OUTPUT); + csport = portOutputRegister(digitalPinToPort(cs)); + cspinmask = digitalPinToBitMask(cs); + dcport = portOutputRegister(digitalPinToPort(dc)); + dcpinmask = digitalPinToBitMask(dc); + if (!hwSPI){ + // set pins for software-SPI + pinMode(sid, OUTPUT); + pinMode(sclk, OUTPUT); + clkport = portOutputRegister(digitalPinToPort(sclk)); + clkpinmask = digitalPinToBitMask(sclk); + mosiport = portOutputRegister(digitalPinToPort(sid)); + mosipinmask = digitalPinToBitMask(sid); + } + if (hwSPI){ + SPI.begin (); +//#ifdef __SAM3X8E__ + SPI.setClockDivider (9); // 9.3 MHz +//#else + // SPI.setClockDivider (SPI_CLOCK_DIV2); // 8 MHz +//#endif + } + } + else + { + // I2C Init + HWIRE.begin(); + +#ifdef __SAM3X8E__ + // Force 400 KHz I2C, rawr! (Uses pins 20, 21 for SDA, SCL) + TWI1->TWI_CWGR = 0; + TWI1->TWI_CWGR = ((VARIANT_MCK / (2 * 400000)) - 4) * 0x101; +#endif + } + + if (reset) { + // Setup reset pin direction (used by both SPI and I2C) + pinMode(rst, OUTPUT); + digitalWrite(rst, HIGH); + // VDD (3.3V) goes high at start, lets just chill for a ms + delay(1); + // bring reset low + digitalWrite(rst, LOW); + // wait 10ms + delay(10); + // bring out of reset + digitalWrite(rst, HIGH); + // turn on VCC (9V?) + } + + #if defined SSD1306_128_32 + // Init sequence for 128x32 OLED module + ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE + ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 + ssd1306_command(0x80); // the suggested ratio 0x80 + ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 + ssd1306_command(0x1F); + ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 + ssd1306_command(0x0); // no offset + ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 + ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x10); } + else + { ssd1306_command(0x14); } + ssd1306_command(SSD1306_MEMORYMODE); // 0x20 + ssd1306_command(0x00); // 0x0 act like ks0108 + ssd1306_command(SSD1306_SEGREMAP | 0x1); + ssd1306_command(SSD1306_COMSCANDEC); + ssd1306_command(SSD1306_SETCOMPINS); // 0xDA + ssd1306_command(0x02); + ssd1306_command(SSD1306_SETCONTRAST); // 0x81 + ssd1306_command(0x8F); + ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x22); } + else + { ssd1306_command(0xF1); } + ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB + ssd1306_command(0x40); + ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 + ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 + #endif + + #if defined SSD1306_128_64 + // Init sequence for 128x64 OLED module + ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE + ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 + ssd1306_command(0x80); // the suggested ratio 0x80 + ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 + ssd1306_command(0x3F); + ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 + ssd1306_command(0x0); // no offset + ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 + ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x10); } + else + { ssd1306_command(0x14); } + ssd1306_command(SSD1306_MEMORYMODE); // 0x20 + ssd1306_command(0x00); // 0x0 act like ks0108 + ssd1306_command(SSD1306_SEGREMAP | 0x1); + ssd1306_command(SSD1306_COMSCANDEC); + ssd1306_command(SSD1306_SETCOMPINS); // 0xDA + ssd1306_command(0x12); + ssd1306_command(SSD1306_SETCONTRAST); // 0x81 + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x9F); } + else + { ssd1306_command(0xCF); } + ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x22); } + else + { ssd1306_command(0xF1); } + ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB + ssd1306_command(0x40); + ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 + ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 + #endif + + #if defined SSD1306_96_16 + // Init sequence for 96x16 OLED module + ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE + ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 + ssd1306_command(0x80); // the suggested ratio 0x80 + ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 + ssd1306_command(0x0F); + ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 + ssd1306_command(0x00); // no offset + ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 + ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x10); } + else + { ssd1306_command(0x14); } + ssd1306_command(SSD1306_MEMORYMODE); // 0x20 + ssd1306_command(0x00); // 0x0 act like ks0108 + ssd1306_command(SSD1306_SEGREMAP | 0x1); + ssd1306_command(SSD1306_COMSCANDEC); + ssd1306_command(SSD1306_SETCOMPINS); // 0xDA + ssd1306_command(0x2); //ada x12 + ssd1306_command(SSD1306_SETCONTRAST); // 0x81 + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x10); } + else + { ssd1306_command(0xAF); } + ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 + if (vccstate == SSD1306_EXTERNALVCC) + { ssd1306_command(0x22); } + else + { ssd1306_command(0xF1); } + ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB + ssd1306_command(0x40); + ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 + ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 + #endif + + ssd1306_command(SSD1306_DISPLAYON);//--turn on oled panel +} + + +void Adafruit_SSD1306::invertDisplay(uint8_t i) { + if (i) { + ssd1306_command(SSD1306_INVERTDISPLAY); + } else { + ssd1306_command(SSD1306_NORMALDISPLAY); + } +} + +void Adafruit_SSD1306::ssd1306_command(uint8_t c) { + if (sid != -1) + { + // SPI + //digitalWrite(cs, HIGH); + *csport |= cspinmask; + //digitalWrite(dc, LOW); + *dcport &= ~dcpinmask; + //digitalWrite(cs, LOW); + *csport &= ~cspinmask; + fastSPIwrite(c); + //digitalWrite(cs, HIGH); + *csport |= cspinmask; + } + else + { + // I2C + uint8_t control = 0x00; // Co = 0, D/C = 0 + HWIRE.beginTransmission(_i2caddr); + WIRE_WRITE(control); + WIRE_WRITE(c); + HWIRE.endTransmission(); + } +} + +// startscrollright +// Activate a right handed scroll for rows start through stop +// Hint, the display is 16 rows tall. To scroll the whole display, run: +// display.scrollright(0x00, 0x0F) +void Adafruit_SSD1306::startscrollright(uint8_t start, uint8_t stop){ + ssd1306_command(SSD1306_RIGHT_HORIZONTAL_SCROLL); + ssd1306_command(0X00); + ssd1306_command(start); + ssd1306_command(0X0F); + ssd1306_command(stop); + ssd1306_command(0X00); + ssd1306_command(0XFF); + ssd1306_command(SSD1306_ACTIVATE_SCROLL); +} + +// startscrollleft +// Activate a right handed scroll for rows start through stop +// Hint, the display is 16 rows tall. To scroll the whole display, run: +// display.scrollright(0x00, 0x0F) +void Adafruit_SSD1306::startscrollleft(uint8_t start, uint8_t stop){ + ssd1306_command(SSD1306_LEFT_HORIZONTAL_SCROLL); + ssd1306_command(0X00); + ssd1306_command(start); + ssd1306_command(7); + ssd1306_command(stop); + ssd1306_command(0X00); + ssd1306_command(0XFF); + ssd1306_command(SSD1306_ACTIVATE_SCROLL); +} + +// startscrolldiagright +// Activate a diagonal scroll for rows start through stop +// Hint, the display is 16 rows tall. To scroll the whole display, run: +// display.scrollright(0x00, 0x0F) +void Adafruit_SSD1306::startscrolldiagright(uint8_t start, uint8_t stop){ + ssd1306_command(SSD1306_SET_VERTICAL_SCROLL_AREA); + ssd1306_command(0X00); + ssd1306_command(SSD1306_LCDHEIGHT); + ssd1306_command(SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL); + ssd1306_command(0X00); + ssd1306_command(start); + ssd1306_command(0X00); + ssd1306_command(stop); + ssd1306_command(0X01); + ssd1306_command(SSD1306_ACTIVATE_SCROLL); +} + +// startscrolldiagleft +// Activate a diagonal scroll for rows start through stop +// Hint, the display is 16 rows tall. To scroll the whole display, run: +// display.scrollright(0x00, 0x0F) +void Adafruit_SSD1306::startscrolldiagleft(uint8_t start, uint8_t stop){ + ssd1306_command(SSD1306_SET_VERTICAL_SCROLL_AREA); + ssd1306_command(0X00); + ssd1306_command(SSD1306_LCDHEIGHT); + ssd1306_command(SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL); + ssd1306_command(0X00); + ssd1306_command(start); + ssd1306_command(0X00); + ssd1306_command(stop); + ssd1306_command(0X01); + ssd1306_command(SSD1306_ACTIVATE_SCROLL); +} + +void Adafruit_SSD1306::stopscroll(void){ + ssd1306_command(SSD1306_DEACTIVATE_SCROLL); +} + +// Dim the display +// dim = true: display is dimmed +// dim = false: display is normal +void Adafruit_SSD1306::dim(boolean dim) { + uint8_t contrast; + + if (dim) { + contrast = 0; // Dimmed display + } else { + if (_vccstate == SSD1306_EXTERNALVCC) { + contrast = 0x9F; + } else { + contrast = 0xCF; + } + } + // the range of contrast to too small to be really useful + // it is useful to dim the display + ssd1306_command(SSD1306_SETCONTRAST); + ssd1306_command(contrast); +} + +void Adafruit_SSD1306::ssd1306_data(uint8_t c) { + if (sid != -1) + { + // SPI + //digitalWrite(cs, HIGH); + *csport |= cspinmask; + //digitalWrite(dc, HIGH); + *dcport |= dcpinmask; + //digitalWrite(cs, LOW); + *csport &= ~cspinmask; + fastSPIwrite(c); + //digitalWrite(cs, HIGH); + *csport |= cspinmask; + } + else + { + // I2C + uint8_t control = 0x40; // Co = 0, D/C = 1 + HWIRE.beginTransmission(_i2caddr); + WIRE_WRITE(control); + WIRE_WRITE(c); + HWIRE.endTransmission(); + } +} + +void Adafruit_SSD1306::display(void) { + ssd1306_command(SSD1306_COLUMNADDR); + ssd1306_command(0); // Column start address (0 = reset) + ssd1306_command(SSD1306_LCDWIDTH-1); // Column end address (127 = reset) + + ssd1306_command(SSD1306_PAGEADDR); + ssd1306_command(0); // Page start address (0 = reset) + #if SSD1306_LCDHEIGHT == 64 + ssd1306_command(7); // Page end address + #endif + #if SSD1306_LCDHEIGHT == 32 + ssd1306_command(3); // Page end address + #endif + #if SSD1306_LCDHEIGHT == 16 + ssd1306_command(1); // Page end address + #endif + + if (sid != -1) + { + // SPI + *csport |= cspinmask; + *dcport |= dcpinmask; + *csport &= ~cspinmask; + + for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) { + fastSPIwrite(buffer[i]); + //ssd1306_data(buffer[i]); + } + *csport |= cspinmask; + } + else + { + // save I2C bitrate + /* +#ifndef __SAM3X8E__ + uint8_t twbrbackup = TWBR; + TWBR = 12; // upgrade to 400KHz! +#endif +*/ + //Serial.println(TWBR, DEC); + //Serial.println(TWSR & 0x3, DEC); + + // I2C + for (uint16_t i=0; i<(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8); i++) { + // send a bunch of data in one xmission + HWIRE.beginTransmission(_i2caddr); + WIRE_WRITE(0x40); + for (uint8_t x=0; x<16; x++) { + WIRE_WRITE(buffer[i]); + i++; + } + i--; + HWIRE.endTransmission(); + } +/* +#ifndef __SAM3X8E__ + TWBR = twbrbackup; +#endif + */ + } +} + +// clear everything +void Adafruit_SSD1306::clearDisplay(void) { + memset(buffer, 0, (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)); +} + + +inline void Adafruit_SSD1306::fastSPIwrite(uint8_t d) { + + if(hwSPI) { + (void)SPI.transfer(d); + } else { + for(uint8_t bit = 0x80; bit; bit >>= 1) { + *clkport &= ~clkpinmask; + if(d & bit) *mosiport |= mosipinmask; + else *mosiport &= ~mosipinmask; + *clkport |= clkpinmask; + } + } + //*csport |= cspinmask; +} + +void Adafruit_SSD1306::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { + boolean bSwap = false; + switch(rotation) { + case 0: + // 0 degree rotation, do nothing + break; + case 1: + // 90 degree rotation, swap x & y for rotation, then invert x + bSwap = true; + swap(x, y); + x = WIDTH - x - 1; + break; + case 2: + // 180 degree rotation, invert x and y - then shift y around for height. + x = WIDTH - x - 1; + y = HEIGHT - y - 1; + x -= (w-1); + break; + case 3: + // 270 degree rotation, swap x & y for rotation, then invert y and adjust y for w (not to become h) + bSwap = true; + swap(x, y); + y = HEIGHT - y - 1; + y -= (w-1); + break; + } + + if(bSwap) { + drawFastVLineInternal(x, y, w, color); + } else { + drawFastHLineInternal(x, y, w, color); + } +} + +void Adafruit_SSD1306::drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) { + // Do bounds/limit checks + if(y < 0 || y >= HEIGHT) { return; } + + // make sure we don't try to draw below 0 + if(x < 0) { + w += x; + x = 0; + } + + // make sure we don't go off the edge of the display + if( (x + w) > WIDTH) { + w = (WIDTH - x); + } + + // if our width is now negative, punt + if(w <= 0) { return; } + + // set up the pointer for movement through the buffer + register uint8_t *pBuf = buffer; + // adjust the buffer pointer for the current row + pBuf += ((y/8) * SSD1306_LCDWIDTH); + // and offset x columns in + pBuf += x; + + register uint8_t mask = 1 << (y&7); + + switch (color) + { + case WHITE: while(w--) { *pBuf++ |= mask; }; break; + case BLACK: mask = ~mask; while(w--) { *pBuf++ &= mask; }; break; + case INVERSE: while(w--) { *pBuf++ ^= mask; }; break; + } +} + +void Adafruit_SSD1306::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) { + bool bSwap = false; + switch(rotation) { + case 0: + break; + case 1: + // 90 degree rotation, swap x & y for rotation, then invert x and adjust x for h (now to become w) + bSwap = true; + swap(x, y); + x = WIDTH - x - 1; + x -= (h-1); + break; + case 2: + // 180 degree rotation, invert x and y - then shift y around for height. + x = WIDTH - x - 1; + y = HEIGHT - y - 1; + y -= (h-1); + break; + case 3: + // 270 degree rotation, swap x & y for rotation, then invert y + bSwap = true; + swap(x, y); + y = HEIGHT - y - 1; + break; + } + + if(bSwap) { + drawFastHLineInternal(x, y, h, color); + } else { + drawFastVLineInternal(x, y, h, color); + } +} + + +void Adafruit_SSD1306::drawFastVLineInternal(int16_t x, int16_t __y, int16_t __h, uint16_t color) { + + // do nothing if we're off the left or right side of the screen + if(x < 0 || x >= WIDTH) { return; } + + // make sure we don't try to draw below 0 + if(__y < 0) { + // __y is negative, this will subtract enough from __h to account for __y being 0 + __h += __y; + __y = 0; + + } + + // make sure we don't go past the height of the display + if( (__y + __h) > HEIGHT) { + __h = (HEIGHT - __y); + } + + // if our height is now negative, punt + if(__h <= 0) { + return; + } + + // this display doesn't need ints for coordinates, use local byte registers for faster juggling + register uint8_t y = __y; + register uint8_t h = __h; + + + // set up the pointer for fast movement through the buffer + register uint8_t *pBuf = buffer; + // adjust the buffer pointer for the current row + pBuf += ((y/8) * SSD1306_LCDWIDTH); + // and offset x columns in + pBuf += x; + + // do the first partial byte, if necessary - this requires some masking + register uint8_t mod = (y&7); + if(mod) { + // mask off the high n bits we want to set + mod = 8-mod; + + // note - lookup table results in a nearly 10% performance improvement in fill* functions + // register uint8_t mask = ~(0xFF >> (mod)); + static uint8_t premask[8] = {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE }; + register uint8_t mask = premask[mod]; + + // adjust the mask if we're not going to reach the end of this byte + if( h < mod) { + mask &= (0XFF >> (mod-h)); + } + + switch (color) + { + case WHITE: *pBuf |= mask; break; + case BLACK: *pBuf &= ~mask; break; + case INVERSE: *pBuf ^= mask; break; + } + + // fast exit if we're done here! + if(h= 8) { + if (color == INVERSE) { // separate copy of the code so we don't impact performance of the black/white write version with an extra comparison per loop + do { + *pBuf=~(*pBuf); + + // adjust the buffer forward 8 rows worth of data + pBuf += SSD1306_LCDWIDTH; + + // adjust h & y (there's got to be a faster way for me to do this, but this should still help a fair bit for now) + h -= 8; + } while(h >= 8); + } + else { + // store a local value to work with + register uint8_t val = (color == WHITE) ? 255 : 0; + + do { + // write our value in + *pBuf = val; + + // adjust the buffer forward 8 rows worth of data + pBuf += SSD1306_LCDWIDTH; + + // adjust h & y (there's got to be a faster way for me to do this, but this should still help a fair bit for now) + h -= 8; + } while(h >= 8); + } + } + + // now do the final partial byte, if necessary + if(h) { + mod = h & 7; + // this time we want to mask the low bits of the byte, vs the high bits we did above + // register uint8_t mask = (1 << mod) - 1; + // note - lookup table results in a nearly 10% performance improvement in fill* functions + static uint8_t postmask[8] = {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F }; + register uint8_t mask = postmask[mod]; + switch (color) + { + case WHITE: *pBuf |= mask; break; + case BLACK: *pBuf &= ~mask; break; + case INVERSE: *pBuf ^= mask; break; + } + } +} diff --git a/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.h b/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.h new file mode 100644 index 0000000..0686d76 --- /dev/null +++ b/STM32F1/libraries/Adafruit_SSD1306/Adafruit_SSD1306_STM32.h @@ -0,0 +1,172 @@ +/********************************************************************* +This is a library for our Monochrome OLEDs based on SSD1306 drivers + + Pick one up today in the adafruit shop! + ------> http://www.adafruit.com/category/63_98 + +These displays use SPI to communicate, 4 or 5 pins are required to +interface + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen must be included in any redistribution +*********************************************************************/ + +#if ARDUINO >= 100 + #include "Arduino.h" + #define WIRE_WRITE HWIRE.write +#else + #include "WProgram.h" + #define WIRE_WRITE HWIRE.send +#endif +/* +#ifdef __SAM3X8E__ + typedef volatile RwReg PortReg; + typedef uint32_t PortMask; +#else + typedef volatile uint8_t PortReg; + typedef uint8_t PortMask; +#endif +*/ +//typedef volatile RwReg PortReg; +// typedef uint32_t PortMask; +#include +#include + +#define BLACK 0 +#define WHITE 1 +#define INVERSE 2 + +#define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D +// Address for 128x32 is 0x3C +// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded) + +/*========================================================================= + SSD1306 Displays + ----------------------------------------------------------------------- + The driver is used in multiple displays (128x64, 128x32, etc.). + Select the appropriate display below to create an appropriately + sized framebuffer, etc. + + SSD1306_128_64 128x64 pixel display + + SSD1306_128_32 128x32 pixel display + + SSD1306_96_16 + + -----------------------------------------------------------------------*/ + #define SSD1306_128_64 +// #define SSD1306_128_32 +// #define SSD1306_96_16 +/*=========================================================================*/ + +#if defined SSD1306_128_64 && defined SSD1306_128_32 + #error "Only one SSD1306 display can be specified at once in SSD1306.h" +#endif +#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16 + #error "At least one SSD1306 display must be specified in SSD1306.h" +#endif + +#if defined SSD1306_128_64 + #define SSD1306_LCDWIDTH 128 + #define SSD1306_LCDHEIGHT 64 +#endif +#if defined SSD1306_128_32 + #define SSD1306_LCDWIDTH 128 + #define SSD1306_LCDHEIGHT 32 +#endif +#if defined SSD1306_96_16 + #define SSD1306_LCDWIDTH 96 + #define SSD1306_LCDHEIGHT 16 +#endif + +#define SSD1306_SETCONTRAST 0x81 +#define SSD1306_DISPLAYALLON_RESUME 0xA4 +#define SSD1306_DISPLAYALLON 0xA5 +#define SSD1306_NORMALDISPLAY 0xA6 +#define SSD1306_INVERTDISPLAY 0xA7 +#define SSD1306_DISPLAYOFF 0xAE +#define SSD1306_DISPLAYON 0xAF + +#define SSD1306_SETDISPLAYOFFSET 0xD3 +#define SSD1306_SETCOMPINS 0xDA + +#define SSD1306_SETVCOMDETECT 0xDB + +#define SSD1306_SETDISPLAYCLOCKDIV 0xD5 +#define SSD1306_SETPRECHARGE 0xD9 + +#define SSD1306_SETMULTIPLEX 0xA8 + +#define SSD1306_SETLOWCOLUMN 0x00 +#define SSD1306_SETHIGHCOLUMN 0x10 + +#define SSD1306_SETSTARTLINE 0x40 + +#define SSD1306_MEMORYMODE 0x20 +#define SSD1306_COLUMNADDR 0x21 +#define SSD1306_PAGEADDR 0x22 + +#define SSD1306_COMSCANINC 0xC0 +#define SSD1306_COMSCANDEC 0xC8 + +#define SSD1306_SEGREMAP 0xA0 + +#define SSD1306_CHARGEPUMP 0x8D + +#define SSD1306_EXTERNALVCC 0x1 +#define SSD1306_SWITCHCAPVCC 0x2 + +// Scrolling #defines +#define SSD1306_ACTIVATE_SCROLL 0x2F +#define SSD1306_DEACTIVATE_SCROLL 0x2E +#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 +#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 +#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 +#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 +#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A + +class Adafruit_SSD1306 : public Adafruit_GFX { + public: + Adafruit_SSD1306(int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS); + Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS); + Adafruit_SSD1306(int8_t RST); + + void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = SSD1306_I2C_ADDRESS, bool reset=true); + void ssd1306_command(uint8_t c); + void ssd1306_data(uint8_t c); + + void clearDisplay(void); + void invertDisplay(uint8_t i); + void display(); + + void startscrollright(uint8_t start, uint8_t stop); + void startscrollleft(uint8_t start, uint8_t stop); + + void startscrolldiagright(uint8_t start, uint8_t stop); + void startscrolldiagleft(uint8_t start, uint8_t stop); + void stopscroll(void); + + void dim(boolean dim); + + void drawPixel(int16_t x, int16_t y, uint16_t color); + + virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + + private: + int8_t _i2caddr, _vccstate, sid, sclk, dc, rst, cs; + void fastSPIwrite(uint8_t c); + + boolean hwSPI; +volatile uint32 *mosiport, *clkport, *csport, *dcport; + uint32_t mosipinmask, clkpinmask, cspinmask, dcpinmask; + + inline void drawFastVLineInternal(int16_t x, int16_t y, int16_t h, uint16_t color) __attribute__((always_inline)); + inline void drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) __attribute__((always_inline)); + +}; diff --git a/STM32F1/libraries/Adafruit_SSD1306/README.txt b/STM32F1/libraries/Adafruit_SSD1306/README.txt new file mode 100644 index 0000000..420cc15 --- /dev/null +++ b/STM32F1/libraries/Adafruit_SSD1306/README.txt @@ -0,0 +1,24 @@ +This is a library for our Monochrome OLEDs based on SSD1306 drivers + + Pick one up today in the adafruit shop! + ------> http://www.adafruit.com/category/63_98 + +These displays use SPI to communicate, 4 or 5 pins are required to +interface + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +Scrolling code contributed by Michael Gregg +BSD license, check license.txt for more information +All text above must be included in any redistribution + +To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_SSD1306. Check that the Adafruit_SSD1306 folder contains Adafruit_SSD1306.cpp and Adafruit_SSD1306.h + +Place the Adafruit_SSD1306 library folder your /libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE. + +You will also have to download the Adafruit GFX Graphics core which does all the circles, text, rectangles, etc. You can get it from +https://github.com/adafruit/Adafruit-GFX-Library +and download/install that library as well \ No newline at end of file diff --git a/STM32F1/libraries/Adafruit_SSD1306/STM32 README.txt b/STM32F1/libraries/Adafruit_SSD1306/STM32 README.txt new file mode 100644 index 0000000..54705cf --- /dev/null +++ b/STM32F1/libraries/Adafruit_SSD1306/STM32 README.txt @@ -0,0 +1,6 @@ +STM32 adaption by Matthias Diro, 25.03.2015 +Things to know: +This adaption uses hardware I2C (hardwire.h), Port: I2c2. SDA=0, SCL=1 on maple mini +To change it to Port I2C1: +//HardWire HWIRE(1,I2C_FAST_MODE); // I2c1 +HardWire HWIRE(2,I2C_FAST_MODE); // I2c2 \ No newline at end of file diff --git a/STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino b/STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino new file mode 100644 index 0000000..e82ebc1 --- /dev/null +++ b/STM32F1/libraries/Adafruit_SSD1306/examples/ssd1306_128x32_i2c/ssd1306_128x32_i2c.ino @@ -0,0 +1,357 @@ +/********************************************************************* +This is an example for our Monochrome OLEDs based on SSD1306 drivers + + Pick one up today in the adafruit shop! + ------> http://www.adafruit.com/category/63_98 + +This example is for a 128x32 size display using I2C to communicate +3 pins are required to interface (2 I2C and one reset) + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen must be included in any redistribution +*********************************************************************/ + +#include +#include +#include +#include + +#define OLED_RESET 4 +Adafruit_SSD1306 display(OLED_RESET); + +#define NUMFLAKES 10 +#define XPOS 0 +#define YPOS 1 +#define DELTAY 2 + + +#define LOGO16_GLCD_HEIGHT 16 +#define LOGO16_GLCD_WIDTH 16 +static const unsigned char PROGMEM logo16_glcd_bmp[] = +{ B00000000, B11000000, + B00000001, B11000000, + B00000001, B11000000, + B00000011, B11100000, + B11110011, B11100000, + B11111110, B11111000, + B01111110, B11111111, + B00110011, B10011111, + B00011111, B11111100, + B00001101, B01110000, + B00011011, B10100000, + B00111111, B11100000, + B00111111, B11110000, + B01111100, B11110000, + B01110000, B01110000, + B00000000, B00110000 }; + +#if (SSD1306_LCDHEIGHT != 32) +#error("Height incorrect, please fix Adafruit_SSD1306.h!"); +#endif + +void setup() { + Serial.begin(9600); + + // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) + display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32) + // init done + + // Show image buffer on the display hardware. + // Since the buffer is intialized with an Adafruit splashscreen + // internally, this will display the splashscreen. + display.display(); + delay(2000); + + // Clear the buffer. + display.clearDisplay(); + + // draw a single pixel + display.drawPixel(10, 10, WHITE); + // Show the display buffer on the hardware. + // NOTE: You _must_ call display after making any drawing commands + // to make them visible on the display hardware! + display.display(); + delay(2000); + display.clearDisplay(); + + // draw many lines + testdrawline(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw rectangles + testdrawrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw multiple rectangles + testfillrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw mulitple circles + testdrawcircle(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw a white circle, 10 pixel radius + display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); + display.display(); + delay(2000); + display.clearDisplay(); + + testdrawroundrect(); + delay(2000); + display.clearDisplay(); + + testfillroundrect(); + delay(2000); + display.clearDisplay(); + + testdrawtriangle(); + delay(2000); + display.clearDisplay(); + + testfilltriangle(); + delay(2000); + display.clearDisplay(); + + // draw the first ~12 characters in the font + testdrawchar(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw scrolling text + testscrolltext(); + delay(2000); + display.clearDisplay(); + + // text display tests + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + display.println("Hello, world!"); + display.setTextColor(BLACK, WHITE); // 'inverted' text + display.println(3.141592); + display.setTextSize(2); + display.setTextColor(WHITE); + display.print("0x"); display.println(0xDEADBEEF, HEX); + display.display(); + delay(2000); + + // miniature bitmap display + display.clearDisplay(); + display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); + display.display(); + + // invert the display + display.invertDisplay(true); + delay(1000); + display.invertDisplay(false); + delay(1000); + + // draw a bitmap icon and 'animate' movement + testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); +} + + +void loop() { + +} + + +void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { + uint8_t icons[NUMFLAKES][3]; + + // initialize + for (uint8_t f=0; f< NUMFLAKES; f++) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + + Serial.print("x: "); + Serial.print(icons[f][XPOS], DEC); + Serial.print(" y: "); + Serial.print(icons[f][YPOS], DEC); + Serial.print(" dy: "); + Serial.println(icons[f][DELTAY], DEC); + } + + while (1) { + // draw each icon + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); + } + display.display(); + delay(200); + + // then erase it + move it + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); + // move it + icons[f][YPOS] += icons[f][DELTAY]; + // if its gone, reinit + if (icons[f][YPOS] > display.height()) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + } + } + } +} + + +void testdrawchar(void) { + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + + for (uint8_t i=0; i < 168; i++) { + if (i == '\n') continue; + display.write(i); + if ((i > 0) && (i % 21 == 0)) + display.println(); + } + display.display(); +} + +void testdrawcircle(void) { + for (int16_t i=0; i0; i-=5) { + display.fillTriangle(display.width()/2, display.height()/2-i, + display.width()/2-i, display.height()/2+i, + display.width()/2+i, display.height()/2+i, WHITE); + if (color == WHITE) color = BLACK; + else color = WHITE; + display.display(); + } +} + +void testdrawroundrect(void) { + for (int16_t i=0; i=0; i-=4) { + display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=display.width()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); + display.display(); + } + for (int16_t i=display.height()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=0; i http://www.adafruit.com/category/63_98 + +This example is for a 128x32 size display using SPI to communicate +4 or 5 pins are required to interface + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen must be included in any redistribution +*********************************************************************/ + +#include +#include +#include +#include + +// If using software SPI (the default case): +#define OLED_MOSI 9 +#define OLED_CLK 10 +#define OLED_DC 11 +#define OLED_CS 12 +#define OLED_RESET 13 +Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); + +/* Uncomment this block to use hardware SPI +#define OLED_DC 6 +#define OLED_CS 7 +#define OLED_RESET 8 +Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS); +*/ + +#define NUMFLAKES 10 +#define XPOS 0 +#define YPOS 1 +#define DELTAY 2 + +#define LOGO16_GLCD_HEIGHT 16 +#define LOGO16_GLCD_WIDTH 16 +static const unsigned char PROGMEM logo16_glcd_bmp[] = +{ B00000000, B11000000, + B00000001, B11000000, + B00000001, B11000000, + B00000011, B11100000, + B11110011, B11100000, + B11111110, B11111000, + B01111110, B11111111, + B00110011, B10011111, + B00011111, B11111100, + B00001101, B01110000, + B00011011, B10100000, + B00111111, B11100000, + B00111111, B11110000, + B01111100, B11110000, + B01110000, B01110000, + B00000000, B00110000 }; + +#if (SSD1306_LCDHEIGHT != 32) +#error("Height incorrect, please fix Adafruit_SSD1306.h!"); +#endif + +void setup() { + Serial.begin(9600); + + // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) + display.begin(SSD1306_SWITCHCAPVCC); + // init done + + // Show image buffer on the display hardware. + // Since the buffer is intialized with an Adafruit splashscreen + // internally, this will display the splashscreen. + display.display(); + delay(2000); + + // Clear the buffer. + display.clearDisplay(); + + // draw a single pixel + display.drawPixel(10, 10, WHITE); + // Show the display buffer on the hardware. + // NOTE: You _must_ call display after making any drawing commands + // to make them visible on the display hardware! + display.display(); + delay(2000); + display.clearDisplay(); + + // draw many lines + testdrawline(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw rectangles + testdrawrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw multiple rectangles + testfillrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw mulitple circles + testdrawcircle(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw a white circle, 10 pixel radius + display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); + display.display(); + delay(2000); + display.clearDisplay(); + + testdrawroundrect(); + delay(2000); + display.clearDisplay(); + + testfillroundrect(); + delay(2000); + display.clearDisplay(); + + testdrawtriangle(); + delay(2000); + display.clearDisplay(); + + testfilltriangle(); + delay(2000); + display.clearDisplay(); + + // draw the first ~12 characters in the font + testdrawchar(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw scrolling text + testscrolltext(); + delay(2000); + display.clearDisplay(); + + // text display tests + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + display.println("Hello, world!"); + display.setTextColor(BLACK, WHITE); // 'inverted' text + display.println(3.141592); + display.setTextSize(2); + display.setTextColor(WHITE); + display.print("0x"); display.println(0xDEADBEEF, HEX); + display.display(); + delay(2000); + + // miniature bitmap display + display.clearDisplay(); + display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); + display.display(); + + // invert the display + display.invertDisplay(true); + delay(1000); + display.invertDisplay(false); + delay(1000); + + // draw a bitmap icon and 'animate' movement + testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); +} + + +void loop() { + +} + + +void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { + uint8_t icons[NUMFLAKES][3]; + + // initialize + for (uint8_t f=0; f< NUMFLAKES; f++) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + + Serial.print("x: "); + Serial.print(icons[f][XPOS], DEC); + Serial.print(" y: "); + Serial.print(icons[f][YPOS], DEC); + Serial.print(" dy: "); + Serial.println(icons[f][DELTAY], DEC); + } + + while (1) { + // draw each icon + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); + } + display.display(); + delay(200); + + // then erase it + move it + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); + // move it + icons[f][YPOS] += icons[f][DELTAY]; + // if its gone, reinit + if (icons[f][YPOS] > display.height()) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + } + } + } +} + + +void testdrawchar(void) { + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + + for (uint8_t i=0; i < 168; i++) { + if (i == '\n') continue; + display.write(i); + if ((i > 0) && (i % 21 == 0)) + display.println(); + } + display.display(); +} + +void testdrawcircle(void) { + for (int16_t i=0; i0; i-=5) { + display.fillTriangle(display.width()/2, display.height()/2-i, + display.width()/2-i, display.height()/2+i, + display.width()/2+i, display.height()/2+i, WHITE); + if (color == WHITE) color = BLACK; + else color = WHITE; + display.display(); + } +} + +void testdrawroundrect(void) { + for (int16_t i=0; i=0; i-=4) { + display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=display.width()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); + display.display(); + } + for (int16_t i=display.height()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=0; i http://www.adafruit.com/category/63_98 + +This example is for a 128x64 size display using I2C to communicate +3 pins are required to interface (2 I2C and one reset) + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen must be included in any redistribution +*********************************************************************/ + +#include +#include +#include +#include + +#define OLED_RESET 4 +Adafruit_SSD1306 display(OLED_RESET); + +#define NUMFLAKES 10 +#define XPOS 0 +#define YPOS 1 +#define DELTAY 2 + + +#define LOGO16_GLCD_HEIGHT 16 +#define LOGO16_GLCD_WIDTH 16 +static const unsigned char PROGMEM logo16_glcd_bmp[] = +{ B00000000, B11000000, + B00000001, B11000000, + B00000001, B11000000, + B00000011, B11100000, + B11110011, B11100000, + B11111110, B11111000, + B01111110, B11111111, + B00110011, B10011111, + B00011111, B11111100, + B00001101, B01110000, + B00011011, B10100000, + B00111111, B11100000, + B00111111, B11110000, + B01111100, B11110000, + B01110000, B01110000, + B00000000, B00110000 }; + +#if (SSD1306_LCDHEIGHT != 64) +#error("Height incorrect, please fix Adafruit_SSD1306.h!"); +#endif + +void setup() { + Serial.begin(9600); + + // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) + display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) + // init done + + // Show image buffer on the display hardware. + // Since the buffer is intialized with an Adafruit splashscreen + // internally, this will display the splashscreen. + display.display(); + delay(2000); + + // Clear the buffer. + display.clearDisplay(); + + // draw a single pixel + display.drawPixel(10, 10, WHITE); + // Show the display buffer on the hardware. + // NOTE: You _must_ call display after making any drawing commands + // to make them visible on the display hardware! + display.display(); + delay(2000); + display.clearDisplay(); + + // draw many lines + testdrawline(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw rectangles + testdrawrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw multiple rectangles + testfillrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw mulitple circles + testdrawcircle(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw a white circle, 10 pixel radius + display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); + display.display(); + delay(2000); + display.clearDisplay(); + + testdrawroundrect(); + delay(2000); + display.clearDisplay(); + + testfillroundrect(); + delay(2000); + display.clearDisplay(); + + testdrawtriangle(); + delay(2000); + display.clearDisplay(); + + testfilltriangle(); + delay(2000); + display.clearDisplay(); + + // draw the first ~12 characters in the font + testdrawchar(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw scrolling text + testscrolltext(); + delay(2000); + display.clearDisplay(); + + // text display tests + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + display.println("Hello, world!"); + display.setTextColor(BLACK, WHITE); // 'inverted' text + display.println(3.141592); + display.setTextSize(2); + display.setTextColor(WHITE); + display.print("0x"); display.println(0xDEADBEEF, HEX); + display.display(); + delay(2000); + + // miniature bitmap display + display.clearDisplay(); + display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); + display.display(); + + // invert the display + display.invertDisplay(true); + delay(1000); + display.invertDisplay(false); + delay(1000); + + // draw a bitmap icon and 'animate' movement + testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); +} + + +void loop() { + +} + + +void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { + uint8_t icons[NUMFLAKES][3]; + + // initialize + for (uint8_t f=0; f< NUMFLAKES; f++) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + + Serial.print("x: "); + Serial.print(icons[f][XPOS], DEC); + Serial.print(" y: "); + Serial.print(icons[f][YPOS], DEC); + Serial.print(" dy: "); + Serial.println(icons[f][DELTAY], DEC); + } + + while (1) { + // draw each icon + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); + } + display.display(); + delay(200); + + // then erase it + move it + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); + // move it + icons[f][YPOS] += icons[f][DELTAY]; + // if its gone, reinit + if (icons[f][YPOS] > display.height()) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + } + } + } +} + + +void testdrawchar(void) { + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + + for (uint8_t i=0; i < 168; i++) { + if (i == '\n') continue; + display.write(i); + if ((i > 0) && (i % 21 == 0)) + display.println(); + } + display.display(); +} + +void testdrawcircle(void) { + for (int16_t i=0; i0; i-=5) { + display.fillTriangle(display.width()/2, display.height()/2-i, + display.width()/2-i, display.height()/2+i, + display.width()/2+i, display.height()/2+i, WHITE); + if (color == WHITE) color = BLACK; + else color = WHITE; + display.display(); + } +} + +void testdrawroundrect(void) { + for (int16_t i=0; i=0; i-=4) { + display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=display.width()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); + display.display(); + } + for (int16_t i=display.height()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=0; i http://www.adafruit.com/category/63_98 + +This example is for a 128x64 size display using SPI to communicate +4 or 5 pins are required to interface + +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing +products from Adafruit! + +Written by Limor Fried/Ladyada for Adafruit Industries. +BSD license, check license.txt for more information +All text above, and the splash screen must be included in any redistribution +*********************************************************************/ + +#include +#include +#include +#include + +// If using software SPI (the default case): +#define OLED_MOSI 9 +#define OLED_CLK 10 +#define OLED_DC 11 +#define OLED_CS 12 +#define OLED_RESET 13 +Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); + +/* Uncomment this block to use hardware SPI +#define OLED_DC 6 +#define OLED_CS 7 +#define OLED_RESET 8 +Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS); +*/ + +#define NUMFLAKES 10 +#define XPOS 0 +#define YPOS 1 +#define DELTAY 2 + +#define LOGO16_GLCD_HEIGHT 16 +#define LOGO16_GLCD_WIDTH 16 +static const unsigned char PROGMEM logo16_glcd_bmp[] = +{ B00000000, B11000000, + B00000001, B11000000, + B00000001, B11000000, + B00000011, B11100000, + B11110011, B11100000, + B11111110, B11111000, + B01111110, B11111111, + B00110011, B10011111, + B00011111, B11111100, + B00001101, B01110000, + B00011011, B10100000, + B00111111, B11100000, + B00111111, B11110000, + B01111100, B11110000, + B01110000, B01110000, + B00000000, B00110000 }; + +#if (SSD1306_LCDHEIGHT != 64) +#error("Height incorrect, please fix Adafruit_SSD1306.h!"); +#endif + +void setup() { + Serial.begin(9600); + + // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) + display.begin(SSD1306_SWITCHCAPVCC); + // init done + + // Show image buffer on the display hardware. + // Since the buffer is intialized with an Adafruit splashscreen + // internally, this will display the splashscreen. + display.display(); + delay(2000); + + // Clear the buffer. + display.clearDisplay(); + + // draw a single pixel + display.drawPixel(10, 10, WHITE); + // Show the display buffer on the hardware. + // NOTE: You _must_ call display after making any drawing commands + // to make them visible on the display hardware! + display.display(); + delay(2000); + display.clearDisplay(); + + // draw many lines + testdrawline(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw rectangles + testdrawrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw multiple rectangles + testfillrect(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw mulitple circles + testdrawcircle(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw a white circle, 10 pixel radius + display.fillCircle(display.width()/2, display.height()/2, 10, WHITE); + display.display(); + delay(2000); + display.clearDisplay(); + + testdrawroundrect(); + delay(2000); + display.clearDisplay(); + + testfillroundrect(); + delay(2000); + display.clearDisplay(); + + testdrawtriangle(); + delay(2000); + display.clearDisplay(); + + testfilltriangle(); + delay(2000); + display.clearDisplay(); + + // draw the first ~12 characters in the font + testdrawchar(); + display.display(); + delay(2000); + display.clearDisplay(); + + // draw scrolling text + testscrolltext(); + delay(2000); + display.clearDisplay(); + + // text display tests + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + display.println("Hello, world!"); + display.setTextColor(BLACK, WHITE); // 'inverted' text + display.println(3.141592); + display.setTextSize(2); + display.setTextColor(WHITE); + display.print("0x"); display.println(0xDEADBEEF, HEX); + display.display(); + delay(2000); + + // miniature bitmap display + display.clearDisplay(); + display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); + display.display(); + + // invert the display + display.invertDisplay(true); + delay(1000); + display.invertDisplay(false); + delay(1000); + + // draw a bitmap icon and 'animate' movement + testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); +} + + +void loop() { + +} + + +void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { + uint8_t icons[NUMFLAKES][3]; + + // initialize + for (uint8_t f=0; f< NUMFLAKES; f++) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + + Serial.print("x: "); + Serial.print(icons[f][XPOS], DEC); + Serial.print(" y: "); + Serial.print(icons[f][YPOS], DEC); + Serial.print(" dy: "); + Serial.println(icons[f][DELTAY], DEC); + } + + while (1) { + // draw each icon + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE); + } + display.display(); + delay(200); + + // then erase it + move it + for (uint8_t f=0; f< NUMFLAKES; f++) { + display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK); + // move it + icons[f][YPOS] += icons[f][DELTAY]; + // if its gone, reinit + if (icons[f][YPOS] > display.height()) { + icons[f][XPOS] = random(display.width()); + icons[f][YPOS] = 0; + icons[f][DELTAY] = random(5) + 1; + } + } + } +} + + +void testdrawchar(void) { + display.setTextSize(1); + display.setTextColor(WHITE); + display.setCursor(0,0); + + for (uint8_t i=0; i < 168; i++) { + if (i == '\n') continue; + display.write(i); + if ((i > 0) && (i % 21 == 0)) + display.println(); + } + display.display(); +} + +void testdrawcircle(void) { + for (int16_t i=0; i0; i-=5) { + display.fillTriangle(display.width()/2, display.height()/2-i, + display.width()/2-i, display.height()/2+i, + display.width()/2+i, display.height()/2+i, WHITE); + if (color == WHITE) color = BLACK; + else color = WHITE; + display.display(); + } +} + +void testdrawroundrect(void) { + for (int16_t i=0; i=0; i-=4) { + display.drawLine(0, display.height()-1, display.width()-1, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=display.width()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE); + display.display(); + } + for (int16_t i=display.height()-1; i>=0; i-=4) { + display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE); + display.display(); + } + delay(250); + + display.clearDisplay(); + for (int16_t i=0; i + #define fontdatatype const uint8_t +#elif defined(__PIC32MX__) + #define PROGMEM + #define fontdatatype const unsigned char +#elif defined(__arm__) + #define PROGMEM + #define fontdatatype const unsigned char +#endif + +fontdatatype SmallFont[] PROGMEM = +{ +0x06, 0x08, 0x20, 0x5f, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp +0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // ! +0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " +0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // # +0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $ +0x00, 0x23, 0x13, 0x08, 0x64, 0x62, // % +0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & +0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' +0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // ( +0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // ) +0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * +0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + +0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , +0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - +0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . +0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // / + +0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 +0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1 +0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2 +0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3 +0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4 +0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5 +0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 +0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7 +0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8 +0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9 +0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // : +0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ; +0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // < +0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // = +0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // > +0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ? + +0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @ +0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A +0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B +0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C +0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D +0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E +0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F +0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G +0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H +0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I +0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J +0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K +0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L +0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M +0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N +0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O + +0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P +0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q +0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R +0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S +0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T +0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U +0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V +0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W +0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X +0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y +0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z +0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [ +0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, // Backslash (Checker pattern) +0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ] +0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^ +0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _ + +0x00, 0x00, 0x03, 0x05, 0x00, 0x00, // ` +0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a +0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, // b +0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c +0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d +0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e +0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f +0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g +0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h +0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i +0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j +0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k +0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l +0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m +0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n +0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o + +0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p +0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q +0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r +0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s +0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t +0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u +0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v +0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w +0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x +0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y +0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z +0x00, 0x00, 0x10, 0x7C, 0x82, 0x00, // { +0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, // | +0x00, 0x00, 0x82, 0x7C, 0x10, 0x00, // } +0x00, 0x00, 0x06, 0x09, 0x09, 0x06 // ~ (Degrees) +}; + +fontdatatype MediumNumbers[] PROGMEM = +{ +0x0c, 0x10, 0x2d, 0x0d, +0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, // - +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, // . +0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x81, 0x00, 0x00, // / +0x00, 0xfc, 0x7a, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbc, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbc, 0x7e, 0x00, // 0 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x00, // 1 +0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x81, 0x00, 0x00, // 2 +0x00, 0x00, 0x02, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 3 +0x00, 0xfc, 0x78, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3d, 0x7e, 0x00, // 4 +0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 5 +0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x02, 0x00, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 6 +0x00, 0x00, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x00, // 7 +0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x7e, 0xbd, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 8 +0x00, 0xfc, 0x7a, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x7a, 0xfc, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xbd, 0x7e, 0x00, // 9 +}; + +fontdatatype BigNumbers[] PROGMEM = +{ +0x0e, 0x18, 0x2d, 0x0d, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // - +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // . +0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, // / +0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xef, 0xc7, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 0 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 1 +0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xe0, 0xd0, 0xb8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x17, 0x0f, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, // 2 +0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 3 +0x00, 0xfc, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xfc, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 4 +0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xb8, 0xd0, 0xe0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 5 +0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0xef, 0xd7, 0xbb, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xb8, 0xd0, 0xe0, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 6 +0x00, 0x00, 0x02, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc7, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x00, // 7 +0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0xef, 0xd7, 0xbb, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 8 +0x00, 0xfc, 0xfa, 0xf6, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0xf6, 0xfa, 0xfc, 0x00, 0x00, 0x0f, 0x17, 0x3b, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xbb, 0xd7, 0xef, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xbf, 0x7f, 0x00, // 9 +}; + +fontdatatype TinyFont[] PROGMEM = +{ +0x04, 0x06, 0x20, 0x5f, +0x00, 0x00, 0x00, 0x03, 0xa0, 0x00, 0xc0, 0x0c, 0x00, 0xf9, 0x4f, 0x80, 0x6b, 0xeb, 0x00, 0x98, 0x8c, 0x80, 0x52, 0xa5, 0x80, 0x03, 0x00, 0x00, // Space, !"#$%&' +0x01, 0xc8, 0x80, 0x89, 0xc0, 0x00, 0x50, 0x85, 0x00, 0x21, 0xc2, 0x00, 0x08, 0x40, 0x00, 0x20, 0x82, 0x00, 0x00, 0x20, 0x00, 0x18, 0x8c, 0x00, // ()*+,-./ +0xfa, 0x2f, 0x80, 0x4b, 0xe0, 0x80, 0x5a, 0x66, 0x80, 0x8a, 0xa5, 0x00, 0xe0, 0x8f, 0x80, 0xea, 0xab, 0x00, 0x72, 0xa9, 0x00, 0x9a, 0x8c, 0x00, // 01234567 +0xfa, 0xaf, 0x80, 0x4a, 0xa7, 0x00, 0x01, 0x40, 0x00, 0x09, 0x40, 0x00, 0x21, 0x48, 0x80, 0x51, 0x45, 0x00, 0x89, 0x42, 0x00, 0x42, 0x66, 0x00, // 89:;<=>? +0x72, 0xa6, 0x80, 0x7a, 0x87, 0x80, 0xfa, 0xa5, 0x00, 0x72, 0x25, 0x00, 0xfa, 0x27, 0x00, 0xfa, 0xa8, 0x80, 0xfa, 0x88, 0x00, 0x72, 0x2b, 0x00, // @ABCDEFG +0xf8, 0x8f, 0x80, 0x8b, 0xe8, 0x80, 0x8b, 0xe8, 0x00, 0xf8, 0x8d, 0x80, 0xf8, 0x20, 0x80, 0xf9, 0x0f, 0x80, 0xf9, 0xcf, 0x80, 0x72, 0x27, 0x00, // HIJKLMNO +0xfa, 0x84, 0x00, 0x72, 0x27, 0x40, 0xfa, 0x85, 0x80, 0x4a, 0xa9, 0x00, 0x83, 0xe8, 0x00, 0xf0, 0x2f, 0x00, 0xe0, 0x6e, 0x00, 0xf0, 0xef, 0x00, // PQRSTUVW +0xd8, 0x8d, 0x80, 0xc0, 0xec, 0x00, 0x9a, 0xac, 0x80, 0x03, 0xe8, 0x80, 0xc0, 0x81, 0x80, 0x8b, 0xe0, 0x00, 0x42, 0x04, 0x00, 0x08, 0x20, 0x80, // XYZ[\]^_ +0x02, 0x04, 0x00, 0x31, 0x23, 0x80, 0xf9, 0x23, 0x00, 0x31, 0x24, 0x80, 0x31, 0x2f, 0x80, 0x31, 0x62, 0x80, 0x23, 0xea, 0x00, 0x25, 0x53, 0x80, // `abcdefg +0xf9, 0x03, 0x80, 0x02, 0xe0, 0x00, 0x06, 0xe0, 0x00, 0xf8, 0x42, 0x80, 0x03, 0xe0, 0x00, 0x79, 0x87, 0x80, 0x39, 0x03, 0x80, 0x31, 0x23, 0x00, // hijklmno +0x7d, 0x23, 0x00, 0x31, 0x27, 0xc0, 0x78, 0x84, 0x00, 0x29, 0x40, 0x00, 0x43, 0xe4, 0x00, 0x70, 0x27, 0x00, 0x60, 0x66, 0x00, 0x70, 0x67, 0x00, // pqrstuvw +0x48, 0xc4, 0x80, 0x74, 0x57, 0x80, 0x59, 0xe6, 0x80, 0x23, 0xe8, 0x80, 0x03, 0x60, 0x00, 0x8b, 0xe2, 0x00, 0x61, 0x0c, 0x00 // zyx{|}~ +}; diff --git a/STM32F1/libraries/OLED_I2C/Documentation/OLED_I2C.pdf b/STM32F1/libraries/OLED_I2C/Documentation/OLED_I2C.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9076e6bc3c81a2c6bdfed95136d6730cab97980b GIT binary patch literal 115762 zcma&M18}9y{w^BZwr$(CZLQe0F|qB5ZQGpKnK%;cBkR^9+JB4$Q8B4%cG zP7W4EMItsfMsXqz4mM_PMg<}+Mzy~!tQ;JSQbf8$Y+Rf~EKJ<`0s`;=d$YfWi2jcP z55vy#KR(0&rVeHRC1Ynhmp>jw9c|Kc17?qp>W>%)I4$ef(ECK?I;`XM_UXHFr zY=4KUFiKe2x&oXTC2Wmd0spqZC@rST$Hm6PEiA^w&dMUfEX>6wDk3Vz#lpq?=gBF? zB_b{^z$eVfCd$RdCBekWE-EI@Cc@1s&dtWgEGEIi!6hQb&MKhKC~a>B@YMZ-0}Jcl zALb53Y)t=hDhIH)aJ3}j;QAY!`@fUsWK?l*_!AcEzj~@^l%WV@AGbAG;6C)j9GAu?==x`(?Sqv$r^bjo^q7^9 zOz<$|4F@G$>D9v+6{Z-Dwg1}h?#?v@t*{lSvVP0|G>`rKS2kmWb)<)t>dV46(?eWYYxPyYrQ(V>fY9<4LU#17rCY~=e*GlYlLJq`(ZI5Iuf zkawjF@(GewHHGxd4VLsMS1i?M_0x`Pg6ZO0$%3*WgK_mE24;f*&@tr8JyIuxGENa} zmMG%gpt0=&4*TYl%*lVr_g_T#Cm~UZKh#lmHT&1Mu$!x;xI4h!l~K&WRM8P&&nPM( zxjzp~>H_*4GFAXQgmdoyEav;Wn~!o{dag-r7{pKJu7XAjbnzur`F-*9S!@K zic%<=>o0C>H%HB=L`2Wb%ErW~@`tOcu67dt_W$SU{GV5Ks{QKL^}SJ#*Ng%+vv*sy zOQ8RwP%~-}vHg!w{zamHQj!O_8k-rr8WXXw{fk*j#uflMV=o6cS4Ks9z`td}__xx9 zh?VM}9>;rE{pJ2yK6 zD+>`98#4npi$0_L9|0QwU)uj@_K&syxK{zVIJh~R0{&64gR`omu_@rMq*eb|{o~L{M()VZ+w3z=}*Le>eST!)creVHMKt`{z+Jk zg^1(tYW26LmZFI@!1QltX}dq2|Ed1dpyKe?FcH(gHTf5@{|%hKe*OXHzlcJ@%Gt%0 zh=cn-++b&A|FhmP|6}Tp!$0%>KN8_`$(k5-;Ou;!M3GVLZfwUDpap}K#@oxwL*TX2 zvf?6fL@{qjhqhfqnwW3HxNVf)mXF#8h|xM8Cf`t`(+%nrnmgU!*qOwxr17Pxkr&Gu zLsx?agIIsyXTRGFxruf@WHW^Oc3=CTft2Au@~QPCH+*ma`|(hGNS|ud52&eIDuxmc zwt{M%OLWNMW9rr)fZ+_?od1Z`{B6B~@-(tma=kBH6QhIi1RKq42Jzi?dJ^I1e~i>>tblQz|4je>2V1dUhAnfupn zBby9JE|+cse%GX_c)#B=vwd@#nisYYH-@fVciHx~5E43<5uH|yUXd4ZJ#6ULq>Lwj zB{RW-*Lv=?2gbSsILO{rGkN=73qVRGO!Ikiq_>r_!Jk9%)SKaj#W;y|yAP}+=t;~M^Jam?}zodC9kp8wO}H2`2!=6!!r{virll$r%@w0Xpz z%+$z4FX@-K5Z+J6lR%SxJRBcXEN=zhJh+8ROn!fTZPi)lR5Kw3)w%i0#0 z^PV#NYjzk(lbj)-7y>Qd&7!rA@czf-xu`A9$4hd7WK^|r(3L5Rmg^iWN3QjUF z?-`J>r>*CFmY$=+8NmKVMw_~)%DI1v??)ZdU)q1z>ost@ZE%~jIuZOPkD_lNWNvD{ z047y_5P9yOMJjTRoPKKlgg^qmo_X7DiyS zg-ez0M0`&#n!N90IWe=qrckQ2u;}=#pR}!{Y4wh_^-_ai%24wuBgjsO3hJE(JLBE) zSJIHMrpXqh`lWj_#3D6t>!sPv&8_`^!|AW&|KH{LpY525>3?u?S>`3WW|O5co;;Qf zj;4(YWUS{qzmntU6@@j{q%$HY4{Nn4R#$(RUzGE^u1_U@b_QK)@BGDw#EF;FIAb-EL(s z6SgVr%^IC%0!w0_IrU>v5)_fv$LTQwR@)}z*86=$kP<)y(k)Fd6HfNlF@^xEL>T4r z8UXh)>T?)}?6K^711eTVj-&tv<~wu7PdZk%t!zuoZfa>+^rT0P`XQPZzlrQa-ioD& zxS~n?OdGJ0o9I3V{v9D`iWEo$OjDYpKWq5ro0(zYT8+1QqRCyFWAz?XF7&Y=R=u-t zHr!)8v^;LK&l^(@+qu;ha_=HK#|%Pul(2qAE>`Uk3)2?hkjvc0cCh;fCYIPly@5iVbT!rWj|b1A8zwhcR?1-EYK*)5(FVM7PQ5skJn$i zlTAp8O62B|mY>CKA>4N1upsoZdyl3*+j|lTTG(C3l<=^2RwqiagL!(CJXiO9?`tG4 zT;Fbg+=r`v&YTt)AR*S6(V?R<7PBGu_*FxQ@y?f}pbL5hh?bNA53%Zy!XLBKTc>^>}f>770SY}0!rD|$E zwYZ3IQ*#PYRFd2@hl*@n>!EQ8oYk-hd%A znSS0}+)Bm~5HOf2_-3@&P97*nVdx02o|R-SYK!n(%?l12ldEg5w5^{IpB?xa&;WPP z46EBjzigJofo^5aUU@*(G+srBq02W4f2-du#DvVg}l>#$^r)(Bu zqTGKE!(t*Ap1bS$NZl3la@?$%;`aSRuO}nJIF2}Spoy0JNU?Wb0@+X)sMG-gCeaW3 z&KP;$@I>xLp)QVgAFXPu^%$)IqplbWEl&2mV46ntBZ8OZ2yl)!ek(E|<@xY{3tSl*7r|%dcF~+wIFyjd7^K6gF z^iG1R%a{H=({De=4=oue{l3C=gE$l*@)gflerYEOn$IG*HNZw!;vvg_oT}qV4S2r% zAZ942iV7%CZ%_d&xxg^g3fpap9{F-&`Pf;s7lvX+ z;)+awb1QeBqT!&F=V+Te<{45e3EPht7S_haSn=v!kA3PTd>aSi5`M{j6~-1KD@^W0 zhn5@MDOwJ{R@koMrzSRM^r2MBgv9uY!--opEyux~E8ZHSZEb|?GqSrKm0`om+BM%W z#ZCAB4ECV_Hlj^<9|a`t%}%)^s`(hXX{RK2K$vs|r?8mYa(Ci7TXC7k@EZsaS8qou zC%oTB6n4G(9djJtH3`xwj<#D>a`G5%&^=s7iL|Bo&LDto+?ElM-dH09GkaXWQ#$Th zR?WOU(mp{+@N{srK$V*;x9yFydV0&UhqkLl%&m~O*Q{JMjDtj}2??1u*)n?k1j9D= z%jk@{XGpGh=k=O7Z|h~6HoT0z zsx2>cUZ1`S#iy!%fHJ_>Z*MT)LAm+8J!3DYIZZ8Gq=F?hMwvd)yNdw1kfNB|#@3T$ zlMod?`IdroPe43rNmrEBp0?a(d)}UOWo89x2h?+@-9q51z%=U{qaQAiy-I@Gf>w;Q zJLE;ki5G9!KHE7qO{yzC6pemSC%t(J&LPioU;5J*E#qW}i)IYtp|Avy zs=)jA_yNT8VnGp>P0WiH#w{?8Mrr8v=OiO~H%u=D8V0Jc?Tl-q;5b!C1A24ynuGkgb~N|CdSXuPe>bRvqUE}uE2VXY9|OMZ$YSgqdapK3ZE?YUNt zuaSuY(QbyX9ia$h9h;UNRdt#BzRSXZ+h5G^g6ICN-eK3Zaa7VaP*)1i6q;Dw zL5cs@&c==|Bae#R0Se~EgPd+JxK!f!qPS44E=V{|i~BjFg^aDTHJjG+yZD%}n-8lJ zkdyC2f#$;z{#b#SSha>lTvP4S`R`a_&PyZk+@X>o-qao~>SOQ3PVHixI}ihC%hTGl zkf9_5I}0rY>8e6hb!rar)3?@~u0uKz(JAD_ilcXU| ztAnVVz}dHe*UO-M=HH&q;c7zIr(gvln=rTLs?3HfszS>k9mtyJK^I&k!$ix$%R__f+&(#*{`lXHkkrp9(jU3G>#oX!Jj0OLuDXYeO3R(r{d!JAPJF zea9=v9i-qnz3Qlm{>hQCfFb|;%Vq@~cAuu7pMoH7>X1n!$K9vX!ZCyNbIQ5clb_qr zIZJtHo)W)uXQaKMGj_=-RXq8fYF!)&wnsIZ4~(+Usz@h-m&*5khcgT_Y3Vc#!p#4` zMH!NxHw|GP7&K;cjkkOLso5CihD}|fvA95$Tus-dB*g=qYFdpZvDTZwaWg@M@}L7@ zx139NU+;r=F%2&f$Z!#$1o+Y^;XA}p69ZdV4Na|-lELR@iML15o|B%+9o_3eEi^Al ztlsNGfpb}FQ^ba(7rDe#CB;$>Y+QDRZLrK?p>sT;$?AlQfl=nKGsX}<%yvF`!1(C} zBr&h#IT=%%)1@2jsR~n${zT6BQ<%Z@QFzFRilj0>T~6Z-%t9mCVN$<{v?}-XkUQ^B7Q6>+~nXSfSuAg z;HB96ipKGAG#gk@-TucEZP=p_rjiwgfjnW4PR1|nGjF6DcQ{_-pAM0xs*~UW1^9-q zl!E3(_q+^tIHeopJ`)KLfrEwX%*rQ3+Z2wQ{LxDcBuNl~Heos5ME&NlE*#-vD`V?E zR|pngGs}-^bRCgzjXTONQ|R4+OWZl)?9dHI^ZnX@od93(5Se5PN>&^28BVNBl0>Ef z*dD{8hk0yTV}>qg<4C1X0^lxMKAfBrY-AM}q<8f0GvI#FMf9|XT!whX1FHHa@}plW zgFik8XI_KW2(5pytBi!K2dmjo*zkE1Cn!5t@fDaCdg}a_gC+al``G`_gC#R3 z3mfY{cQ=17jhNUu+5hJl-n4~ZI0|Z9T`3=ed}Ph-CQ9L!NGjd{U{%?qNr4 z192Qz{Z5oUq8N2;1*`pO_G*Tgz2+kosr(2CaxVCjZ}W6M2#Pha9y$3p)yPzFt5@+ou1iZdaX!4g zFiF1JZD0WMEim<`z;%j+Kkip?b!Z~l%RrQ#VL;3?v=O1kEC(Z-;^J~z*f-FvqhDpH zrC$UD`4(T`Qh)wrzvrLE6?5R^7JWe=+Cx7X^JU#6+p#~W zFOvrrMYrT*AGC6un;|ng!@Z_yS<%iWCob%?a#J)ky~YXNZKqrtlX9jqXhKBo?+9EG zxkd(tu#}|Kh-@(N;FR7gY(TG+?VUag-}FxgBWo5Nulh-8w*G`@A?bX0sl}~y(RN)9 z2jWud=SlQ!LN1ULoz9nsZ+BG!fs-IcToetm1O%p`6GF*CTc8A(u%dX z6yQknv>{L`lhjIelS?V0l$6VVtrqRF?x}R^hVd{Gx&Q!2U*oJUv%;-ix98qz+R2CJ@MaiikEK*uJa%$n5Pimi2ri<1PiuPD2LV zqa)!8W7=`m&Rga-j{!B8GDXCZ0eSU6aIi%M^1Ok`nSk%e%z`p`-EYuX=3UMQ5&^GX zJ=|ExUd6vLkmF+?X^;l6(O_e)B`8+Ll>oB+X3Ovb>RZ)V{ac9|a)O0_iP2To`|;u^ zc@tRCotl_tRho@+d%~Dt<`ZJ$@NNtHR6ji`E6hh?V5!m~R&Dyt&HC=An#czyH<=*8 zC!?NhJ~N-(Q7wA_>ygcOcU}oLQyk`kRs7CaQ?EWPGb@%!Bva~Z&5*j3>n8%WhXAd6 zAhLwIK;@zS8;` z5~j!5+EH15F(%8TBM8tIbk%w0T}%Cj6x=KN{5)A(q9TOG7P!m@Njz5E!V$u~{jKE7{A^v#1I1lTW9<*;?4O>~J2qOCdJ+dD-7j;Y0@OgOPavZQtX; z0Nj1I_$^f=MekPsPeb8l z^T3`p1g%7^MT*xXDDgkyZYlBa#d67s35LD&Xb0@2BbeTCRR;B_f(Q;La7&u3byRplcnz=uZ@-<%Pg|N5^ z$)d%f8+1roEwAGk&;(mV^3mCy?AbrmHn_f)^SN+P2#7+zP2l_8Tk8{&6FQu~#C+sM z{;aAa!mXiIQPenO-DS7FiFp22IFx#2^M(LF99F)I8#AzGR<>s~i)+j&cTJ%!(2(yN zdsXl=wFZ4w6uh8isKwkay?!2buaM)NG`mic4stP1n6ix0$`P!Tq#v+R$pGnWH~kBL z`96nrQgGZ_O7E&y@~zR{y>UwD8kst{P96w@>|@Cg0TDw3grug>@WhmIPu9L3vNtHd zb0W-w^p`r0X|q}&Bl|YL?kf~XiJHw)2q)p0^VP~jk5Tb$+<`a!NBTEKYnoRpY8v-| z_9>)#|2;J%Y6r)MUkg$qghV7)k&}?Vwsw#LjGp)3sn=`kFK?%eMN-MqR{(hS1ABsp zzkBe6Rl-69eQ7iNT|bUVxKZh&A4ox4b)-6%l={xKESl9$9ziQ`t~!Mre?-1hOW1FI zrGjBCeU;m16*=kOyTRt#uK6vZz6y-n7KKq&t?7l9p;1rV+Zm)=p`R&qe$EdKNdyT- zi}q5R0#W~ds;9LSKg_b*#g^r$9@&xN{}iccM}4jlU@S&3j0dqsf#(Lhe$&&$W>a7j zILtf-UyYa|m0BK4VZ1^qH_yG6N(NSqJM0khgdRjE9G#FbPj0`HHhViduFVMqapjYulZ2+p78kOXjg?2q;KA)lnbAE z4gtb$M&3y7BQ5R_6x-_z$8G2XtPz1@1@GJf zk{^nn%LFUmC9%!tWmyUgxrrj>FVdl3Owg9cO5MrSzGpS8&DRle>YjIY4S)%?{^lKugL>Hay!6|;*cPW zVckP`Abk0@b4^K`&I_9r%$9?1G?V8eWeB*0fZdxu@#K)#=t#QqHzdT%L&er7i{5#S z_WY4NwKGZ+$J8j}T(TLk;+|nP`J>|eCr}4iEaZi1d_YcGeI)eRj7Jk4@u3vr(Y($z zhjImhi6$dH`oSzqVkxG(^~4}<((J&DRzl9bkz)Q%Lcon14u$X_yvadEydjd<*9)wS zUGNd|iTzL^%D2ouT-4v$Dd~<(;jNO1iwZG!-zlN##aFuOrc^A9mA7_Yy@2QWh6Kkz zZ0)~=G!lX!08Ndkr^#VfP%A`5+n2HJk&9reh|D^{6k^O_w5wJtS9<5~D=8KMP7GvD z;B1YKzw{(dXoPk4Ku%=TVEk0zSXeJksK4%bm8~bI5uTSwF^egbUYYtDS~S7lng_~` zj0=R%v^`n}+IKVHh-$hp5ZQ18gnwz}( zNTNHs!xaCT9O&Y=E2VYTiQwVS>qz`r*A68=L08?wA%z1EGmJCO5XtdGb6ngxa#5^F&}GzU@;&nq0p ztxsVl_Kfa6Z(&H$>7WYj*7C01+m5@0BbyJ1i1%9j6ps`S)%WR`hS_FrI zjuBCZD!O99ZA=y&UJZ_fS=9>vtv5v%#@47%MPqg1WZBZq^f`-usvf~+Y%d*RFO8Mo z)~gbU4LvL$Z=aipL0;pUiP<`J*@X6X>P9v{qhm_wy~Z@nW`hplZsu#sxdibGjTB^A z*9)=KEbJu*7vkQJYG?<4F%S|^<9CBs$oe;1N0K2|+-MuN*M?$9hQ^n}q=Y?SEQQrM zsmtf&TxSOiM#{Y`ij4de{gRSiEqSVKI9rmjlg5E8)fN%Q>Mol3b>S%LCSGgHM1X?q z|C%&vPPYMdQ9#kQIMJ2P>I0+dgiCgQ7wvdYap3m)e4!z)U_N#os4MaW2i7NHXJ z!exAMwf0@BTZy;lg_imL6BA1jYi=#?r?DJ~^t5wajt;hxZgqs4O0!`vL5*>|Uva^U zUm$c}X63LIT(Rw_3-$q4uA}$Zt5q1q;hvYcvB|sU2UnC;qPck2Y=mN;P2k+kGOP>D z#_$swFYn0!K1GlOg*8xwT(vw8Fs}#(w!Rx?R0pXlYhRT_u3jOypq1_Pvp#0m&p-q@ zezjJ2WNml`O`}B`Z;!4h*$!|fjS{M%%gf8RVZnt(lT&26_;M^b*vsBzqqRh%b9BsPIyH3^4flUWF6Q(^7eSuk`(Y# zptL?+{Mjk2-(*cJP=4j{>mWY(8dwLv({Nq+RIeW2=nNGc z>~49wa4zkhp_*l*iOz+34zP2aFmKP!L1eIc0l(kF`WhU?$ANr)_;0M&)Q1q7JOtTa zXf?Goc*xL;jdsxhlxV@U1Yy@~msA%*RuRL6xYe^0z|*}gEFZpI>dkv^p(>n6_FIAK zo(;N`E9z2(Ck3q2CIIQAJ2|nAeozC0x0Eln8nk>c$*=l_m4RUpkekAdfVmh<_~GrZNc;w5U@*0M*1 zXJJ|8UIk0dAjI(n=)*jb4m$T1?Tm!E(L8{szFYfo#7_Bcv%vVI(|jtEMrziC*}Cs& z6E_}WlPM{3s>kzm_XPbu4o+i&Hy(q(bS7%oRIRJkBEOs!J@L6km8E-|&4oX zY4Yi{eBej`Dby`ta;VvWtkSs`_LdxXN&06qf%9gU%ei$Nn;2=@fQsib zt%a#Wob&(l*;}Es%xY565DX z(a_NE9IATb@oId%aJF@Cwxa{`R#C}m2jcO7@?-V4>^hQ}C6rG>yvnsB z3MT`Bg%6E{*rwlBbk6K8#a9YSgxAHg>ijp}Mvl@MkY%p;%EKe8*0v5Y9G(%%?-gPw zXJGhHHacO(B%VfuXIfs2>tswE^!NU_*FSd3Wj0k}2KKf_Uuro0-g=OV8JaY36Uh9N zGv<=@r)?5WoI8#vgQC5E<8Y(|v@#C$s;J2g!$sviF{v%Tc}OEa&vN0Vgj$k|bogemFfppWhN`}koh`z1R?Mw_G)m!<8$9WV_u0|3_cm1`ASd1 zUVJnW*^fnl*FBtWvq8ayei9 zbOJcZ8`DBv2tnvW>q{gdcKKrY1b6_M|pKPR#p*Rd2D%u(PqUY z5W|7#cr2y-lX;y2{|IO)LExtdX=|E?L{7N|2VxC;Zbc=L+!s`==EsboYZd%VSoVD% zjhp41$yD14z(}_B1&3?P3t5Y9+NlANLv~Q3Uz5ry+bDa9Dunp8@}&APssSx{88Xyq z_7&;W3KbYUg0G&dpeL?GpIC@Fd-xi@!}Zb^VW5V%FCiVg3Oo&0w@yXyq{h4~uMPcxG2wPrF0Ti`r9i!JoAcg?c46r_476K3s=H>5i5!+z-}~}# zCuQ8bX4is!{|Q#!ATx#jNs@DYxkj}ir)w*GBf6{5#!t50a-Ds#(eQ+ywHmL9R=8}O39J{W=}{CJzylmIc3fyW?PI;=ikuL+z& z`wBNI3?7aE?z{qJR+)59GW1oNHYFUo39&5p3wcJeg&G&xDiA~Lo1PXLP%c8=v1hrQ71h=uanrv%QLp0Ku z!EGm4$^?^hAJO^dIZY4nw{WfPP74QBt=~xtF^#aWV!RJyj{X90|P%LjE>gCs&jHa-`iq&St3bqmY3;W#R{&Tm zgn~PODarGticy^@Jk2aEIs!%9Jixa$O1^&XQPQps|dpA8)C z+A6!xB(;prTb{ql!;HZ7V>WsKJc9_E#_-)@%-=_Km>yM9GliQW5FyzIE&;X<&xh}veADe|4aTAIXMIW`-hiE>X3BuL5kU(pANeMm4Frn{o z%f5s@XLKdHAakK#A#+pH1Ujq$wMNCSjd7fkN}l`J5Y`@RUGiXn4OfD|%@+&6JMB)j zqZivXQ7{+y)c#8JXB6r}_D2Z=o4cEW5;|919Fv+&AoY)}-V!|NI9<8zgpl$3{!0qI z*w_cNrWjSa=}_rt?|7n!Kv#-1N*6BlnPq}RGLWAX9yO$@{?-0jiw4e{&Q~Ri_(z}S zrXR`|nkEB*T48J&RY;CSRLL;a3nvjSWV1_8(Os;+wg-P;RpIW5W8_H4<61fCxsT&( znYzeNc4x`t52O8)yvy4{Ot|7F5SBU7!8`H|0-P;M_A{~XONb(G=*BP~3)Jd09>ZUV zm2FDMn?+}E?8d{;<| z-WN5+xHAwpaiszqs@Z5~C6xt}D=)jvwtFzJl|*$_lW3sDrK+Ur5QA_B`wntNhN;@* z<<#Gp=2{%datdffcTr%4h zS%WRU!-$i{x|Ej5H@I^XPsdN`YwRQ%N&n$Mc?tE}Zb}wJJ>wjZ3{4M!Hz43o>0P*R z`_8mqij}$C67?0^I1Z$;(9p^&YO}NaUE~OXE*jmAkB-x^Q?LWl_uR%7`g|rjIH2VF zJ~`rIhZp{y!THorSr-#TN{Y}LXd?p66MansD+wQkj;|QmE@=I<$B`}du*so=xd zDif5S>$|iQb^1ZcUPBtW5_CBh5##+F3JqhzUoIUcq#-@|F;onBMU9-~D@rUJ z*KaEV*!taZ(xICqGP}+~Y=_t=2H4v_dyIvb6NR>Jh}w-I(lN(r^X9yUOju~m*EcTg z2fmP1f$qC*@?d~FcIo0VEHf68fzJ(H6X&b7CooB}TB1$Je`Yqry%i=exyy)35dzxH zDqw4nJ3X)BOOG2o_xUP(Uo)FaNNKO87?30-s0k~0FsD#9>2*+cv@pPH(}AIkb6)G; z6&|n(JZO|y^#CS3i0sg2gXQhKa@rw~G~5u!-%(#*3WY9)tv75zYilN%bKXqvag*0a z@^8T-VXQ=Lz7bPkaJjdOE;w#Jca~trjf`bl-UkKn@P1d0rp`5LW>~P3Cz%H2_$qlZ zJ0^cB7}MzJBA!t+Pf*t3Z`ZFpKK0whdAmTLvf+DM zGsJ8>i%vm-R5n!@a4VrM!m_0rS8hU(Xd+IIQ2V*!gI;Jb`&_83X6l~!_Xs^j=4C4+ z;UKtl^qoIKv$MZSkheVCvCaWeY-S#8{Cuaefk|!xVthkf)KUmLmfB;};x>pJk~TWr z55rg8II?(SXwGaKPlfAl2~Se}K=@9|h&ueBiDyB>z$36l(mg*`pyML|3=QOjTx!BD zvZh9kU|+C1=8HPb@KWZoxATxK@33QqEubK+{n?IJC=t{R0`=h`4(sj19W;MHwyb|7 zT4RQQnh+Z|@#qG9RXmyaY1g4O%jn1C`HBBd%aHP$ zjEOyhCNVJ91>7r!*O-CHF^q%B0%77f;&oR?q$%iAu5Ei7EMfFrt zRTqFPhO_Q+%1psXfkI8rOgo@O*2kiXmFY6Ai}qZ*E;Y|eP%fZB%xJD>AsJMAqASwr zolV_(C}6IH5p}OUdci5q^t{dIW{C(J4(2kXqvV*BfN`;3{(AAan5B&u;hZkJVYyKm z;={)Dzv}TKY7qea{7o3uZEfV2?ic(#M?!c8ulps?i;%|0UwcK_(Iu7l^8J>(VQD7W zR3YER@FWdJ$9oFZPxpBeZ7b(Kcp#;Dv`}Mw_5tkJR8tq+o4MafT$-MVY}D#9o0V~8 znlx)-jX(WDf|3>VT!?mxC21srqy=ZhQ(aY~XcXh^f8=nzTMWy7qx=p@3*US1Ly$#% z)NAHAa_+fo-Th6#dt7hD%ZVS5{hK~|7v#r&)0-=fn1`?@n99WaF=#?k3RHoK2Dc@% zI>Rc?b68}z3@Jxy*;{BEsy&u)E_^^GUMEO*?^|6xMxkQc4PWC!>QsVXA}lmPBLt4)1?AC2AgBp(&O+Zz_apOvpxxXJ3H%Ev`(m3gjv z4{BQ3ZLOPZl9h}F<)tif^;&R!FWK5YM6Y!$P`b6xqBtrDH&P$2VO4OGYVvZq)HzA+ z_AWO}5`V-M5;L>GaeSSj%+KU|4jrI+t)avgE9CCgWu=e!RYo+Wj@0{od5i0hH;V5e z%IZ&zp*sXNI-2@?QPV)bwdL@76;jqQ<5}ZdcU^t`L5v(X^* z0d(PGqioZ1e*A83+5AqIi)rCOglB`Ol}rGRBWgp)x*@5Axes|dMnsEo1543Q$-ff= zBJVH-5}0{8Y08zrSy0@*fWJ$vH%2>v6DqY z3^kmqfK=xhiup9;z<267=iwHezjSdL?esPM;pt**Tp)642^5n z>{r3~(Hnos@dk9*pKFEKvV?hBzGCEZGD(F}QR}ghx}%whqEtQb&M>9Um}w5PgwZ*O z@c@I6tB|oee={Yw#wN0F#G2id*lR-{}?a2;FCxmq*8#%BiUd8={P z^*W-7efspVv19L@2d>v<>nwhT7IuMZ<#oHNP{(hZHNA||r+Y;AklIrVm0@D^iX0NW z*b7VekG}k9dp}aZ0~cV^s~iFk*O*A7c>o8_IS59u2~#D{6zF0N7uOuLld3zw`6&IG zBJ*LSf`qE)2CatYbmz*A-|{(em1l-dTgWlenbs&a_4Oa;L4eE+6;l!s_Z@kOF}p1QXcr9C~nKoNJRrEeTO1^A~*L4N==8V z((C)=n@XgB^jewbt{`okZ{8x=b?}7uS_4-+s@CdRB1WrwqOwT!K#K(RO=zD_o|d#Z zT-PsK`8pQLh<{~q-e^iNgrF=?hQq7-g+sLit0afeLnmzV*S}zHO$DaKcwKIa>BB^v z&-iBT%1)o7WD8Ti^I+&m?Zwn5PhqJ??8t|F~0Qo_s@$^2KB~~ zNv^*t)D8tB9N@4Fvwt`_iC$PI6Y=p?18$Zq;zJ_|jGER+uarScldywc_}Lhcpy=U0 zA}bW2KDGcb9%MHEb@4kHTbxA~g57KRt|`6qCq7rEAQKd&efVn5W}v;=Iq@_s;+p`! zwZUu7zAC>+U;o?ZvFU&Y!$wKl;A0a*sQhLawkww)RyhEFmv~>)uT-tySkG|Smb8*F z*S6y|*qxHt9NYcqo*ny=6Y@O#Ud>3DWKdR@V{74=!V*)?&9~;PSnJm}&5VUSm<2t~ z*&51U3A#c+NDp{Ufw$nL(xo0~d`{r_@kJqi@Sk@rDN&-e}PoiGY_voyuYH%54m{ANA?cva*)E^WG8S&Ofo^lRv?JW>YbT=MW)iLLY_~ zf2-zW*$+$@rmx?~p#jxI%B z&54Df)w}NFhWv7oFpnpdrdkoTfYzEC1&6faa{Epay5nq&uN_jWtynrc%}*=o!Ulz?3J2 z90+-(r@?szeDDfAjs+$N(h6w6pZYe!fOq!RsU&_~58Si+>S+}n4X+R-`LK8k<5=sh_i1Fhc3UH66D8cH4}*v88V%mR}(DVJa{|VkdJG$>Q_AD_*HW!mIJpS6>tjB;bbbrgBuKhzQqh?Ck@y1REV5w8 zc8aoMv|2VPB*hMfZc&oZE~%C_i0V|Ju@ty*yc6EymDCLO*$Me5V-LV5Vdys?fAw0k znJCbg4CU3x7sHM=r`*jfBW*HdWKlsKz=j2Z^*n_ARv0KgXi(|HW`dh)zEI()*coHu zgMd7z8r~1=+-QYdgLL=t9(icT@f|FH>~LO7yM*C(rI(5^Sr|q4iT_upbO8wUjG7~; zc;0NiaP=MB!MEV}XF&h@G=|@FUyr>UgT+g%>Qm|+kgV^@kZ1scuU;thX^!Ywghhlf z*NxQ>+Tcal4mUi&w6;B+xzf&A-u}D%y3e_t9->D!Z5S=@rFn4o3QR2PyGt8?N8(|T zW1W2M;;)rVFrta)CJdqH9u+vskGjI5!u_mk99wc~J}Clt5%IDbBCRY+ky9G*OgLf9 zWU2KZ*tO+8XxT&A-g3jtRLm)#k?FbXp^q*_;3=NBdTXx1aPGRGK-R5*G8NoIbS&+-&&kZ+90d-B1y>ufVAZUnf6nT z%!E+E;btjqdV~$8``*Y!#A`f!;nkE`*gXh~8$%7VzV5hZkuLR$; zck|>6J_bX)R0ZpM73l8uTy6Z%hL_fn#w`XRVF9!vCa#|tO~CjWv`jWaj+4VD3sbr+ z3aTTA>r(9mpce}S)PPL`3+1PU%lpyx5%}$m85;axy)`^+Xa2h@vZ+MGm}|Z#eCb_J zDG)YoyzfZz)kUyH_Vbw`JTi{#r{Qn4$Tn;U%{wJ5O=T$4l6wA>J@ zd8_EVprTaz1r-|o+NoYxfqY^tNe zPz~i%|9U!)B7jU*3te;$IGIEdSWPX3)}&f zZu;l{M2(c3(l+1yAlnU2?kA!|Acw8=bUDUbO8Hdi=S5j*bQ!StSQj@($T4B9 zN0HH_&E1*d@N>QVQW^3Tk7@fA8{_3cOT!OY>$ADe=i5$>eSLI;fXuR4ivV09(m~1& z-MnzaVIl?He*RvStqF`2b#m_;(yv>=Is!vMv=NhP1h%fGqu-+^4k9#h8lV_QWQCbS z8yzv(_m8rk#9+sJWq?o}T>&$9IK@oO_oHNpT|hQmJ~3pL>yVpUdFXa_bgpGI$hN%8L+!Q>Y) z>zvJk>l<$#*5%yE_nL5WN`HK%L)q^%`nKDCZ0f_g}V8vH`(yxqtL+~i7^U2EbrM+jj9Pi(p;)AVcvN9qit&rML zh)1$?0ju*ZkpeTvpp{1WOS25>Bfio{Zn_o!4_o&TB?z#j3%G3Cwr$(CZQHhO+qP}9 z%eK*FOy6_ooimHK&V6Ra9~oaFOP2(aGN13M81QVMgkMv6TH2D2@c6uII!=Slt`F@g zdTGQ14iynMdQft8F!4301UD}#$jOK9z9W;w2O>tTaQZit9|b0SNSXIT_6>Jl>u*<%{!V(8bO4| zu2`2x&$s0#G3JmCw3#zz(GQy&Yf`{%G{4vX76zQh2iE&Uq8^adYRmpsq(XJOh7Vp6Nd zRc|98isS;jz;t1?QOrr)TGb|SG*9n52hq|*`IMX%+DDRnEl$0Ku{~rf zaIeHI$!J1zugUvwH}n?yLrcGB*HDPMjKqZ8^^}EJQ_&W5#Ny0}V0iE~F3v8;_T^ln z8JbXTo-6qUQ<@cy#d3`{Ixkyx;0wLnvZSE)U{#-#$l$5@nz5b$YYq(t>(!1y@goce z?^(J5t_t|Gkxhk4|Ag^!XJdxQ&|uf`P4at;=vJ7K;CUjXMgE1u=0_+EP!nddj~&WO z$|z61!|XX<*6YaY66>(ZIV&_ug-+Rw-m_jt5` zmNdDgh9nUzgPhctmx5Z&F9iV_OY{O4$7B!$sG2q^@mECy-1g~U*avo>av)G#dAf9K z`;Ck){hdd@*)-XPv}WbXWlXOnb!y8U$__4$y60Vj_AHJL*(p&^OIL zLgwFIO@&kom#1%cNcrX0T7_Jqwzj3;bu{}t9sZimGl)wKVh&i zknpY+;UfQ#`7eCaaUgc4+^=ZtyQfWRYdtky5Blv3w=A*+uIF0?7yeSUGJcW_b+-{J zy|W=}xD%E4`h%ty8>MkjhJT#L02r402A*BUpaXDj>8vTGypyu+wY9mHsK+w`=wd#$ z`D8Cyk0~%V!t6U!Y*b&j+xN*|^~{w1vm2IBI*?gBq>ox#2MdMx{iVe=?$ooz^~rYs zI4{b;X=+S(GI~&niI42arO|XA-Q9U_ZY0RQ>(R$^uM{AkKr%*wm@Ruz*zz{?CL`Qa z>>^px&h7V4VUG%p$Nu%6Yo_hDC44|CeHIW&w4;^rK2n-G7Ub8}1L_TeX;vrJMSA^! zWoh)WqJ&Ce>*GIiAiD@jQHILjEPeM!2=*0Tf|NPP6%x&3Q%V~Dv{h$=QHu~4;o#*E?#r2Ce!q$m7yA1u z^F_P$F&(*2oq_6^n*NN)xfZvpku2ImHJGx75=mTxA;$o6?t^~T*-G+2uZf?CnWoFb zQ^O#5h7*NF!m-;3geR1Dn>8nJ-P1qN5gp4~bK7r~-2<=k=f^1V&f$861Ft>qc3cJS zxEW?a7b5YcO}gJ(@L{qO#u?tnw9+)Pz%i~AIps0PsL1A2iW(?dJ~pRzZ~E_G+`2M3 zh(S(7<1#!TZX285Ip#QJvf!!2-9<)mzTVW9Jupad9*UqO2dO=)s0-3o!sjW`*P!15 zkh7892CAsR7d7BqVM;+wtKG^c$1SSTyVU-`2@S-n#j;&sahw$maLjOdr>fwcY&hjS z+Nz*pKM#u`KhBcE7gnObR2%V4uq2W}g9dF7K$3zq2Bm0}A4vtYN+k2Dt{Q-rd0jEq zNq$<^BtCoOs!r61F*D2pN^{yP4dAOw2fnxt7~&|F??`{F4^A`5}SCxN}2 zoYGTz27Uu`s4a9t9wZ|k1hgic0fw?V&AH}qCFX}OY-x7!wQ~p@)eWziEtYA6aAPQ6 zGM!5le;;jG8?vW1v6mPOvsEh@QT*>iUutYG3h`TdSu)d z9=34J>AnN(g7x3EF|LcVkqLw#PGnc2PB&JRD(1pw@MB3w#c4IAgMM42xMgR;<(yAg z3UIivb0~Gih9<7Rhk(tANU^y59NPPk^nC)4VcTCk>XY0^?zS0^C8@ehlDg;doVnhm zMpjcos}&M+nAqR)QDYiHLE{0Lon=l$GFt}*EmDmz`ZWQ}u?R3{XoI;lgfe4F_xF4l zHW~1RIVACqqDr5Jf=iC_&o!3ZQKYldn22oyq((mpf;}pGb ze$Ka5YPGePq-kjDL4p(5fJv<-F)`WVDj_uH(12KwSlnb?1UnwgU~kd4#rc9%`Oa#C zzKV&2!lz=MKXJwbO|d?G8&M`U-%)o=C(iyO5{=bDscrb9{21N(ru z7&xV{ycExaj1s-cHr?Icdaf-IdvJ!(AjpV0exloTFa3BCUnFD!(g#FN?k=vk4?DVYSbH_!_8+3h%Hlq z`yK|hlMXcpi9lAIIjDnT?ct0M@=sVK)aa1STn^3+JaOrZoo(t!Giv`3j0j3iumOz0 zvb|L(lK3-yxXKPUWSxT}JvrdeZpECoD+x@OCpB=G-fBnl% z3H&h+%5%R={xDQo0-yLdtfot>v47ybvtSdq14X0uIA0(5*M6hOP74)vN<~{J+9d7d zY7>8U?}xsuCcSraig1IoAM8bHfIU7cm9yG<;H|aVI}RoJ)38#t{B?dlF}r;9bD`{Fe{EL`Rr32L}G8@ zA^`KP?qWDu33E487GTxRNtyh;P)(~(QJXNS0SOF}1Q@4@OAc~)Q37q*M`~5FS4o@B9C41WW~}WIjCdtNw{kC}Q_rWQB+_kWy`%~9$t7wIS!0IvM@F85vsFdjlxxBs zT?JuJ8$8Zc3L)L!7|wP=mWYHBY&9jk3aMU!n(aYL%*J);jzoP2Fd_q8I{RwIGe5PV}XW2f#7A}}}UJz!p4>citSA}-}$a#9ErE5e*oH-;Ea zs$g_Y9eR8wIZvIUAG#;d_=vE*_$HZ@_*vv5S)dJ0`3~5E=pt&2rf2nHRUKH;I)ZR@ z!Dgia+;nw9cmm2PhZ253v z9pSeT9QU7v4#V@b8^w|kgo^b5C<3<&JlXIu@=iye8Zc6W%2w&W0lCC^&CgiS5z(|t zW4-%mHyXJh>A15Sd2ADzs(u&C&POvmmzz5c*KANtALi9q76`)yu77PgB?qvXwx-Q} zWa*FwyAPG!v^&|L127NRas4U8M9nFcbYJAlX(l@nbDO5BODH>_A$i~FnmfgbGdt*Y zd(Ke%d>tNQ?#>>?o$SOv07I%XGnA@#ci_65;F!q}_0X<|DY{5JuZn2mB}{>0jpBhV zJ!?)kgp8_ZgDeHz;aOcx7=@f$O^;qFx*{)qWxq>p8wG#%Zjd8HdQ0ao z^e_+7=2EYjX)vKeEGUg57xre$S^m*t4rg4-sZlc5(S~*{Yd1 zKu>vQBM63Cvb}a*_b0be`m1!c?I8pUm(I9}NdXK8d)8!Nj*3+3W;c9k?Zy0+yMBs4 zMk^}81<(8=J6pp7xK_mm_)z;@2p4+C>Bc8cw`+u$Cnte*3lvmnglf zZIN=WCX3LZi(of(7^NB*9HL{oNm>tY)oy{ctW-GZ%Bh+Tl9}M4&U<>#MxCT@rFaL6 z$utMp*F0NE2(bu(J!r~TPF}@iwXX+_waa^;#mp4o9m)IRjUe#bz|Yt@R0Mq^Mc|H8qieBp~e-p-}w|LBd_3aBlwtE?lCO;jDUS%E< zPi&ml_6i2-H*1`?={7Bp|F!ol{oXYBgR*(&zCU{N8d(vOo@aqPt(Mu2+cxt;b>gQw zKIYA2Z(Pw@!&4{!33kIF7X!03R9*otWJ+3wGLH(Zo*j(9rVDQ{!K)j33K!MU+^n~K zb4ER~@2dFjDOY3HEJIB`b=-bbxWMXq;x7nbc6eH3152g$ZK)*I-(I~e~|!QwN5 zKl2MggzWq&MSv(ZPk|Y|-$s7|dS|I;0<)^}st#3-A-3limv5qXoMnlEzmR1isN-1Z z?({F$l$D8Vv_sCW#`joPU^v>BC+Ft#cCKC@J1fi=F~YkEDt8k$&4a5Pc#!!SJow1< z_y+b|AuT)ao?p3QJ%_l`HL*tqfLpe3mo}l%biV!5^%bh%lL)V2%#s$S08biq`Jqh7 ze%SOhG6i$|ZP=6F>oKJD0ATx2c_P0TS;VD1qV94rmF}}%Ovi=i$q~ntz+o* zFn4K%vyf}(D@=COWbdQ*TJrsGlyBzJb@?%)(L4%~qY{Qp2%;0w8J<+??ap(EfVLj^ zQbg(E!|7_tIK>%IcR`2h{&sL_{VWlPAko{s)Bqjf_|AR^kS-LnYm^umD+dA0W{Rfcc_>cPhzg{c>+kbuM|D!@{^YHNf zQeQI}rA)Y9C-g@B#y{{gKm%!~~GG+tLDm;d<7lD7Y_*Z-xM|6#5F zbXa-=UX&xSisq1A}5w=M6$BPX=IUtht_R8UzfP%^9$YX<) zNgWeYiPS80dBeV#S~MbA7Ch;^{nZMy&VxBibOX|oy;QNHz(g~W+rT;*;m=t*kW8*i zIs?eEEpfoMpsM)1D^qtVw(H*Y;S;9dghRobh|%l1if@aeQvA5SPgmszEe;S?|5)Tw&xfQm;+ z(Myr;mk&_6I{-}*KIcS&i@y=t_*zSYtMsEc;aa^EhZ)Vf@7v99#VvbAQTq3$eD%>g zo((~|I=9}>KD@p5R?DQ(GWFXo*rG769$)aiveyyPJlmA!S72tN`$raCDH{i}^GoY` z)f&B$DSqrC$ed$wC`mRl(ssogoLa1}@wn;Hje$q%W=cisG>($lw*mIMC=Dkr@ zrbnq&zLm5w6*x9^t&sw^&nsdEP+&tdV3s;t;GWG(`xjr?c``*-*KIyD&tyXL$5a5M z^qt(dx818bjYScR${$!k`nS+IVKdk>Z-1h-B99{pr%?#34puye+!>U(0oiRW-J&$n zh}os5U&+*_`cGO+AW7qJO^Nt9rQT1z-}bGYKb35q8Uh^S=Zeht3&wE69yx0DS2|0p zSx6lMiLpB+1810Qq7p3@w=a{^C>M6o$cgj-Lz?z!yA!A=$>%*`LeJp+yA* z4)<&}4QmyX=~qE(pj5c9J{4zW-fu@+`m+stPDg|H$?`eXNN+Xt%owTjn;W;DB!#+3 zHjon&Fjn*A*X08kuY42o%-S~j3J@YklWsTXvy8g{rG@3@`urldGno3WZ%^6CxuENw zWteJ%Y%jwVY08wE9x|wmZY&J0aJ4(&0EMwa`!I);-fp5w0}@gZee3qz)*hsjQ0}Df~eWU;>s1@ScgT-cE9Z8 zGk|p$B*881=;2Km9ENFdY?zaPA`QJ@y^hj8zwGx2>f1~2pRQuGt~>8$->nq1 zVARreWtZL<+0;e4T+|4BI6quChusEF9&Eh(Ud6t2d;nrKguk})C%GwmSf8-K0o-!3IYLpKP@{IEG9!BvhX+T zWWIrHGm(X1cVQ3yUuZgyLGJ$dBBUxHpmQ#k?^(R<&@`71H9f9T1qk1|0Oy0I7Nr&( zp^kMWwTPV}WzugrxUM~xP-F-rg_Fv?uLtKVB;ilp?N}b@W1N5cD8CBmymyjsRYv2F5#c?i zkj{vl2?Pd{-}Fm?ALewCOr->rFZofZ52H1XUqCBeTG7kV$z`=7hV)bbC3ZL)5-=dv=ocZ)Y}pmXo$g}# z8&?+MxPNp(>6o3j0i@SyToBB&vn_lmUX5;0z-Wi0pTMg$CN1zVuT3+6 zn&pVGIa~VxtzR(||KQJd%9{3unmJ+|LUp|xx#hR|2eI3q0WZ=ySw(h(&XGT<(h)tA ztvKrT6O|VGaWXu>jas%R%@zBbE9d!}(I=!8XO1_^YE|VfPLMe4+GJPD$gA(}@MlD{ zOg7mPv9|9OAUR)nA6_Bu={bGC%t1Q=f{ZlajfI%9iPvMV^K*)fr3+2C5CW^T&R2>_ znkLp!ckw>Qml(CenOqx$LfoDpTN(VAy^73CTxzqh`e#Ru$_`*$k&m6D`{;wwD>^ky zAPd;jVM-nTJ_}1$tz77RYg25=;Lp^YV$?(a8+`+&B>2f#$U(B+7e${F<`aWBqkS0< zgH$)Lhc2sjK<`@ux!>ao!5aIB^Gs$x=NGr9IO*QsY;==Bg7lfGSayA|6SGKnK$!aR z@Ukexp$Ig`O?WJ9j5HYuaqV)v7wgAsKH{D_NvuNBFF-^)T%&z08urLY+7nGDOL-v# z*J>4*RNM*J#77{F!ve1^X;)GIaZt3X2N0pwM z1`s(;r77HYqZ_uhK7(ceQe%k_%_@Fv@-cZ$QAC?+qom7G(=yMm7(dR0zqi2eaGmM` zJ=n6AVsTD*V$EK!f)o?a`~;x@y5#2OHY#bC>IhE2Mmp5tdqnNL>4u+3$gxdLwlvx5 zYu62cI#Kp^2SEF>@%9Q>$c6qOIkr>0$=7~PZhn|-`{=BlU7P&AAtouD&lbzj<~A7+ zc9;5=`>TxON2k6+byjBEfNA-4mNiTyf&d=hxxtJXiGlD#e+NyL=S^qm;+ZfYOM_i8 zeieZP$4@2jC?#h!`_L80TIW~M-X1m4qr{TyUcW~_{pLHvBO!R0g`UrIpV{|Xgf-F(EvG zc^@`g>M36KJAm-_?FNf`26A@ z93i06$hgYQ4yd^NE`Y!@Hzo9MGFzG0uggc;^!WuP0YWVZ$=m5O9M^W?QQ)j>e*-4p zK(B5iYs2pIIWzF4JZuXrcTf9yg;#g}Vxo?hjo{OWJAu|f964WYeY=M^*>}~~T?43P zD#~GH6r5D63yBW(rgTW+W$WAx&0`R_GeQy7Xz#N?Q4V(M#{RW*IW~5ij3fC+*QomB zSO;RFZ>}e$yO<}^ArWtMBpQL0|Gh#sq?p^2^`mBsGD zsZo^p(N4AW@8v@2sJjroMwpCMfSurg78~?)=F#GGHlu8ofP+F9g)x9^w7><0b0V$j zqu+*Zl^$Q@JhJh|kV=sZceuuQcVXv)@h@q5#C$jiDxQ+)QcB$P>@N|V_H5l&wmpr@ z$BPOTY?_TTWtv|133(cnc*pi3u*J;v*0ZOjDR}b%mFVVK_F>xIW0_KztRom_*Zl$r z%JGQl+bb+({UaUuqQqhcMZ24S0sYO-Jp{H%`^toBGJ@UHuQzRlBld}1YQaUTPyWZV z9`>nh1QzPNVn`X2Sc`IFCg^nFTg$PJdV(O0mm=fL*H}mx?!qQls0s%xL{wezt-Q*5sSUB#H}1@moBKO$^b zkanvuXk--L2=dw}$jyAMyaZ%l_QI5G90g~zG#*_j2Y93~(3!sd*Sr-@Xk$Ou&by&V zs3dIFLp!w2Id$tUlc*9*#m}EE1HyVdms@p{2Ds#wUL(pRknL?1Wv)#WqOP5m;bx0z zqsGEOe9cnb=2j!xf@)ndvBcv)nPxHMyd$rUHt?f+kr$pBgv*BWfEK3nHA$Ay zSsaSOeMCPr5f|UULJ0DlrY3)q&Xp0+RVLHZ7GsDg;-hxQ-Lnn0lB~-@Y8GV4YCPKG ze!?Z6d0|;NCt>hB{UEiPhyDgc7RPFC{ff)2?u46JncA=Rmd+TI4oHT6mGvw z_43vVgr-eT7Q-g;|J@?iAyMhbM6S4iCI+7BSmzzzgjqA`I)y`R8d2($+NGes`<#u) z!F0SKYvKnX?Uhj_NCc5u*ND&v1KWHNF;b^PTo&lf zi)fq(NL-5a&#AdPI**{KR3-S?IOU8T2^&0U$>{~h1zTQM=??_ow;o#dvf2H8ERtT< zc`jC_t|c48LI>Iyy;J?OLWc6XLUnHAgourpVt;;I|Dy^-aIH5`K}hvunrZp%^S*w~ z_U3{4w+x|@cVEpw&6k2!P;HsXFEa(!{_LSo51F;d;hO=JLb(_Rt2O{6Rn6=iHXMpp zqzewAOEbdlJ}UPGTbqra$Hm2n>4?_#)e}oEM=Q1coZY7ruh0`2IE(8Y%De$)BPj%c z??MKb>=7DEB2bu49fOlLjI}>wZ_tP0V~F$}G0;KF1o9BB&1EJE?()kN1dC+jB47p3 z;)&hlR0r;i!q!ZdPMa#Q2-sV_`n<6vPGmd331J3mFP_a?QJye{z@xpdN)Wax#;TQK zT$aS@p@SY_WdMYI@H^`wNwF$MWGRJ#K>**f5i9|8eXKaw`#Of8S7x1$Qf5!UbV4*d zo!OOZCKeTHq&D&=7L{`mJpUfT76@jr3YT?=JE_tPq%5(Hq%JY&pc|MQA zpS3bi$S#zTCwsMc{Ug*)SK$leTQXXiwoNeOoPO<{wl;(qX09&VIkKuh9G@J;*f6%7 z5I{Ka`&j;iUtvZ-c=4Z*6ZA)A(FaZuGb>VwgY*X3V1_)F9V8+!IY1;X1m<%qp+a%7 zgM5$W{HSLd?GcBrn3Q23F>bpx1%T#B>tkgPCy{Yq!)}?YS91rzDe%E$+F|BzyZ)#;e=CIh&vtJ! zgm}MYTvYe)b!)sE+W{K-Ivv{p=EhGh2#0!-XJW1co4;A1k>wbau{N%6D2LtQdDrI% zTuB1M}U2=TWnx&DC)QwrWTkCTCcG{wU>9XS!yy(=-D zKXj!pf*drdxYp|pZ}9kad5VR_wrTq_xhC>O$*c$m(C9zPKSdfC62r^5Wge~VE{5yV z{(er1yfs*oBYqFb2=1&9*1FlDNdMOF_;W;C9a+ixQ z5B|p=ZgZWMFNsKo0M881lKg-6n?tZ&6U4`<>vD$X(Lv5-Y|wX_u)z=9aghjSxah=; zuJ|T@RTPiFoY1{Cx7I7zhqjEX+UjNCZ&%WnN0g(1Ne2B-xNGFrScQc#&{Mf`gM7J{ zjQ8T7g+Y!gI3Xd1TEH5&(DZGmtbHEIx%vpRN_W#jRWLw!0v^yZ@Z)Cth|&hr^L4Cs z6m*U&{O9;wdR16#=x!7_>JbN4Z*27%&Y% z!-S+KAXhqiVWpNU3;`x~gt?*9alPiZE-K*$JG+Ewu~bJ_%thPiPtRIn(s^G_sfr$C z(}I*%+BT&${+=RRrgq3wIx4rWiE_X&lZCZQ@4i*Ju^jbU94tXyWnb#)!F|BS@7nkT zl2}|0yn965FtOM^uVRlC^v~qLKpXLIS2d0MI*&VeeMMntP%J>nAGqyjK5H^yxNijD z4nmStfJKQZIJN0TIcYqs$4u3rT1Du!Dfw2irv+_qUTuYp)|qlGv~chgmV7}xOfpRW zX1g7WU07GgX&oep>sVlrZOgmZdygn4Va{(MYKK45tL@OMYoreNIyFtqxJ+^Go81z* z{-tr<`+bSXF7+w}Xw8xFMivGMspX>??D8kcTh+O?0>cLcg|rmbuHPwbUoi~q9?20I z5K-_{NkgjN=kEgv&?{`r1$htB6A=#qDqem2+zAu2;q(9|b6WT2|MW(oz^*G?pQ>rU zjp~VQ0KvjUlh5w7R8t)Zp~-Z<`uP$EugCZJ*DGfM;`9wTAW*u2H(1QQ`24= zwzWH|4AkIq&=rXSYOAgC)vVX$w{KprS3M4~A0OK#-N;U;*+3$(Ji?uceeR(Sw5&IF zP}N5oEt1H(K`Cy}EJ%V2!QDubzYAn&g>1H)PZT2^7sa%cC{b&u!N`2Og_)@QfZm2{ zA(PUBc*n}X?J#V!Inyg!Qasuh^ax7JOI`R%?8Y|s3tR{VQ9;O0XE3YOI0l~x&5nxF zuDFYBs=phDbQ({hL<&CZUI}i7FJ7+cLrfh%wkNZ)r^JI{=09*mLbU5TO=KzNUR5gG zgGEAc(-V74iVzev?;FW+3ne>0rsAxch!sYCD4B_V&FdY@ zYqFiYiW4+EBSQDVDXrV}vY~k|=9KpyqKLM=I=_^hf3Y40T`2m#A$kpZ-J6e^xs@f5 z0Uq03d(+N1*C6I+ zZCs)8OmJ9wk-|5}Gg4pmZ;(*51wQ^>$a?e@g@8$|s(^ytr z`6TH{wL~g*pSfDO$i}eW;ZPP-%#2^?m}mq!(4o>RMAVjv7|%^in9?uGOB$M3wli?v zGLKfbNNaKB8Za;s9SW4VW$G(LAIY0(uU78JmUp+FnJpI>-qObT$q635tb28>MI4N+#TAd9P0uN3TodzTWv7oG%m~ImYO<;L>Gw}_%%sqb?;V~&}&w9*8`x*KD~9pN$v!HEZv$9 zFt*m5#Fj{1{$Pvm5Y6z`a*<{NV78&PHiZn6D!`20luCK>rjR>JR6+gxxNn7ejYf-Y+?iF0L{ax;KPY3e>Oi^dUs(MK7K& zA(ayME^bf={aDe-4g_Y{TmiA6f7hS~P=+jS9#G)jH2Bd2v-#ay5`zrI<0vy5GI7N= zZ}YWV;aCEZLpO@W-^{YOI}#s7CvS4R2u8_C?2YMW`z1HobHkdkZb^bYm=K7bS8M2q z_1iEUafWM)GvG-T9G+1~C=YIRL`0J76m(7p34W|`mloj|U;^+ED{^A##&a8E{Ae@WYeJh`B#5;q7su*h zZ}l|&(i9pHTb)mw@^hEoDw=7kN27LnEfxj2q|}stbYDQAUb5Vnu$_9NwKHO~&J_%@ zhwUT2hj%E}9KUomy=nQq)%fGO^xakljC~@#n!gH*QT+jCU*+s4(!>7$2m! zDuy&$oOIhf|3;&+pt!Kkb?5{0SIG!gTeS!>hFioW= z&<+KPq~j;-+u-G#9GThf78~wIaw%>JKugtvJZ0nfzbTZPQKAdF@ZIxuydS5!u(W#E z)bpnA5j7={z){;@E@n!Q6()*s8z2exo%y zW3F0Q^tvn-3wI796$C^ey(C?(F4!v~lE^gXaDRzTz&QE23x6WVgzdeM$JyvUpY;ZP)|7(63=Xt5S@A5Mcj&eanhnd%Qt_6H{DV?u&AI z5S($X$=yXZ=+-6E1;g2CCP3q&dY+FcaM?}%p>W_{$dyrwkM2_)ycHUj&5q#>c9q)zRNuc74 zOqmZ#gYfV3s!KEX{lU99q1aj>@!s!2tT&?@RNqS)J2#YuQxZ)1RyFG&bcoa(p%jZj z0j5Td2?U)V#LiD=;wq27NNTK0a#g0$R}A@N`s5w3m2X8hUkW+x2#%tf`ApTgXYxS8 zWrb41SHZ((3WbJ6T@Z7>D{{D9gB=^dTsE39fCWol8fK=5E>aV*H$si>DAnNfM8$cO zAc0)GRS^c!L*nbm+`w^0pmqlJz0v_q~A@BJo>9Mfv_)8MlU_) zn8i`$NE{w91n37=2V-GL-X^Uk@NsplLPAXQ|2+uAx3n<{QX=J z2jhZSE2MJQZ`|SPHHc2kzpCo4h=8fllUk~P?L&693B@F~Z$y*ln{wl@8=Gq@d3O=z zmze`x7W~zW2>wtI>@-8d)v|qihZ>?5MYc3?KeMf>x`IJ7SU+>LcFri!t)F)1E%7sy zY<^0)7ORIE(_nP3NU&JE4D8^og}2T%+TSjx_g|;q2n1W&84k1Ro9H3u3C;i;@}rEk z`ROlJXbzM>N7CN=BxSkYGtiaH{Bkp zR(F*4J{o%0orDD}nv@8;1Rzm$ki8%eY|`h)!f85kl|zdA;0|k9`3jS3@JGKJZ$c2a zp(2=xTnQRKWW$Yd9lw>%rQyXa9(r3V?Z8Aj{>LCZNK^tw#Km9h-X?akrM3XueXAp8 z#~qNTQ+FmjU=}3w6FM2_j1V@$=ca_94{7-LbFE`a(zgA34H!QHTc<0345y=p_`dAgVF=mPEhRR=Qp!pw zu;(+YqI%$F4c$Ji2Oo+Z$RShbz3$rjY{yjJwGY-FzEnU9lzlteFKYxK7y`0M)RRC0 zA|&BJb$D|jZKkDVN=^%uY3Y(QL<1!anmiFIwdD8L-ny!F88_VbS&m*%ACM||jMOI_ zGC`pHN=aVj_JYwT&aBb`7V?!i?ab9plk<}8HL<`zzELq(rg#6Z%A~5Er%5ExyoU!W zdPza(b0Jpo=|x)PFQnxfoX4p~E0Di^rFa6(xMVQ;O(fIUjnU>_Wj>T1f|M{^GWZtg z&$>kb8Yn_|M;koj&k;m)TfE~<&&kDSfFt;RPTjhYv!2+l~9;1Dw7vYA65P^|!%u5-i#n zJ-Tnhnt`_APpOD);#TeCg%k{YU$)~kGOYbUfPow*YT(SwD%H?G4aR_93Ut0BaJfGY zjc0ip6>bCQ@`h)Jf>6k{WB(8a;SNSV?v2ZFm+VUirCOJ7A{V?i-`&{cTBWdR3gKxN z^kfat`!g+4f<0$IN*MGAZeH3$^NW_Qb{}7;8uRW$sM%5l6 zt>!CEC2Imn^^I)q0SrQl0clR0GUEL4CW9z!lCH|~kRx-L2f(Ybl=&pt9XxXa3>iAVz5Z;uU`8#i=V2thRkT7Lvk*@2SQnmSNpGsj0~F2-@Br0;N7)DFTtV*66ZK7)15354SZHs3tN=oHps9K%XXrQMTY<2~ zGc%@=XHB-w+WG``T+MN^0Ic8L2dsX)cus}wsM=?6 zw3d0{U<-7tuSp6tTG2T|>5}RqXO&Y@OC6)E=lYH2e0kx6l!x-vT0heHW}nu8^N08P zT^H@& z?gT#YVd-;NevAoS^oM>kHYzQdegAStaTUR{-~r8TuH@q5w2e)N^e#0Sq_5;-o(9*U z!0m{~sWc=IXj2<1VlidF7*JKb8S~Qib^QxRe3?lRqO3faI~@XG?xGH5(`F+`Ny0hm zgka5XqgB|RuUS3W<{H#MDet<$p?{@p!0bcsmob}_F07L}mI?2Au9~S?#NzXK{;i?$ z;Hi!Kp6EevPyZT@JG|9(Q`Hezhm_S3@)DMc&1k51Y?>t~tf8*y^G^1yDQU#Db3v8$ z+2dze8aBxQeb_r8Y1D!k{<7LeaBr3x{WYh$!yLhEX9Zl@N%UtU$JJ73>A7xvR0lumryf%wt z%+V(`JhI<@%*;~E^QfJJnP*Sr6G_9UwshbY!v5@)gim!Yb{(3EtYBS<7EhmRsTCX+ zD-7Sh6*oel>wzN72Zo`qdojwmWZxwzHg+b+(RMy_hfNYt&d#RSiYf zn3ZUc!{zo&yp)z@pm%`8uZS(;yf6=;dT?7xrV)Ih!E~3ywI{ykiDqfF2b-bXw-?C= zk52PQxH4v-^yIeBmIt=Fxa_cB6H~a|XJznq z84E{%i3h954%U<>oEM6y+N8O}VX&TVK$aU3O9>6%wtGpB>zvSbTg_351ZFrCF!hIi z$RrRp@a`iWYk8+zVT~b&2@{t$aXWQ<&A_ft7muYDFkD6fdnmt+@P`v}m^0>#Aod}# zkB!^1A0Qe3+X0qq)#{c&)3h&>r%+E|NyW$@Y8IM3ah^p_i@kx9D{^|wlX4XOcPZm0 zlWm!=rZ()~#Yv8-i;>X~6qMtIeOnd62|0wncpZ_F*Tzl$HqJwt(LuLY5lP&VF;+a>Ji_d8WPtU-7YA;GV&tIUlOM~|>l(wNe*{!eQAjOH zc)EM>=Yi^*mc|v~wZ5cv1d2ToOQf&Q+8P+?eI9>jrsi3MVuUs0FeN7X3RP3`FY>f% zetkiFTcTY|>flqx!Rr&0xc735oV3ws;-c}?)om=BidM?W=6OIhNTTuF6Bl~u&{I-I z7PR^S=KwW^v5{<*q2ahUsDzS)+A^Lif}LD6!-d4x<`yJex85lop1AGZnj13-6$hc4 zqwCo)OkY;_$Z5Hm&!ao1#0S-d0EEcc+i>$WNGvYKpFATt10)oo(iaNtbTMaIgXHoD zF|ni*t4N=XjY8TEHh08TOtn=fKT^t1&;!#ksX5x?FZTgEgX;XR9)__9FtKoiiv%CAsM`+M4fB0AV582V}zwKqEjJa?3$B-3D42UWl zpipll*>rMmvDb;^>90*#tiuM1+7x)uc!Rzyfcb>j=bx>WQo7?oH7Ob&Bsm})O`Xz7 zF{2w9D024%*B@|d)CGy;kk3a?LemN}f!np=nagrWBvNfRpi=LUG${wFa*GfCWv*sQ zy~j;hV+ATeog*3mkzpg!eCge^2pCKIpmt*oSBXN8ZyG0MbAtP|pNNU5_6nytou=5i zugvNa4jx?Wngx(-?ZmM{{urnyuaJp7#}!aQJk5A$f@zTh zC3MUzjWw%V)3q@dIDp7zcLI**G7)2RzH!jwK_vmxsiPJ)UZx@;RlL6fsC^mtdqIIX z>)uyiaCsM3TgzqAldaD8&hUmBLg=W8k{v!Fk#fLJ#u$w)TT zwCD>jmZ;wr(tIQ@lvcTNGRFWhUQEQsJ9U%nYAJTyorJVVboc`JRnwqqi@3EVWgw_; zQ-e19yEmes^Enq1LkU2@?pwYqQzMF2_Og;F5iTe2lWeJ1a&Kt(&x1L*{>wa?T-O;m zWkjLViS+V`9u1zmb#TWv@t1aW9&5u0`?I=lT{LLXu&5iKy;_Q*CZfoUk}l*T!c;4 zSmm^MxRi|>LYWzuuSkl!ndmI_?wV_bbEagI%;6Sboy8%4Mk1X9)EM`+nAk=rKNOnv zMJwxiv@hT-eJ_LL!rGTsb$&B1e`ZSZR>%BR?eWF={_GoMZeS{$MpXKv4W{1Y2Un+% zyED#JeC^_L<+KvV%B$IN@cAKgI#)(9OH7LJmh~6dGR87EaFd2=L-l^BiWC$wb4ZTe z9q2;hC$<%G0irl8kY3S6Zv+vhroCl6_m|mEDOT>-vGC`e<{_zPJa#wO&tD;}CrNb&S6RMRWusEodsM)41{#FU-b#k>3Yd)b8-M-Ww8^sJXj-`nt)M=% z8Jf5Aw@CxY*zbf;tN&Pqw=JHdATgwJAiOW7gp+-IqRIB)0cejM8MaoX#dh|3c;;T8 zNcP^j2#P%vLpj8*U?|sj>v`=KYs7xVWa6UMLAa#BpCMoYczSo!$B=EBnr^*I&6^-@ zl#*78)&xM7e(~dnLwu2&b?w-I^A6b{RnUal`%$iKX;NdeHg|7uvm-RK7NKrJ0u{F< z0pAvjw-SAm;O%`*ST(JP5o z*Zi37ISPsbrCr1K5l$TByT}~c5`?uiOa0*8=C)1s5j#qwjcjkVTxFtN9=-OmC+zi+ zJRgeyWn8_DZPqIcp|r5Or6nv>6#O_{UeQ)qh`AZdPSpO5d~gY(8*HMJ%G=ixGsjav zowe0gM=cUT00iN3A*!xy2+05Cz(yhs=vJb9B2y3y$~=McbdboIg)dnl`E|;-(ptD1 z0Nw&OW$xZtga7d!QK&klIs$<|2Grw4Usno=gus$rPY6imeEU~5mmN|UuY}{v$t7U3 zy?rUFZJ>OF;61MFQn!e030``!DN?R)kQoWUMDqq`n2XRTSbP{MKOEUQG{tPv0-TCp z34b$9lU5)K!!Vd&R$yKgk!NYQWl#2^160(*PxlO7#!3VVQ7d$}lKjEFu2SdICVoUz%{j2a$vk_5qz{>n^r zYG=nPY)uj_&-*Q0(8>{wv6pi9Thd{2&HXY%22+t81F{`Rl}n1YKccy6n==8w zb6{xT(0K~?Eq%wfRIoN*A7s2#t?5st0E{4RwP4Id7s5O=WiF{Y^UWTmK(}(^<4`!x zo1Qr7y3kr`Rna4VBT9SfWmR={hH(Y-RQGaM&*DItLMX}K02|>7v~ulEUB1)ot1tD@ zjyOUsk}ei$UkNiXpj9ramc~$&*zp(h=4%7=LlQOVfLhM$PRcB*z#~REn1R`gd}b5$ zXk+7#D(=2)Xz#r^mka!(pv9W57T0!F_}PHRVEaoB)2e|Dxfs1vG%A>&NcyFZQ5jan zrLKRN&hLa^_S}H-&nNT{b;}FAew@4dK>AoK60Sl7FtLUizNALJ0#AN**+ro3YmPu= ziXDfXL_raZLclY8^ch!L-!b^=smh1_0@mJ>AZboODe=zqjmpaSD0@u6esuThWyMW# z$hFC)u&2DlDSp&CRR!-N&M7l0#P^%U))k>kV=GCwHmE71;V&Z%zXd3`l;Y4-@7I50 z2_kbY-v2aY2P>+r933MTA%WuSy{9g=JP*YoN%a}h$ z`HG0h=6|e5;5BQ2H_?KQU#82AWFz zF8jZ!&62t*TzLhQ+NJCKJ_HFyIm`c32k)sYU`)*=+%uk!<|qp$R4Afa$wtK&cXJ5} zmyA6!DNL(=0(>npV>VGYf+_g@z^uV9fRz(Y(isYCuWhs;GSEDrNkX*#SeE{8bn$_E z#ZF&05UGei02*+C@-nlb`Y@)Px6#7%1B8a8>*#zEHv^B5jnvla4IeG93Fs|g)UQ+^ z=<*I=6L@G8yaF=1_e~kq;VTuvuq(kS{K^@NaEqKoMF!9)9$}C;r?3dLc`Ws($~}Ta zRK{XbM^v(4cZm$BD@(v~RJ)kkGwkH1)+w|MU=|hQ=dGOn>EPDkQG0DzzR)x39*juAyf#>yTds@M|6B*xvnKMf(?Z5 zMAQxmng8S`VJ*6-7u@9x-f6b3e1H*UAL;T(5_C2&yNu1F1!};&$W6kEKl}!G!X|=S z0pyTx(8{Mzl|yVJo#f!eyPIga3?_r#{}?0WFlWWz$~h8Nu`QGT^@b~bX_#O^)?C*C zmgt!K&+sgOTLc|r=jP>df5U&bR2*sp8;#n^U}#zr&>oz7O#9(i!;-PTiUsJZTm4Ru zE`h(aRb-<`3l>7UxT31U{RkiY|7vD!8`-0TEFYKr`i*7M){gfolI%EgzSV8e+IDlw zyT7>nBKZWDD7QLN-qnS%-p7nseQ5$Vi{fh$)d-*CK}el(%tjwe*t{~Z0G5teY1QP_ zYRKXwF`kcDv7s^8pG3Y_1Ew8Gt~$y8)qSeSgvG|Y6bAI08wm5hG-exPm-1oeSY`c> zJ4ID48ZQp}_3y4KBeFo*w+MfS_7OYt@nC1BG2gN*l^iG}6d0cz?`4Ln|C3tCIFLXO z-R?4WG|u&`saPLQO95!di(;t_&@Zi3=c7{C69InZF?qZKE{*Vv%{q*b2kjV(5VO18 z%o&aHR&Ze#hUiw<`1FQ#NaYT~v4E=9yg<<>JDyR?v|QAb7N19CWqc19XA}*XQd=|r zTf=Kh^g@E~c6*T?Y6Z=R%MrKX5jqqCr7XHne@n7_1-@Flqiv^Gr3Cgw6Q%bZxEMaM zXo-9i>zNTD9#GUJGNCKrmm#(?nqGinqm%cDxQ6RZ~Q?|F;1wZwVmx z9P3N8db6GXb;k^^?F-{sMN>mN4oxe1=QLpA<&e;>Zf-rLq+loRPXnWT{NL?GX`>OrN4s^}(rw=Awmqgvm!x8pa=zPoX}>2-(&r(z^%f3#nX ztEcL{OrgCK8)@?e!C#PZ{Wh0i7V}|@69i_#5yMLG|FkX#ou1+sYj^fMkbgNH9--Su->w$9iXYTCa4K6Z)bJ?5~{b(%BH5>pYl=3x>R9@qd?8GLGO zN;t>fkZB&4X$oV+`dH5kmf=bgoTR;z9F)#h(tmaUoRKL^uk3ZgJv&|?c~iW)PNN5w z0kY1z0>`ZinH>N1?IwX#9pX<(FyaU z3X?TQuYN-J90eAbq$>vBeU3hH6s#g&kkfUCo8(A)Na)QVO#hQKSA7{5A$3n}1i>m6 zXrqGpwhNqfbrqhN*+>D|$@FZNS|s!cUuujj|CF1k>U!tes*(0p=<{%Vuv)LJAP-Eq zBjhBmxkUSGgbHTeSzw`~N1b+~x zt$S$93D+I$UNg+vhY)ARqROYZU?eJyU8C!X4dhL6r#PN(HVh*5dvm`{L=xE*SJbaZ8Q8 zse&oLo4{jZtm(rN#%x3T;CK~3poOwgb|Op`v2WSh?jvt(f=X)SDvQ$ zmd#{M_sCC{s*-^hPm&E|BVAm5D$>WixyIE-oO%cKI^`$9lA7hcc%b;!ar+A6FEi$AoZx7n< zj`tmh1o_nBF{n@y!lv@qB}%ukO>oLWH>aDp7_uVMIDd%aWdQ9dV%s_0 zS!-W}3pE%RYPBh#`05yZ#!(4Hq3!j^0P~;&#)n&ddp5n`uu_$sy8f=&+;WFno#v;J z`jh$#l){9|W43~^J%>seUyRzF5>NK+h0OL=YRCI}4+){fmlC8cUSEBF-?|7lpr1$n z3#)W~QKC=^Lv;&yKtX@hkmf8o|K?C~w~u9M3y5OFtVi}msiAm(Zwu;);BEQktmeQ{ z`B+1%iUn+`_raqG=p$NKV(iunxU;AM4Zm3__C=5(yGW^(*KL&>m&P8QqJBpV+E0|7 zGX~Jk)OU@hxq6P8D*|Qa!iNe63GAQ=%#t!q--*2#X1d#t$NN zzb7aZl;bNMc5^ThhZF5WEiG}{$7;Sj)b)TGJ0wTy^%$GMwqs~xp|?!9wCxuMEQ5#%jiu*@8oi7-sC${zIi z^j7m)=fT(tF^5oOx1uH|k&eUWcuzj}eLLe(dm&(=EzT-^Va&)YZEFu$7zk_`!TY>} z39G_@O76+dtZrK1^y^VKzDVfCFOH#bSWl`Ghvtm1FUeEAMqgGn@`u4=d{Y>oTlM?V zn{z|i>#$krge?CsiG~AaU0B2ag}S|&xYPMmmUZO6bptxAzEC_Broh)CpZC#V>o@U| zjqJbYeXvc!7bx4IqW@Xu@ELtnufp!)2ODvlkv00qMJk^HDaN`>a@$1ylj#UQ!$1LS z(pAzaJA;OPs}V}A2j3;3xD;kBPZhO*(DdnSyEdZ4Z6K&aB@Ku=_{JT}OrIT{G~Fku zqsbcfm_E_rfpiTNThEbIgKLP31M|BI93_o_h8K8t*XF$+6uADzkrA@>ZSPlBS*VeF zdJIsj9R;i$PeZYK8n>NpUJ8$e)b3am}!qm9+2fg@D|fuIz3I1S?!&fd<|6=;m(8vw%dKaj}%tp{H0hqn~~3$k6JFwOH~~LVxHN z4yyKyxcj78G!8}+&%Yv{7?)Pxtdl*X-i8z^AamzgRGyW~f)ob%v==0|EikY-8lBq8 zbwMl`Do#Ij2c<__Z41<0AYRy!NvkOT3&hfdA$m6#MDWwr!T}-JKg%bx{jEZ%$QssA zl`Ce7yqV7)R0w}f=yS(s1E4L-rG` zJ9(Ee-sIZMn(LR2y{LeNU5aP2XA;znF0MlYc(TBK+X*tv?Fzdh)FFIc=9p9^hYXeq zt)<9EU~7IAQ|qNW*T3T^8md99XaPko=nP>B+d|AdrhHP>JCskQRo<2V*+UpB`%hpj zU0uwe83R#9^h_9oF~*%d!m{ry&Zot)(vg$4(Cv1BGAKv5;3B)F6l9;1(CwAe7C&;q zS%#`%*!k2tHw5+vR~c)OMHKYa^AN$Cv2szd_AvA?s zzuL}cWuqjT0PcsWE(rqVWjOh{mHy{L3A+nte1~CzhnB9ej!2)##4F(_{vopFs}d?P z8=W-;F9I|5edHQlZ1q7skNNfd9sZYW#*3UtPed)Y+CBIfQ3utLNvi1eKk^VIL?ysX zk;iX-nLB-dXg|~o-PczV{IW3KsuE&lLn(G;S%4Yc$l%v-&K=8$=GYg(8M2>hML!Sw zh-wMDNELOhNv`_l9YH0K;`+S*@{$2I9GqRI_)S91&h+c;p?(i7Y3XHl+hm?onI3sS zrX@c`A)}P1tQbDW8rG+UQ&>CmQMl2XT>@Xvq$DUJZtu-X4%0PsL~o zR9LqFp_=zNZY3LNU;mq^c(}vD94RASt;_4JvY0sqFSIePTT^0ob3Uu9jaP*!>ni+) z<~8>>5a3gdBB-snNx*$FqEHHan*id*1sfzULx$VW_c$qdr70-OloSYKM1S=H^lVJ& z_{Mtu2nfBvs3Dajsu(cv6l$~tp}5XKEq5~bC%LJ2r%~*Iy63jAvyT!t(S-%k%MT$b z-O&@;YF3ANa<5X~xo0CAYZ`z#S$P%ltL6Nz)SlGFxT!lXnKK~h3V zjA6UCf5*YgYTJ86wwvN#?QG7&L%G&b7eZ9RRYT>JoCT56DJJw;W<$-ASO_cxC{_K~ zGwrh3R%YwA`_SRko!wY7929{aEmmmyf|3Vi5F!{jq{6Dmb0MY>XJbPNVdapleq>{=mc`^g`&CeVj^Jb?%i`_*3rt=cb66OY4VVGXDu#$)b z*H?I8yX?%+gGUkHaRp%-NX6M`a=0K~LyEB713ACCF9Vt>4GvS^_GuDPM%IN{z+YT! z>8dOM3jh34(#jzW^$~GUC{Q2?-$l@?S;v|Y$9$ELn-_%R5yHv5Ke`qR7!!uwgq}-5 z8x@||bu-iCR$K)liK{T`fj|L$opDdK^q1%+NC(9NzO;uveUhufO*~=0(;~4# zD$a1whzWF^VoQV!?;J&w;MdwxZGONE(vdSe!oxXCKa=4EF`Z$Rv++-=OycG|nP=kq>xC{|j7KXbo^$U3!HYt&GB*4ZXs$*v{a2r#$ zjtSZUQLu^ww+_k6B%D#!1BWZ6EQgW`(x9h5=1JNYg*Kzj*N~--2Dia$(jd*NW5c+| z4WC9PQim!Jo|#3yG<|oYaYvuhBydI!f8Yxn8bKiYuze~qY3vZ);SZ%V9DbLYSb1m+ zfbJ--(z&c7#K1`lsVM$x4K(Xlo`AO-Z`a#gC8dX^Mpg;6Gbw<##(7i!jnN0!e#`wnj9YiM_w9%T=AF9Wnhy7f1->h zJfM4X%g&)!F-J&(<<_Lb;c@kLsDSZEbRU3?el@m&w%Ak?v(@34RE)ZcW%%}|N;sHA z0POv=roG~qH`V(I9SpA9Ia+w)sG_oILji|&a}ZN*;4H58VWcSk4H&TuFD z`utQFkedh8C*_wXdWMLsaKPj$)1l<(8v&WiH#@Oh@=Vy|`^2ILyq_J7V_X8%6#arb z?B1w67P|5TSLJPRgsJaAz&XgxMrLI>7~K5iy9ZIo$@f6#oJnlMv9JDUOF?&1C(34A zSi9suz*tq0*W)~s;+Ic$i29x5Qgkdb}`^Xu8r{RDN zLlZ0vi_X3L6iQ1D_mxECu{%XLU=?^!mw_=yOZ)}kX0u~y4wCfQ!hX46GnTN_w`2?_ zzV(cRdAM$p4obK z5J5GA3>2kA4F6vIqc_tNpX|efY@nFVctMtzu#HG=C&1@kx516eULDNS;@f#utFf-P zlr1iNq-UPX@#H%WU5Xg_9o2k~RYrPvRXD1xSgV>}TBRXSNEf$UB>>&SW;n?2_AOM# zEeAcxXP48HKf0!gjngXH1k}S(xzUGriY<8B4c|(Sa!lc*$%z0xe!V^CJ}+BuE%bJM z|2pK)n^AYLpv07!r^CNnlIN!4Z6U-skB`oNYIzQz4ioPG-7`PCZ7g=0KTs5)#4ehd zC5lmAd$e6l>)U1r6H!n)VL3<_V^kxhTyx|PH5%UVxG@-*c05cM4jPcwr~6a<#8^T8 zhc@~sfeJw4n}c*XgVNO}#Z4cUKt0ZH@wh2%h9m`KzBBVK4;QNmWny>l5SBQE^4jn< zG!J=JL-AIgu&y7Ak*xo)g%)SZk@Cie&G?F$gRS_htiMr>NY@EMB@WQDy!e1<;^3xW zORjv6r09j$jZ50>id8>~?n_V%PZJ$_Z!KC#oMgZ%FS)|=wd^>Y1U{oD3m5fffDG_1 ziFBC~k5}ulfvPayQB;wd$}-%3%OL09Wkhm>BO?)ZF?>DoC{GfhdtL82jUBVVgsRkC z<}4bTooVB^&z*C5_G=Dq23dhxQpH8PVQxvMpQWVBUCN&h7c$n)&UgE6*Q;CpVXygV z7!bW1Ko2XJf?90pp!l4ed8Ui;UoO0-|(b9zy6_s*@F0#rls* z;8U=Msi&lTa>2AP%eTcThID~u-?zGLzM+a^zl7isV+8dVWT>>%wy9A~Ie%UZT|v#x z;sSTadXy9)fDEAGE^&c8WkN>j*Wyb`%9Kl<<;vVt=N48asq*7zu!{V1Eg$MCVSyqf z>vD^ei6V3^E`XQcB-EJ&ICb!@iJmwnC_DJIauA(rGM)-qQ+(=uVaO|iz3;BpdRgy` zoAjvjI?{DRq(+;K*FuF*<5oBL;rniwzYP@*o0sojn&0p9MLu37glE|N>Qml6ViF}X z`!Gc6!3dlHjB6x}tkEo!+x$BXq_5hICf?g^mo27caJCs^%h{G9>0c&)wy%={33Z@S z!l5XO<$^P?$+3`&<4Sk>A+7(Q{&~>?oVL34)ltVE#;XASybi%Y32J|A*}!4zi0*&8 z*LK}p<@qYSRTS3)OQ3Xxx>*0i6Em%7$_6sJAY<$U#%drfKiMB38J&Pj;~1 zE1ceS(!GRo%`(pg=Lb`%Jaco>ELKE(tuhYz628yU=*DZen6xCVb{KM>!K`~ke$GC4 z&s@1CbDq<h}c-WRIwr?<;nE}d95KP29G@m11gF)uyHSBv?QB1=HI@SjaaC#7n6 zo7VM24G+#@UUJ6=toS0~h5dFdVN+X*bm~#3SF&-o&euBNu<#IZpFSZvYg@CZx|+QA zvagSHPtgpyzyI=Q5IT-Bl&bA@19ZNZ$Z zUEa_z)BqxXNt`!v9%gAVS~9w5r7N$)A(Fe+!1(}IZaBj*Mxjz+9dY>imPgH)A3=o0 zH@h$Clsk;5MwClS&RtYP7d&blwVfkvI+xm;PQU`GA{nCn6&m zL=Iwz^4B+`eaUwVPy2gX#~EnO3eC%y5{#YP0tgWxuPYd+i0p+J{7THveTGi-H&Y|p z=eTxy92)V;sj9fl%9YbOy;`-DENfh;gs7Tod~GqEoGlLxQ?5N@OQB+^Oiz3nzu2nt ziWNr|n1z}jWko^b5L^4>F;2paz6tl>C2`&&sXaL{#GfS?{P{ULph!uzRMN@u@$$}+ z0l}+Rd~w`BiG#B;z`$drI#u4L_ilI9iYAR>csC?5Z$QlniR{?w2q6%JxQnKPu#`4G zi&6G{4K7qyP%22qOMwkZN}eGjtnxJkK#Piz=n&|#M`z30nfrsBf_q?M`47a-Ot~VU z7_=}Jh?&^2&LCATztQt#hTfN@9+R87ry)q58V9~4HND+~zb2Da%RD)$5-teWDLFSxaO>7px7s(h_zY-qzM&&R&4D z$F74?U=K2WUVAHJ4EZ^w8ohRvhXg2=>Go)B5fV&8OaEEmDi%LXx9=rgE~RZCJ$F4X zXeB?ThYRi|T}ZfvxsMyTK;RZMa>Ljm%TO46I4G2v8vA6QunH*oKeBaBiH`Lvw)x7k z3~M9rE7m|>HC5JfY1yGI+fpQDIZ@jg7X8?ZWF#%A34twT)(j=)u-dZW;(@P`W*@+& ztw%#vJ8?y1z9qwg9h8qBnq~i?8a($R#hdgJ&iw;lA84pf>%klRI+h_x z#2mL>ZiO3^svYTd(#wIC z;$V?Ejp3on+FHyhL$KDp6ROG0=NGf`VWIr7wM+Y_Us-Q;TI&SrD9UMy&Ig%xQ!$H2 z;B=3uBc5t6ErSUwU0QC1^PIiC%##+wNCTOmv`nfZ>|A`f0En9p^yghxo7qDC<08bt zMRozy(QG9Mpc7SnN|jaJqRb>J7I825-2@?(Qe|&6?J)1pVx8tXio$K?{)LC?Az{c(epU>P1R{S^y&R=Jh7ze(SEjpTtLfu z*iGq2p0i$}SXGbao*UI{4i})tT|9TytOOZ7E$c@$soIUtd#t!Rk$8Kqnd@g@u%Xpw{lem2^NiQMRz^QUij{A8xlNn-<)8CO84 z#tXY;M%iltFDf%GeI=ym4csHAWeeZ=0RBL}MP|Q{$$eHQ>-%#L*mB%Jdj9|4!hRdB zVo11(fiYJ)(;GcYz)|IS}JE_53c~M}ZIloJ`&? zJza&(_6QO1#AH1StM+*Bg;q4bvG@c;5i4wc%cq8-o+Q{et4{h@QhXp%BG_!JvFm}5 zPl+(%dEUiS{I>lJLPL&wSu`#i!RFA=v$W8o7_y0IsO~0BO=^m~!eJ|1dRd5S*57aM zR)unTY*9=2=3^1bXeEOEln@Z|L)S`<6|?9)Ut%;FGn*`4LoumT^)n{+9N|cz#6|5n z=PaO5`*wrV$C-Yqi!E5}rb~B41HlWtF*Zi6!)|$NUJ=cVq9aLs=9FN8Lj6utXU#sX zeZPYF?^Y`q_5(n8dd`gwgCz+^Kup(hqua&FD<02fxyW{k*PIeh=XNV91D%JV7~NbRM8BA|{~x(0i}aygxxK z!4(>lHI0{2Z&R5qY5!`oo6G^q?QcECTvFOfSgD=;I0U4+4-k5iJOKks5X5ApPmP^D zFZuRZVb{taCPAX}ecNOmS-UoJL4WqQFv6UG6CL20AOGXe8zsh!DfA&-aI^}%B14IQ zNxd`+!7Igxv=0U2kSQd1RqqS2n%x!yi#V+1f;Q7GxJd|N4u)PWUb+g+%UgzPf+{M? zzi&>UU64Px8090;Pg1`=!)RvTK$APL`?A#Z|4okS($LO^8_tJ=u|z~O&d`gK867LJ z={7Zusn*|B*ui3E>Qe@fZ8))^ZN$g3+}vFxq8M|lS%tyGNxZxF?`PAX^Os{YX@WPF zbCe?>qU3egkvtwazr*Q4r;ZyS%9KKt0s| z=#6uliH|H{+Fawl2#yk?usf3Ge)--+ovZ<5gu)-nFr5G4buI-pQPmTa?dTBYjs111 z_+{;AU1~X=k6OqjRvEuQ2X`_(`M0x^2G=A(1g~y{ERV6C#w1n36OhO2=1RxiA%G?! zRgmDOP5e0us{({)p&oM*1Zy(IC3AK!j#W;NrqYt2&?r*C!G@+x3u^dKyL4?56h&1w z;`dx0cq{H^Erzx@_Lk~UFA`5`R4UG&fSGijRL?r@7fsK=lvJ{aK?<7Pq6S)d>z(At zQqjVu3@fg}6+sSqcE%Uzm1U<1liE^v{m_xR{Qxzlt5f}C$V39CzmI)AZU7c+E6GNR zgw$Iunm?5$%?Q+j?e6q?xOg&TKs2L!4fCMnXr0*v%}?YoxmUqOBE{n-I?HB8a`s{f}ve^u9*6MVb9=!#Yp=bwsmd+!adyHx=eqYpcWK=-`id zjW;PGQ&l8VT zoYDI{>CtV$2Grdll6hJu-O@Kwa{(BWQoG=7_IsJbVtzjY1Z*E@s3v_Z$hYS9BFBWz zf3oLy8KfyT#PD2<)JhS@DA>}Io1BRSmKxBv@LhCyNq^g_IrTu*Yy8ZtJvX7e%8~|A zxcd79nhX*%mfY_SxcRVeGol9iyl9Vm?Or4K87HetyZvFIbYdlVsW3v~V0^8pWSUSx zg|<7q(_ir674z@DJO&_k@t*SwSu7X;iqm7iDp+WvP&>Qsz5lzq54Sl0pS#~n41*-` z{g=Z>OL!~A?01pw=6L8etFxX4w$3+3i6HeYewR`<_!4MBn@0`c0a++0sejDB!t~mo z%g`%0s%s2eb;gTrV&!IoA!3K5+*pPk)_a*nPF zUHdg$o?2ENpBzq~P6VK4`(%lR{8%~DYsuJp6Gtpu2?*0=-@9ea@Kqxo1Y~wz)Y@R? zaO1gFl6Y2Ua*f~x6#kR(!nreLNMn{clkhNj@|0?t4!V5rAPweWE6KooL0kdsI>I=T zc#@nOdWK?HGAhj<%^VDi)( z^u?pK7l!H?_Z3J5Os;!@#xRcK#-KEokSY^)UfGiC8~FU3_Iz!wcF$EXhLb`W3@6y7iQZM| zsxNBOWC=&`ccbz-PoDD0_V0#c4K94RYW2kVP=AGKlTBUM;8RwJME3A)pmy54wB|+R3l*dg`sK(# z|Ec2Eb$3@J@8oXXsv*i^o-6(3m`3vp?Aw?tkk2&BmAp~9mNA)cRRLc#N28UGG(5eg16X82)k%5#Y z0HzxDz-l#_(n=L=3Fy!$ZU-Wfimx$g_WvHpJ+A~Q6CI$%<=C;>inrCK&fkLc%c*Ls z@ES%Vqpd)Kd+CVqQg6s7&rzuR`OpsO*DHO8xS2!}72IfSsM@H+M<3-E5B@=#R8sTp zd68C#J}Ul|@U;&zW5AY&3~m9h*EIYJwdOKgeYSD7(&ex(9%;42sKk%!pv!EsdnPsI zy0k*Mnt``&z5x=-KlBBcme6|Y9>a*(OH*iur*q@~cw|;h7HT9l6EJPCuo_ZdxWcm! zhFh;gk~6P+%&GAlR5Yn?xIt*&4SS&Xy^_(u!@*l)nJ4nkP>&*84mlHY5(-yQ4GOu0}R4ywSn*m({Y`&snzWA}n5#})p-(u^rJPE^Y`Bhfv z4O&3s={5n0vCvbB>uxkA0GSC9se4^qa1wjODe|s-EM;SK8~2ex#C{EGnw(z`_^;y0 zJF!})7rq!qFhKsvCgwi;(=GC@Rk|qNG$cj4Xg4PulhgOu#+c0z`40A>F#%FR-0A@u zG9jsg22b`IskEPh*|SA2;z6iqtbP?K0>KR|7w8Okxsyi<+~U9tRG_@33yExns~T0l zj*lnsT1aX?uP4=OjxK&{aM50I{?(H$a0gDBpM8aTWk)j!t80pe3~7+)Q3gdopiNaM zywHLHs&SZZmcHmCNJ|JD?|x#z+x0}YI(=+zC-qm{&=wF|x)94`Q6Oawjd~7ZhjC=k zl{qci>X=&Yn~>MsG)8`TrU1Cc6$X^S1+3#OgU)Q}8&l{wcV51+e-1Cm;ItYW0>-0GFgQ2QF zrb1=9t%>CZ=r5OMV@TQTZAk(86?h2_HsDpT1vnHBDLRS%+Sm_u1T?d#b#i1|Leb*H z*$kW3fal4zk? zTX-)hDlVzWtGi|Q5$R>Gf;=6WTzQzJjBPi8gfxTGJ{p-4hR-PoT3VC z3bS0S;iTt3doz90%!tSe}(L{53XZ<$&vzqZ&b5pTcJ@C7334?AiVrdwnQBy8hG6TcZ^6>QCma7~9JQN-d?nD{UFdpo;sTaB{rn`S zyB1n-Eg=9=*D}ufc#LZS6b?a{ktAWEs4GN}jH|A$5Dz&=*SZLO!qOey8VZ5?zN>6J zR;6+9TT@Mp6A+I9`w7W(TIxnpR&zUCRfs9n$OZ;f*+1z=@VU$}Q?$UCVK7)}F@H=} zp`0Nn9^bY(Om4*9f#qdrB`7<yAXMmNsU1clpPxX5k|$+ypFJ zJkm>ViL)-Ve$A7sPgAt6OHfQ3b$7p}qQwDAppgq&7ApuRBO5MJ3c)Z{w=Ko~+^b?m zhHq_|y{B1OxKjpac*W^kW=4FFb$n&pd8?Vf`Lr#FSl!e!$#($acR*|y~!qy6|G{n&=ewj?tZ;`f13 zhjtb(O_E>wJS_37+JXuvGZ4NHA#b8TbvG4*e!3D1Q>GtO^eQ}EDxI!-A%A~r8&bY? zGVZ265-4$PE{};JiyTM|GauVg*pvq9YW4J22cLe-tMHdHw1cIr5Jt1-o;7jW2G%i_5<*53zy-2>c!}cW^gpH zsf4Qa7T%kPEixR?*B$XZBb%t{{}v@(C{pathQZjW?srk!|Fge@9~#M1M@j z04r|3lNq?{vN`RKLKjg>#WXtNyl!;2p+xQqn@UL0jK~@`yZ)(s!mSL$>sCoFb;}JI zTbqF(5Zp-YdI=ED6sXCLXkpcHv5JPjJ~fNtCG{s z3?vA-W?0iQ_0h+9^htGD3pvK=X5t(r&@beUE}Fo>fqi#9&^>iU+6-w!AFHwRK9;;y z2=6+aJ#L>g^C7oj&4h42nu|3MtOwNEw?oJz^w3fSK{&}_oWh&Mhcd8~fIblM-@Xn6!3Fq5 zJMtUGLjvYCON#yz$Xvlj#ZAx3U zK~LrG>_EwvVfl965jdHpjn?%F79?vL-j;_Q4pp0cr`!PWB0s1j8XdhroPICtvkzD{ zKLQjutLa^w)Ba0Pb6DIuDggH^`Ey$<3A0y1o%{Q#2a0aSEzhBPfwgw=zoE)UVBPVd zM>)E~6masuNk2OZ*}Gv>SQ7RM`vDg??@ke}?k3~Arq{TbfElrenXAuW6X_8<2Bn{T zh!Mxy2(|tQku&)!S(~`zyJtSU%wS*(+MTnPZ6h~-%N7)UqO)ytWsKfHOBR4F$p;5M z1hQL;mW)bFhe`SaO9Jw2(!O%;-mHl(s|ykQ510*RzqcV<7f*x`Odx?A_CHHVEeGJi z#U+eVi!pAA5Vmo=dB%qE@3uXO(X{D~Hxd$EvP=>aIUq58bWr<#o=9I-x=`dr6P$nY z>VE4f;U2sK~EDf88Oa2bfg#z;N5cC!Lq29OjCGBpF7s z@c4gPrTZ<60|E`G3TV=HEmFgfetp>g2>{e#-Y+;Y7f81zx1M}+Q7CSrGC7@B;R{oQ zk$M#w8kTft%Haj){uOkUrp=k!f%0Bw8+PZA(1U|$sJS5SAuYcSjfB;1&Ly7|Fjm2A zQJyqo`%I&+_^#`W|H9j3m=v(^2zh1rWnhW{B9`86bW35ud;#jG8&L!@lik|mGsWAv za=agwkeWwV`a%=euy+E06a#LXSxhN9(omYI-nWmo7Ho4 za8t%0n1IH9WUpayGmeI1AYoxXflfd;R=35wj*93M4z#|haRhwPN=cwqWDDJ+6 zSWz3WPDQ$-Eu0(ciGz+C({N>k6Q~@M>-U@a6t?zP;gqE$)ab*w6DRm0h?-N0dKy^< z_i-kqR>>o_=ydFh+>cV`0#?`rC;#=tKQ|ds7`42J134}ox28pN z30VViSv|r98@)k!OI#`y2MUZHG9yq&!~uR>e-tjglLA!HsL{*R`L>}ad-Q0*ZA)pl zd)R=sy5t4MZFy{#Xs{Qh0IKyc@>g`WGM^^sWZ$gHDTW*_OPZ28^zkJjy@>4o^Q1gT zcC`rZ<}S8H;^ZjIC-QpW#TvIxby4xmX!q|+Z90>PD^MUiwu!MasW?pDN2&1D3{+ci zR8sq!Q6wwWvW?J8^z~Ou;&YkS#aoL*{s=@jqD~=Mu%VNYrm&KoV6V5l&L!8WmzQFPKley?&=zbuvVRRDUs^ z9Kc#m^5ko1524=g6C5UH%RZ35X|*lz`Tjk8{KPgfu*XmJA*%8ccm2#C#U|rNQ@LR! z+m6UWcTaJ_3%paSd$UM)zE__?L(T`+y;}_|W;1!3s?`)l8?RSB4y6YXa*M`LI1`nZ z>vc&w?b#J*?&rrUI@)$qVd%F$Ob4Hr;-)hB?KA(R0_aAG9Pz5>Iv?*< zU~{l2?jYDZSX1m+j@*b)dcT$1OMNdQL}M# z108=TeN}DF-MrMXY`?(xLhtVlN#Z?<0e| zWs4{Qz}sAwb%hz?34H_QAX(2C#^*D!-io(mMbe;a*&ROcS88wR_-aaJk2j0^akOVOqy zJF`kv4-@5(-h(DW{wSZA%gUB9$ecUP?n;bFyUHVn)%8J_ddM8l`HeF`FoFPL!B8sq zjEEQ#%44>A)vhU*$Lh9C9;O-&s0 z5#ytphUBV;ikp{kf1S`&LeRPbBJuMR9tgPuhd7v0?A=Y7YibBTd6aE0HFUOxiDuGu z!^Efzj~g}2-SB>`VxdI(A`enSfeoKQej7aJw>x22R(>YVn-`-s)tCc&~fnpu7Rl!FDX5G#H=K z>ft0Ga8Z^J_a0#jqgJc z>uM_O<+aJqBgc=;qX~6c;*`Po_M){W59udcm3;^+1L>$NsViu(vD3DS0RO88LsIoQg58+>g`G<8 zbk>hWonbq;dvRpGRBG0C0#5r@ojMd;NZ@0qip-2$6vNyfz!*nT72iar?$v4(X^V<1 zmRzhhIrh7a!90yi>LX!Z8EP^b+{1Ht7^3_JJAEAZD9*I0ocYRi!s*qPYUHjAlD$qOCb6Z zi;`_C6ip|2>_L})7W0>SSd0oZUW=X`rcMDnfYf_i!>p%XlU)>Z=i!O z_zVGLkBs=!pSFzWmW1hyV>wY8k1Yhkvr!12G`c;voGoXj=!a#SshrNTtJUL1rLe@z z*>eFyclbU7Z5eSNBhjydMMxxmj{+OfJl371!?0|=yT@w{o0lvfEhIW+b50jF`#Gkr zh7d$41lOLVZu?MWcQ}hAM#x}*SSG~{JFtmq(WmELaGBX{C)&$uDNq>dzs)5iCC_eo z8XMawIx?J$B*IlWfT9MwTyLDK*_O2>d^E?6uPcY1?G`hYh~PrFM|SS5Og9`ar=w)} z6t_idKC0(Ly6NzK(FrOC2pOVl3H8Ad!p-VXGus4-bj43mfoTMoa#z^qGs*?{lY`Ei z6h()bOB8YC_f2u=(^1o6GxSp~j>8VFAY_{%)cOZGHi@O09Duzp4DGbq6v6=`Xr|vqJ@o7 zn!|2H0W5Tgf`=UnR|z(?e(%|Qq~Gd?^V{A;}BW_zFW^N=1PU2ONW7&f3=%MX3-{uEFjzp4rugCCz*L6s#e?7zcsgCx8oz z2_YOao)~^k99eInL_LnFgULKA2M0v)kGZq(i59F|T00XQ@-Bw7HWNtO9~EWfEUSYP z53ScoczL7snbkENXRDvRHtXMy8qKRk3~%w>3g6efw#FHdRZl0gqv*2@y&+j3rMc6|c zolp{9z^?{3jd7SLiy#~--#ir1o~%c3U2ES9!#(4=@20Z|sR>Se(&FIEP0>VA;6u?? zmod(o_AUSP3_Q%b?0`z)zCfo5V7M|GG?NXd73m5v1I5ms!`KX$5eXJ!-wrvm_$=GN zzgW>72%xyOyiLu4b@HC0G;&gQ;0!vdW=iP^1y!cL|M?;?mk2Miak;E@aB)Z~SY!u3 z#6eb7pE${>db;=%g1QZ$h{1{;{yCS!yur($S24+b#W%Z;Emo#iIFfD@)W>OgDnMEo zdYX<>TO=ReM51w#DePVk5a`lvw(T_nLv&Iiv4Nq06};Wh@echAhczIYB~R?4Xjlv> zJUA>c|EndCOmsW*s?EQ!r%7V%6O!>>-Dt*k)Z$g40f#fPS5iG`(#9Nb&5fxrnh!Lj zl+Y9x8#6?gS1S!(+E<(>W3O7E-s)R$>x z1~HhUAbvvvez#?GSJ7ZNjy%4mWrVBf4w!%+;2tj+zeH?RjE%a{(=xUB6q1rTr9ZX* z@AW(gLb8Af)#(^Y?7~9(PW+#dBhP0kXa9J_+8F>9n+eh(0kKbcX_+qA7c$jHzx}^$ zFr3ovKeMe1Y8^8o?_>xCbOv0{3W5N3L*r6jk*-@74=A{QpunPP?EPqf^x1by{2jDG z;q0L6vIv|0C8+q!y2h4_p*p(1URaBEU@Lv={Z*C{GrCe9MCO$qsqyB@7S_ZGBlym* zde=hF`ovA&7k0`Wc396RFj%Qx;AaiaLwgX9 z+;Mt(58iUs3eG+0Jhn5bJr?=MR>~`{UHf}1PwY3}3)K`RqM!dYUh{-5ui1)?3;PrT zM_vgNezn@lQ?2k3K08ED;@-_$oy0OpmSl0teTd#lgm%51ajTnMU^69`Vjr zGE*WGB`8i?jWq{%u7a<31LVPs@W=>~fZv{SF!u*9zR2}puN z{!AuBgA~eQ%pkmX?-ZH=PwtG@owloo3JOX7RTfZ$T{NY(88UY;@;&kx1%mk@CjM-E z>@9bjUaV39ZO=lIMzm$w5yh^SWr?>;Hf-uE*NW6A8xn(808~Y%iE{p0ehtm{XcRR=}XIGrs^8rh%tX!1#% z8-(Pz2!21}@Q0ou9(6yy>gjXZpBP}R5U&3BWQ(`wdXkAtT}6+QZ9F4TW*6wM;DepH zn`?&}E z*#uaCa5Ad)vGk~GW|C{@KZMv`c6-DX3lO;mLk&60r^xi)qwn(xF;xI4KrLX=uxP(b zn{#NhzJRE*8&6`vNt4QdD|w*%mgwc=^=tY89FLR0JsTuUkED}5UraN|xC zlm&ow1&tBSqT%!x zp?`tkgb5n7H-ppgz{%Za!fBELV=*v?On+<4_&IY*A-hN*()0|-qBh9E3`sakdWK0% z!=y#*_BWj!FMJ~(+mDsrc2YkMvFC@I^JR>c5KTY7B8dITZdn{?%|bQ=dtb5nxu7#t z-OnJ9qvKM8Uu2|!J{vZ;2>cB3KsOZBXt9dpVfypO*e!$hfV-V38|7VQEuYfAo@}tl zEmvkQm-S1Om|ikChG@-)(Yxyv`gp)<+~+gH7lhvvwp!$3fho?H&sC2q|0$+eC{mM7 z$CtVWP}PL`Qy#ZGml(h%WpK^vp6X@e__L;utXuKnB=Wi}4rDeM6RTSJo&#iLbsiO@ zU|H~mAoL9El`U4Csk}_=HPW4VHA7xoAm&dQ{hdAl8abT{RFn9~Gs%==#=Q5#$L`>8 z$|JA!eCbhx3wdGP8%msUo|;ZoIvAQ5`r>wq5S}dw3BfP9el{gN!YQ)?s|r{$Yz2w0XipEK%ZBwZeH$ zq*`a0DCz3bQ`K0sEhkQ9V7_8Mb^=hTt>hc$e_nBf{krA z+{Hc$bQL!;px->WDI|I}N5n}!W_s;2oVy{7jx_?R8wAvnnS!uKc5K-mC;Ve=FpBOI z_6wmZ3Bt_ambJPOEI$Q$XeOXrp#vem&iz75|p6;b`@Wvss&ctkOkgs(C zR1S&mT!_JA&%5Ru5T)sq5h7){QpwtZJd6d3%?r|uPh+5bzg6C_d&(J1R%~t&Y99xa z7h7Ww1qxSQruntVq%&WZmms!Ve)#jdy#f1ZoLO+gXr*Sy(<3OkZ8dLPaXf*$up&TD zMj!YR;SoBQYJQ<;CeG?diV9iK{r;IMact(eerzQR zy^+-B_FTSAGMugy9vbK*#GRmb6<u7q}F zoQ;Lqbbij&ZG^{wMHNvGAsD_s(lQuO?XIgjPn~#-SNru)TPB6x(v1nXAc)Mq$`}U8 z`5u3bB1AecO$!L=Y}%*&71$9ck+F!9@h9|B-V7e76>VNdj&KAB7kJapyal-!Yq(Uh zbbinWqo@Ni)s21*y4DMV_q$(9_9r7#F%~%~hUfcAXf!zM4^a?TJ!d9auSCNML?M-a zk$THL(h5tY3>BHepi@q-s?vRfA8U@AujBb+(}kBfj>0a$>O(%zn+*GkGfcOV61eF3 z4l8=&B2SyFaPNq@dLed#{tfa&lS5mf0wOe5e*CWx*X${-kzh+nB4f)TQG0xNM(c~h z6&+_H3=%7WRiQGM;KqA%OprfhFVol?w3(PMSy&&BDG|~aSI4p=NgP+)>|&x~fzZ~3 z*kX=ul!Tax%YSq%6s39akD6lVL^Y}>IeBpx)Xikj?^XwO^_JcWOpC;_WBCuAm*_acw!xG z(_uni&^k)XJ#;@+38LOKnYpQ+uo&J!kTmfl63=)ahYe!^pbF27dlU(h43PO@QyA^V z5v25*D1eX6Ubt>)Q1Mu>Tg-J+t^VfWv3zTg>##pIr@n#@{Dsqv+`M9e4aJmxrK-vM zSSpJrwGJe1B9?>Kh)KL1Gz5T`$gr)Gdl*&$OEgnyNd^ITgHmdo z5$d?3L)^~};|5+vtlU3WQg&5?^hj8NC^D-q5fPFXH}ZjO|EEQ)p@R)$M))%h zSKG~Mm8{T5>#PSsB>9*_-5A9eVkk9(IoOWFLzRS|i->V;Nkx*9B zWm~eFTgVW#LIj4t^mQKPhmR-Wos68Xe}ZBn5K0jA&;hXcc49k4e9DN?%0 zpZXlNl@fS%fYI3O$=q3o@?XHvLO+nmNW@)UEKV1Lop^en)Kjq2fpT@{5t~%Ez&Y}I zK9b!Q-@kDUg4qjGy?}t&9^-*OzFrzN3j=txrSWvD3*O#7@GO|YJk*!NRw89HG4QHZ z0^3E@=eap4qn@FY=*Ly`hTFsn7w@CMxd3>2k0)MFpX%hMCs<5WF0`(P%|wBn@o2MV zi!nq6&GtcpJ)!_c|2+S0;Pv%QKHeaUaNtX^N(toVgLA!ltGcTHR zsZNrkKhz_zlS%T!&GxFw-PDS*S$dI?c{V0(y-cmoI_e%E!}nT7jD|oyoL8t}TxRam z@V2odKkPpi;cAYs|B>OG_`YiM&bfc;Pq@xnL-K@}XYy_Es8goL2m}x0W2?avV&y*l z9iw5H<8_Hd%R^1;CD_N`@JBVS`t za4&WP3DdH3yHq8E(jj_rWL%P90_=#EkgwY~&xyjw;skv5r;Ykd89@_)L$WjdX1z36 zLROTI6L=kn$6|y`ZfN@@7|#{|3rUl+NW?z5WC)L|*U-3`pYF8nUtCUWb_%iPO`WHg z=P%-$G}cN~q1O;s2&pweYQ1Ss}^~$aWG0p5nycQb_$E zsFfYqPkuMGI;F5bYKt(zDF?=YqwMm;w})@yyrDXRi!W*kBL0<#o!Mnbal7&zEcLY3 zP81i{N%rp1F(Xx@l=*Ll9M%~D%k}f4FL!_XFnBZUubf4_z2(|h@tgm;Pw4wzrWNyE}2D#sZ`XvP#pV^3Uoxv+$B;(-ZI9eO;v z0p4NCOrfS#&P&vaj9JR_jWnz4a_FiZVVz9)=iEzNf76L)m&oxA26jC=9v$hkn%wTo zAJQ#79o`=%H}ttO*-T$}mNp-!zx*@HIhr_3;%McGVrrFW_%?gqm2;NhdAV!!3(JM8 zfuT#R!WvWUKG8{sL53~VY0=E=5v~8H1aYEexVIXt%pcdsJapzCw)TJ)r0;A>MlGhv z0f%n6VL|@0`!II9P0OK7_y`GAqa1*jJc%5o1ymw+qzwOqj_v;`nu1Oy2C1oa3EP>8 z!}D67ZZ)^Hwtmicgdi#jfbt-`L^GwG5SuNhL|jO}+)(PSy`lMlnP*x58K&a7#2ysz z$>=JpaV*0;F0Kd{d{?z%kS;V*XLV$q)RC7%h1Pt6L=`&q$<|Xp(Bk3;5Oi&k5!WSW z21SPgOXu-6l7$lGZlCn%aGR%)$VWIVb3<<@*bf%uKJ3?C>rwtCWyHOI=tXK+WMHnG1<_=&|24AjMOy zLc8K5FGA#IW9q}hY+`(*ln?g-X*BP#E)mA!wCVWxSE!R~<}m!2k@t(`gS8n#OycfJ z^RzmLAHXh=$ofnN^b^7hTps1VVJZ^XE^}9jUcVD=7^% z)*bmKQZ$XLl4lxW;0tEg-Y`8*Vqg#(Fs0vshUv&m8}odj7J6wexJtHUPWkXT9-LP- z5dcnM)o|X?C@-<5qEl1)*A0Q$gm2<_Wrkk#b=un$P)z-XI4VlB+v{BKJRP!sfCIv9m+-}sb!w2B=|c}Z*RM*qN6Aa5F{Lj=zmO&XQfp7r2nO2PJTsrVibf|PIM zW@Ij8MJ$MJ-On|3C6_b@LOF4hN48P;>AhY4x@G$Ao`+ZLk7!3;Ed~fu-DA+Nm(eLwP)hkpt2)U}SipR8DZ+&WMI++;Vl9k9Ne&R3KnHw4h;4QIQXnGz_BO zmY=8j_Vih1pI@dRUlP0&PhEi`Yo?)KXmZ2ESzoMJ@2?$hKmGVby)k3n*z%If4M3r_XP-Hi(vdYyvDa)wjLOPAMA@32oJb#T zMq=C1r>GVH@-Vbemu}#&PhcvD5copvhbZQz41bR^b|Q6+_^nOVGD1@sz)#8H{M9X% zV+(UGcQ@2o4PR%M!&7yQ*L5ZO(b72G_6|INfUlm)Rd&_NLS~0i1f^?hgXXghbZ6JZMNy5 z?J5g;Le2bJ>C^w z_3)1Q0)=hFW{^@%WaAnpcaI|wOp}Cg?dLY-iBj1}8x)a4n#Ac3hP=2ynyTa&Gbej+ z>EN9}$bq-+sdWjnCuN?__Nac}C!&I9Eg898Ye!H|)Ib7r;>K@BVonE?BEtE@KE?n? zN*B>Us3`eVUPD^b3{&^=Mo9f3N|Tsw5HYS9Xkh}?(AWNd98pn|dyTJm8rbBiDvof} zk?-r~BP^9CP8z!~EjrFuU)kstHD5DbhW9Ou9zO6P@2@~bta^^gc$Qmk>YZ9^}{J|#qkl=t;WwG;#Jxvj4-$Xu| zfDYt244Rpf*f3~;eqm73ZTz+?Hov@=) zSKkOIqUh>mHGdRzX3Itm%k2_e&L98)KY*v=8MW!nK62td{u@y(kI%egnX*IYZcItN zcF><|EB9h@KNkBjk5UVfpw+l$GNi=IX@#tLFvnH?;~>>H8u3HLP3i2c*~N&gY^~JsZRnB{66^uE_wDw zHo0`auM5MhjCVRFm`|+^1gCf=?K9ex*TT9~OmC<;g5)CngS$n;8v=lnw!xluwu)pe zp%*Dc<;wH*MGleUq)srlYEY``BSnzYwUvpO*80*OCl?KN4)ydC@`WOm5;^JqT&PfmMr+AL`n$V?2y zBy@^)o-f|PvI=QiGF3UgW%HA1k`O#Q`&|gnMj4a?e#wovFkly8nbKD6XCT3lRHn4f zOJV6(!;6E8qKdWZNYwr$uA zia#cek|Q3PCwvZIZZqh2goZHN_Y;;X&N!*;gfFDb1^;M+>DH6?C)=$M22L6XoZt!} zZ?Of+cEU;e!3t_47GmPPG(zxCPwK(6T9s6doRL`x(*P4s*o-C`8!3!{BCjRSO55hH z1V)Q?_E4)3jFYfVK^L9Rn(9@2C_b%Uag^po<&0<{c|eth#PK&Rf#4K`AD#FM?g$K6z?K5Jq{F` z$!|=D7%RYZCMY6(V?{hpQl#tJ$re!J$&LuO8Q&E5Ho0k2 zuEvlXN`8c9vpMRsXOt}QA~EkF^_ZylUSr;sl5L|gac^_p)E{D!EaO@se}AIc&QQ(8h513wo^ij14rd10#yTyQ?(IELss zpelnzGVz@+^d9wDI(y!pQ;bs8p8pXa+jG5+s490o+AZk zxGg^<&V)&cW4qNuS?`h*%V04YLF-2lbub8)tzcgsxHWQ@aOf4q8OxkHxPX=5Bij$8 zqP?(nqhC#6q=OF8(Ey~dckq#A5v{qX%}Ct54Oi03V96lfvKo0EF8Gi>#CXCQQ63HW z*#t`*BbhrZ81jRbj;!cu+pwEqMC@gsht$F2&!?;f0D?(s!lr=KR4{dU*Dlo#0IYz-d$R$>M5SZ=Ma6yY9*>} zX}n9dURd9_?80YUU+8ayYR2d?GsfejK?po^Cr918eP}~%O-r)K8)L?k&C8DmS&tiz zuuB+1I|o#p2d93AXIan7oeUMm^8ud(lrvKmW?yL;1vM=69Q2G{y~Gd*c)SQzoNhsx zv_H3e!6((L^G2zCT%uI|RhL)R;&NO@hH|>C8Z2Ll4}4k2rC*6jG!Ab(>u7RcBTOAb zB%?5540y)q6Azbjg59t^5S;9K^iIHo+L&#guF(CqXWDlICvN;TWrX~|9LoaPAlbmGX<3Ma4`Ll4 zG*KaPe1tGMCn=B>*4y$2oGZsl7P99YLUE|vNp{3=Droo*WFyz!8{`G!=vEHB@y`Hd zO!upF4{8|kBuOb599OeD*gnLF5W=JP3mF1{6naf_Yjrr1Elyo)z{K;R$)6|~Q z%;%PgJ{5O z;;h+?M@&AKT&iOkbK*7dEVp(HQBUFPL$j^X*ZCM3J@z0ofw?D0PZF}G1r4UZ8L{}6 zk!-7KxAX&pYb#MHwlzoH-1zx#z~w^UIA=5uQ|b2?`$SA!iz@Cn7WfQ*E(Dk{y~1Sa zgUDY&xd401K#@qOwEdS6& zQUBxBj%RTqY>5&B(;`*Q7nz+j_uK@F5KE_BiUxmHjYAEWq)#GFUMHOOfxKTJmQERe z8mL%d^1|);^lF^x_7saUSy@U4vQT9{je~Q5^2{$@@z#6!Ko`?fYo{aRA776-bJ3)i?-kdCspX@&C1FlqDhjygQVZL%-j4QE%*~ ze1Uxxwc>(nwH8=8Z9fWKOx&!jJ*8>bIzbe6<3D7j;`{3DI=6ABhm$o(vG-u&F1r$6HkJF0fFsD z41XNhc~0D;t8O0ClnpP)7o0b&W%X~}5U1SJGCR{o4|%7ynv3q+RD33C6Psy4xwf^@ zu}{LbVZ|`Vt9xipG`9NVM^Tq#3*v0QNq$NePq)@P zm?D&LDlUM^3kPeC{4p?n)-e+oQrC_^Rt8?U zEUvEV$yn`~?P}P}J}C!WC|2(?T61!ujx-@jvkE$GVd{u=bfTTTozugZPfKaQ%rcJT z6K&Dv89ssFw%R=Z5Q@`dTG4G#GAB=Sf^a=UZm4(5nt7 zho}Al!i?wqr z{{1B6o;=~s4iZ>iUi_DdRQ8SL6FyjUsoCTBW>()ZLX8BS;z_jbMsLy5WyxzGpf!*`+(%qt^l3Of>h}YWE2#ymq_f2QN zRGQAgBbdrg|1+h}rpwIyfCcq~CFIv52&QGf2{BE-Ol7p-&Z;LEY-!wd*H9mzb9s6( zFC?T)mfX}#yv<8&oJR8?yGs{zCgC9>0wh<7$+~z>Wn--n(@|WA5<+!at6KA_32VtT zF!ZbxC5cs`ngA9V@VMcw`%pv|J;&vkOwM8Eey&Y#p}^%;(mp#dl&v*Wocpg>%`+wv z`-$s6moGN@(diN^_kf56cTKq{S*0HHAFzU&FgZU~rDBlntmb*+9)h6#p%f8GQ>8^QoZ57klfrkV4_Hw4TyuR(&dOwA@LD)R}5r?@aB z?ypqud_3?9gc0=hg@VBURq$_0NFw>$Ql>SI{e5u0ow%Q~T16~bON_X!bL7?Z2y&fx z)O6a3aBm|eJ+G@HLHz{AkDN9~T~rqN@S=!aNDvlafOz~Nul16ki9+vtX(zynlbnD> zm6U4(Q|p7p^AwzEU~BAXdZ;VR;#ph_8Tgj4Yo>k;RFC#4F|=lSbs(!ql5a@d=10Qe zpOv4$r}PHX>35elx#lywC;vBKs8DMZop%^9zIG)%szamc$E}hE7C2{MGWN!e5x#oF z5!mC(HiRI8lG*10Bvu=bQ!~;Q47yNfQ&w=ArB~^Z$}d;iPYaC6!i=yAVHC^+0UP2x zCSOT}UiFZU+!yK2f*UxZfzuc$X}U5?oIg`h3W;UPY+}8CB-NxB7t&9wBE;Plq%H91z&Kycq@JD6|@vAklppdj~9@z7R%9vdN z^O?qhggdP|GIXes$5zyNKvri8^Fpm1@&aKUQAD$n29OmpdSfhOL<^pXr5^2)6Qw^+ z_LBb4XuaIFF1rgRd9+?kQ zu(Ni?tx{@qi+e&rtyDGMlI+2u5aEODn7`C;!Qr4mZ@Bdu)lZ;pQ=fB!K@@|v)WtS` z(Btn42uv#}5h=(?!JVFW2$Kd|(6^SL<|L_3xZ9JM97-6!ec&s~a>1pgxzZR*6|UbR zTzu=MTa;XEX?Tjr+w`eDS{fNDR?t7bh*+$GaSSjiwaz*>)5Fb>iae29c1%6vF^68s z`Id>m+{3**y~NU4SHIS8>?qsGBxTEGM%J>(rg=2G7*3o^vp?5x2we>TE>O!6G}Q2K z5wD#<8~MQ7jyuufx+rJBpfB zs=z|>{wnwt^a_16ETW=8nP=bzJr1HXD_V*Epazp*(YpvU^{ub@UTH7HNKQ@vzWDY^ zfvU4#Yh3Eqv4Me7y3KIVWV^9+{d)H1T5D-}a!NDvccAFgY5zZpNfuRh{-tC>-9G4! z^N}mkh|BlwAyprMIcIg&ZlZs;_dfY5FY+Jz*VbK#(^9ygp*jNPvb`;dt>w;LUz?&} z&_SBE?wEK((Z5b$CzhM&i3>8T}hyt#_Fn z#9Q_NhI_@oNpTnsr#&VDR{2CV{!l+^U+1=T{4;{S$IA3d67!8TTh{&nk;$@_9e-xs zfL{D6PY;bUwy%=d-aqYj1SE10wruB)zJw(qOH6aG{t%ObJ#8BA5C8>D?2!bI<2TXy ziJCH-tmdvQ|2a6GRX}Y6Km#rCx7yd`W{0H=YLZL)6{?yL|MPq2DD1fIrtFNB;fXv* zBs}GX*-#04#q`y#4p-yfo@(5|uCR(UWP~h`&+7*5|Vf)=#2+zpe5N}(T|M#(s#NAwewiilLQBuRMzHMzVzQvRQ z13KMl%clP#WFjANcI;}Xuc=(2{LpOppiunT`>F7`Iv9oZ+qK%Pr16^1UD19MPY5^= z{py92HHp83LrX0RT(Gj%H+Qc%Vf~`Wu)l zECXxS>rm3aYK1JQ>aCh3EhnfgIs;+g{KKVj+Ku0*TR!TR zTutrmGWi(2=9`pq5yV0XUbHd?Ca>{T_i$i^ZD#@&%EZ>#$=T7wzy|iWWoKv!%SgaL z@ZX(>hhEsu*4f0?*@=MZ_ni{Gu%n&5ke$0W104gwe-|q!D;+Zv0S5~s9Ve46y{w6` zg~9(Pu3+H!n~Z>&^M8^lnK;?GI2xHa{m(qsc8<#S21X|TJt+TXX8zv^l^F?GS^jJC z@zIO@7V{fcQTYwC|4&#&BX#nJByeY*%_PA%b3`jIhzwOvN5so@%`U# z1m(HE$QM9e`tTCKiG639U>zbktzAV^*rA#VWyO0(*-sC}#7-aUUp+o-n~SfMx9S5q z!yR{7H#w3zVjNV+{C}8x#~@pqty{2cb64%MZDW^h+qUi6W!tuG+qP}n=zVn0iS9T0 zeD_Dk?SCs)MCP+HS7wg!%rWN7-iNz;`9VqksWPvNe)W%}agJzkI1bOnH~Lb$ZunlC z7OJHukjA%+jPHEp*&vN^5(akqI>=wFWMz(xF`8OeL$J=EV~sfT7yc5&56!40%ECic z9No7ihsiTanN^GudQ)0fj-Vp(UcI38W{A27NX;~YSR;E;n7UeUaq3-N=w+a z|F~M$4Urbs!+~nVY&!4}*Ik?1FWiW!@GI;oXE+~}#9p^!={k0iIFgG5hdm5siLzxQr49JwW(_xMAC@4Y+eFJU?3T#=~ z=4#>zbtUZz$ldU&R7vgmUHH-5Y0B~Q$D8EypSvm|(aX3$(zhnkw;D&@OW@<3P-`r& zlngoK!Ce%Z*29OAaGW<-TAsWHjQi9R%{*G5@e?|qW)W#pqIx^MkM;YbhQf47ayi1>|`tF_ekTl4eOTD_ifLHe1Am03?TVF5)p3-J^#h)2A*T}kmS zQB>@A`B|AQ_OHS3_*-(s;HP0+;j?$}8L0(*j{8Mg6aV<_mmsIzazT3Ht$H$FE(4lu z6?HXrP?&hsb+TRYLncy6`o7sMj)Zf<=9|-CLJ~2&0+v)#M%9Z7n|y%}Vt_ecs#a?u zLjaYMW(0?Hj^XW9xNo;cv!-H;&{UeEBdYgcyF1dcEy#nQAZcMn>8#tBDfRY6borXl z=od1y5@7}O%u~pr z1I(nPi?mCU$8A&{L|ywC#rH0VnkpKadGnGPX0*|$B;}UGi;=dN=y%Q`ko&QOoK{g z^_6RTL1+hWO(XWsr&HQSkcQ*-$?S+v745Sme0s(&fFczQ4tl;k@p7=d=9w9PN~9Cu zr|ez8*A11$yMbaZ*Fp*ppjjJA;`gfdU@#^nlynY+=JHC-z3IQT4`V%l$KZy%Mt~tX zhV472Flabcj~?ccZDp7Lh`#c#CDkN+xUsz=i#S~y8@yoLesDZRt?>}QOBoj^fp{wk z5_cy=0Mge*-E50R`UO$lw9c5J`uk zDIh#dbMrS#eXgvntEkBt$WNy?B)rhA3CyK7!7dI$(@6@hQ)}Nmfyvi;Jmn=8NGa$D z%@idPZGQO-SMr6=Xpd(8ECpP`7H0qo4`>h^yadP@`?%bwhq86?w#4MJp^ z`eJ*{6Gdo167qf8@`GF741Qs-uM_zxcoDoAcBmtvjxuDwk|QGT)%ni{9aXZ+xd+o{Ar z5aUCn5(mLZxKMTSpj+vy+i2myV=iU@u07RA)hnAUX;cB=et|>M0`YI&0AgUH>%mlK zI=F=OGOfBP%Fwmvqwb+pak8Kj1}h8#CJ5&o*j@~PZNO zt$}xQ_DNu4IN^~ElDT~HsVQKY*!T`>h^y*FuKHRM-Vn=F8$2|%e3*-|lS=JqopLji zwHu4hBW7saH(WRrqR;FdY~Ae(lo-i^neZ1-{5KT*zeDlg;qdMw;$M~=IsxtcKe=6hs=~m2& z4v+0`z5e+`kM|Gg7qeo(qyIbJ|M`*;kN)q!?7u?)-yZW{p`U?;j^W?XkDkQVD?1>{sBX5)dpx{0dH`dF)Z(^VL(3> zs+~%}swA;5*+_(Uq5VYSRhTJvnUv9JIuNy<`RkeyCX_inKAsr(E}9Zd21ZFDnozC2 zYZ;You8tF6{v{LQgao%FnPhy3Tq;`{jx=#s^#hwMnBRSnb-zKSRqU3F*`4x)-Y*^J z13D221}_T0<%1edQ${h8EgiBbp;_>^M50uQ?OyT-MJ>zVl^yaxD7!xtQl`aC~UaemQ?iL2D*`Jn(LRra^l~IS$ z>{6QZY%cEggpI&_hCcpne2GP8vP49#Voo5V*(v~wTzF1Yo=i;45>0n63MhgbXda?< zB*!yL5eq&RV;?H<&U{`dp`YJ4)z5`OyJ{|+ur>6%aD_95yN<`~J4lgl{gYbQrglUM1$rwkWzC_R^qKta=fuZYPwrKdxhu427AiCP+dc2rw*DUR=Wl5Y(Hxg>)OTC!%yc51ZdF& zQ^apWAwYB^E#7l<#8JJ}V+e5t1x-pxsO8IYFwfM3pZxB0JK%SZ?ZD5qI4W}ZTpDUm zt?Ztc&(cv@ERe}rUrZjL$nw*)j+&XPc`20$INjlns%W$5(B?RFw61muUK?BcWeO0) z*fnI?syoekm?ER)$Ed;<`Q{p#1Kt;i*G7TxprA~=xU_>?VZHVq80ZrSqHf+TQ31W3 z;cP5hwK2UQUdje^$@v~k^k7dg-fmSBg(M^4zo7BGLY6i%MX_lW#wV`*+7dCmhsZoC?d(c3U=<_rzxOp2Z|Ig8m{ zutOxk(@om+@{Y(QZPA7eVa8!m85K?%hJfnq}09<3EHS*n`r zrUpWYYC$0Q+y&Lo$7B~o5Uwd9c?pBzZ2Hph+5jQ=@4eN_imDtpf?V%qP~ZktZfb7A zeqF@$Ky9qcZ2^lT6DN)GHDDzo@~qsK=J*tELHC{OE{677GTBVXf-RqfSgl1y@9hps+O9styC5PR5U$^zR<1 zJY5Dxc+2>$?~ZbOu2AxWR5|yveFoaRmlPyXG(_5@G&DV*&-)El;her3h2sElml1O= z@JEGbh!3-Wo^Gkm;HL5B)9{-qMNuk^g6vdKkhKR@l}*^0#yBZGsTR_;VSbzfN*0(n zK?gR6NzX?k+SDW%wOwFrS0Lp*UkW6&5mPAHB7J2rkY=9}@fy_90l5zs0jKju2!V4{ z{P4g{B`^+rRmW)Uq;Fj^S`et=1381Jp;>ihZ-p z?|&K~D}sO{wtpIsCKyEjYWa4P`|+NxI?w_UBy~OiGma-D+WM`@h^x`M{Z_z+S4pniQA;@~(&jy{$7*s8%0mm#Wvrh`)+@s~ZK7j%Xx|-Cybb6ZFyUxu1C&dC z(3+iUa>BTF*JV>~g*#5Aypn_HkB}PtGZgVhM;Ubn38g~GavRn^`E13*PW)ujGgSK* zq`kUhSOukst1OuU+@P!i%17LTi|=KKTN4U%N4I@VF9|VQ`7f(E8ldtOfR9&XE#$HJiQ3t+>dP| ztQnyRfBtB$|7@)oYC9w>;om@;o7p!SP4XwvqN{poDHf>wmese0_Xto9;TpfpoMaWT z0|HAt&OBx8X!!^vOe%E(P+pB+C;`PHi%b=zfi~C%OYbx}E{>90TCuRxf}Tp?Ymmxy z^oyF;GPVFlbUI07^f{uy^rwUVY~SdvpMludt`^hEJq#h!d(Rj^fQ)#urBhfd)(rDl zfSnCpn>_QQNF0;yx~(t0{`E6}yY)EKdN=OW>58 z8)QwjnPuop5scDx(dOlR!(t;Wj7V2g(BE`smZzX`YMr^Ki3KL62WlnTd%X9wm{*t!WSJ zLNQuvKMaYc3k{AZ#am)WtxC(J_3Cl~gC<%$9=c$^32W6}j2?Q2{`)OstXg3G0eD1} z$OF~x=&G-IXhm_zt>UReZPd4FbPU^6lYOQFXCM95ty7+o4Rr782Rze}9da`8` zmYH$2A?JelzTg|NCxypERVtssg>a%ry!it8s4GD3a(JnEXIa~PD|&B{E$D3cOAtqJ z*6T3At=%ew$hNdm zJfzTEO>JIxDd2dwNl1TK1xnX6ONOe@)hp1@+6XPoqLQHD`q>^R_;YZm zcb3@MUh39w1M-~%(y;A%G-JexeXAVruI25TLG)zUXp|9&p6VXF@=LwA7C#JisE@cj zTiJmEn*HPVvj8Q=8brWrt@A=~#gsc#%~sgi>~PjL{TY!(D>(WrTEMUnVTF-g$eh2R z@_*y9|DA6#voh04<1zl5b4~Mp!pRtNiqSDS1yXpO%WpR5Brc#=>Hk5N2^HPO+>*OPu3tDX)pWI z52}0gjtSd58u<(S)Hq`aJ86n?zCpqYL(mql$AAa;_m(w}{S+``x4HOeDPaPjTP<6M z+RjaHPBqGTVXXZ@wW!tM#bdRd0d!0cGNw_3IRDBH|LZ< zA*8YizMOT0JSGY9jmJTb>1>J$A<)W)_pX^xBdXLfMgSb!`O_Rtb$P|GeSNO&QN}lO z%W=bE(?N?RANBgj$ew+k04B=`oZLa}!1S0s*W9!PBd2|6LOZms}j{@aZg9 z58}%-@cuc_G3}#P7qaQEk7d{~Mnrn;B&Lauta!-v9^ktr{lTR}0{~A4HPI@zpn`R& zx;@UF^P+S~ROm7l9Mg)}ie;6dN$ZZHBV!TRLyAbA(PP4FGo+s)!{Ru;WZ5~0ENGZ^ z3wb;auxWHy&Ri0Vvb~xXx@d%8L|)q{wy;?XR%Yvk_tFi%4!oDWEZUpMgFCw2jBnOob4B`8#eIc)w?~ib$k=cfnPPb6&Gsc-(WAn;~4@>bSzy(!||hBVJ0M zX_hn0im036-(|h;+DtUbV9E&@C`F~r=B~jNY;(m?p@H>@XlxvQTh~pmCaxcyOjbN@ zJytdsVoh-+=1T~4Of~*)c1m#pq?>5EXhSpG`ca=yPhfeUgNj{k5#^P!2b9z6ku?CG zQowMPN&LjSIw3d{f!j5Ui4U?=$9FvXLHNF5^{qvyo9G5qiQPiYS0m(J#E_9=Ap#X> zzkB>@U_*H`k@%`H()_(@uNvG-r8@QWi0fn~OGk1^dL+GiZA`&y*&gc=jvBJkaR)#uq1idM6U;=3dp& z$XjQp*hkc5R0sF{vWDL1#Dyqc#wlcqhD#F2cQqJxwq9)m)KV9}f#vepsNtjVbq&uR z4HW*|D{294KFmz9?P;EA)oi5;vkwWMh7Mr$eiXRw10*-m?}>G8{#^trqx(n`RwMrr zEZ3U)Ocls7$a$*b+6_Z=U_L1})b&DhOeEEAxebJM`sq7{5kX((4u;u>H9{Zpn$@Wu zLm;CFgwK5;srM)4=xK^zaUYIddEWWX@T|;eDXSfG$wWqHuKq)%O9f$8*&J=I#ayXx z(vc%xEseOfRQB58XL#j--pw42n|(o{WZMNfnvc7n-^1yJaV8%~7YNN0y8MqE*Bk5@ z7%e4b(-S#<2hFkC?HG8d0;C@Y&$v(h;2VlhR_Ga0ak3kP5sBsU@Kz0N85d6&$ko9e z0fw7fP379dCv3w%LQ$wTYTuUESRwbyP_B;oZw^E9UHwG}Vm5(Bv;gg2ENUM`;pVM( z2_p=8*Nlv&J&$szH~58?e6)P%El3{k*&vFJF-vn5xPK#F4&lJ|eV%!-zuK zKFqr~&%)d%31b=r*e*+x5iJDihyU+4sB}Px^`AVCtHmk(UQK$#P#s4bx}MC?(x~ z{tOOoT1Y|rBYa{?D5!jbqg|Eck3>snr_ihW#ka;O{G(|xvSQ)zpG5} zt0QU81{X}$D22WD1pHWJ=!h}Tw%(S2M8Iv+`V1!D?eW(UySWF$Jq5+Ofy%>Xj%#h4&hG0t$CgQcOs(9>C)sbc>q6$%`&IXG`(X{LG2vZ0^|Wk7GOz z0dQmh#+AHqqXgS-wAk@A70Ii^TT0vK@~BQ!Dx74h_BvC_%iYxTBc2u5$dig-RHYu{ z^`5Yq5EB|klB3oLP#&mKmR-e-;1P0kH|UpYWLP=b8GpNzD%~&d8Ln4bxJN)V=Omt7B;W|5aMO$7IlmK@3nrGdDVQ|1l#V?7<)xW>X zJ8w?|P)lzSgo-|S)>xo>k;FjdA}{?nK0M_gl>|n7og|xNTDS`LxqpXn0!4!xP8}lt zKJ++#GHc7UQwlUg=0)D<>fOm~ZaPr*9`oEG2lUPPQ%~6@)$#21R`&eNKq^YXVI5sx zb%=T1y7AP-)%4>)6P@hHMWY-`oa*b_ zXVXebt5kP?`HZtNiT7si455atAM+SN-49mgUyjM$nfglr&%C0An@F#x@liu;|~6(|IBB8gh@{trLkqOm1S)y1^HB&TSFl}& zG!`wc+iVBQa)HFeBXMFz#d^2K&3S#s&HY^w7LwzPsm(}3Fis11>`f5LKd?@Ad!!PIX_sVscIws$57UQE&hT{iur zW|{7xs&My~1(?!D7&A2`f?4am*m<#6*U$?43WOtf#b9zfyro)9wg6KISU0GJn>e$0 zViD7IBAc_9&Y-4Wf<4{*%*>wMVxUJ{b1a~q`EwA+lxb)QqVPBdGJ*U|Emi2IqW;v> zBe{lStpy{=fH{9~#1WTmzHLI#SWv;{PRKl0&;rHZ5x}%E%sc}feF$Y6;Cigr{tIHs z@^51KPr;J?-}I3v;;g8CrdLGfFB<+$L;WWs{b$4fkU8@s2Ishb{za?5MPL8fir>u9 zLDtA#z{bkf#`{88a|5)6i+r{)N&iYGh_&`bQaN`IqL( z$izr1t!HIKt4gcjr0@7QH%fO3RRqOl2%>b>f zP+n*!?MbXywtF9nRgA{DGJ?TPv`r^S$XDcHP%t%7VnRWyuN7<)pBB5;2WG;r^L50S z#;z>-yIyYj7$)G=S$w0Z0|PTRg3j`1#oWk2Au3XONp0^+(tRl2rtin`R5%rKo7-ai zVl2E19VJM3y&?A8jUJ5>>#LhxP!yrBHb|q|U5yB)IGZt3GlC zSZXPRs5H**^A!}nr4(FuFUlC*n2j*$!uH$YoiA2|#sKNc7-JJwzdc+Ro=sU;#BOEa z_lai1hq^Zs_IbnOGnPej9hI=uZ4p`^t{#hOAYe{O!l9M0SgnM_i}nStzt%)=X&Pjz zGthCWl3l;0GMf%9HcD-e(sXZ2(`X!a2)la*H*LqP=0;U~|JK6>K$1B)uLyqb!x-C1 z==CAM0XaE7Y6HNm?E_v#G5SZrU#x?_#oqtFS_e#Q|5^vk>`edTb-?}~%lGnr+*t-{ z)V2h5p|H>cu=;x^JA*$<_KoVtL4hDGcUM?gz51&9q1w2e8iasf0tM4VcvGinM=#AT z$-O$(sDETKrRXp95h%kW0&Y$#EH)b?T5ChG6TFpgnuuYA&L+bL_ z+G4CgRuTIM;2bVz0cWm}OtLl7fI%A4K6gMnvb_uE4%)~&1>PoXKS)-2e2?5KuV2K) z(Fo}xU`jIG1nPexVE1r&+O8r15GRg(a|0h(LNAu;OI;qF7I}O2Zr!kBYR3d!J~sfo zIEfXwFSq+S26+IflPW}a$$)A+pWEmWruSc`FNXs;UJ}1OS8ti?k+4{G`d5U#t%V6f zQrKSH%|F;J5W1@TjFh^DAX$Rb=?pjcX3nH%LAgh)`l=^*W%>;-w1+?<;Y&^>8{!H9 zNVJ0tl=1P)J@ zH^Ks+sn)#;fceq^5>cQ`#!oEtxoLd#5Kju0rZ7rP^bM${Di~Q%>dhANyFml1j1|?C zYU|L^1XL|fYfB+k5l2wdRUQmDvQ(+udA`l(X%IX70G}itV%iENKi}!`l*=r48XlWh zDTW(DhO=stwnbQmCH#GYpSevdI#?8(B=;%0+^_`hfSqI~0&wy)keHfLV;LmP9dN<@ zpjq?bL6RJTW2475`MbxO{$dOKU3B`N?SX&zXa0B2Li+!87Sc1Z|Bv?oJ@bET0syq+ zWS&`&^WTq4Cq`p6qMOA8w{B`K$(;c!6NS;gbF%@6Kr+>XvL=FTh2_bs z*&QEVZ;42MN?ZZez8{{)>W&eMIH~|@;a3J$!PVR9Os7x@Gv3PE931TV%rrP&Rnf(?A4b=y?#jq|YoO|0!2mr_qG!t$G|;C%R8?a=#K!{Uu^A!8nF9 z+wg0FtPaK%NLrEfk@R(H8eWh8&4UTo)tqw;#8?N{vmH7G3eUh@U+yJgFSti zkMhfA?LI1gtbI_^0wtH&Q)-u8$r9FY2G(D2hg@=~);k_)K*0D)YmZ zj0pIvXaAM(P5*yf`TpNEq5VIl?Em6N`}+|8d7}IUP5LKIV`ODx`}gefcUFMcG65|k zH?2m+Nq7V>i{k&RYH6;!8h|Q+r*yRE`9#d>mjtR; zHC~bL`23}OV-Ek^RV)C@bmgV&&hnm*$<77F3qNXGi7b{PFZ-?)d!0yjDBtBB>Z{;K zKozl`jVzTtXBuQ6SPUtqArl_u3*=Iy$C=UZ022BklPSF<);*vw-0~0s{aV)T0d0WD zMnq1KAM>eLeZDnX1`De?+~jqM=?Twvy(&CnE4f66C{|3a=oApzAt<)D+EOqh?r zgA(*E>p=2Ouuzro{Z;HbQ$&Mxe&I;bg~>Ml@_7~ep|i+ zd;TXHv1LIPo}q$k1d%2iRUFWe&Ddf^)^Z^{tJs`FUC`hSjq}`XeyzdJiO7q@I&9y$ zQePI)1zQ2xfFJa#;F6NXDZ*9M8*L0R4B3ket@HEhwX>Sq7z#=Lg2>auE>MZ(p+~=@ zF1r1BgbZyH^R8WEgn$WbNYGNyqfMBt&;^QX^>oG|Ded0NhXn<%rz|OK05W7R*Rk$W zh%1Uk;2;`UsF=GeLXe#2iU&9Z%YaMA)W<_!wQ|3t)NwJRsj;iDL#jgoq-!5sSFa^_ z(EwNFd($>kD8nt~)AfBnG^~oQBvwv58KC5x4QJ6I3gF1@Qq*#4AnNON)vxQi5ZcBd zEx9QbguG+!8mv^BcwM{mUzL%Vd*Y885n-9ghSBdzQOMT=jpbfAb76GBOE-RXoNSs^peZFs{pQd@de)_tJ?v3^zv-J?`%jcD8<0 zq9fQ2-a#8~#cQDzzeaJoV#Z+f<1`tL^?ZHe4qfksPHZMY2WMFgE9AX*CwyX_&LD#d0L@@4F{1g;Z_-fBZ-2m@fXmphLec2<&X@(J)*6lYq_dV?Uq#~nCD7<4d zE1HVeAL_2;5{lxx#h`4-x0HV`b4~i&!*H;YX!ZqKLe4WWlieZ1Z4fQ)8*tAJX&vLmA8JStzZOP=MV&0}QLFsnPwt ziDegcIn&3%R-(?HYU}ndMP2W5MXM99Cr$zf zmJ-PKE=g~6?fb|{$+!zTqIg=dU*!P79fMp5@|ImkonR_TM#od3kh~AQMk8@!B5n-k z@^oh3zt~?24USHIAY9#m+S=#$d{`94`*@Hg4GCtLELo!6q||LpK}8K62m#`rM>s#+ zjNThKLU$Y2=wuWX(Rq5yCmYQChVZ>B^>g)%hu~2ugq<(z&pC97R{B8#juU6VLYO)euzfmdmf@CLV4^qVHlXuVPgHvEo4B6_fi z;|aaY&sVcuE{TR(tby|{QD3Ir%#tg=cjf(R`mK?wtcx{SajiO(0zrKS&vu>eV% z_OZx*F;=WQ1DGWL{XOXkxbiX2??(MgO&OX78^P=t^2j%T1P1^eKs&4H$ok~lL+s+0 zmUZpLDz1zk0dr1!STeJv8!8F?0a{5V{c(~2QCQ_}Hc>mZMJR}v{5I`tHGbNKF%DCh z%3LiuRl3B`r0r|Tbaj6>;7w8y!+EyB^M*~mpP9_#G$Q#3&GAz#s!GbK!w)nc2lj!S zOZ&I@$4EZg?R~wOA^hllu}%x=3h?-#qgAVz}t&@e)9!4Z2w;1|5Bk8f{Uky)l>Qv5}0t;pd2TV|YQRrn1I zDIqvLjc592&K74yyvrpi8&XDN*5c!pV|pAcc4I<)O^l&iblkF$|BmHI@P2WFpC}6< zFaqL_aCNH*V-t!pe)GP?r+e9INAT6iB|tWOl9bsH2V!}kAilnCfDyIi!n$rpOFRPA z$*v{tM~{GQy1fS@S>o)NuEZL@NE)f2DQxG~Tq$mj$k!08_70x$BPo@*-oB$$gEdc^ zWG*4!JH!6-tIn!DF$6X9lNbYyD`E!kvf4g8noxblGNK5``uJ^tAXeOMH@BA#pB#bL z({rYxY(~Xj?3`!kYta`gTa}!JQs^iJl%bxA1eeG)GA3oa+loGicaQ^M`Z@NCWE)PO zmdz}k0A!7oY2^Kv56AS9FhC!|AXE1$N8_hG4fT?q0^or!VpbX4W6Cgl{cmKbwtQ-+ zi6UdjWlXN-1Z%}8d{GleZhRTqkI~*>Jk0_Y@oM4q*Zphh@5>q_i-6T}3o#+q^B5_x zD8I0JwhZo=1y7&JbAT}gE5w+&ydb>WomHZI5p6_^bUsf-N0MXwMY46fG$roHTO5cw8G8~lf^W{ zQgKGNe&)!VsW2tXkDA1p6Oc`(2r}RuXo73y962cavUl}DGj~MIF62C*KK5xan#l_W z`cq-!I^^m>vSa@^ij_Z!Z^`A=R%8CIIPQCOH~QI@Vi^XP8J)hcT!bAM8nKquPoXH< z2XwgyYTZRs&5QVO2PmLnILC)o&XU@@Y+WH)pnT?fSqSTX62B`oGk1x05VbVSn%`B# zVVH3cAb`=JJ&UnO_VEFYD+1%`k1P&HtDO?oq&$Ock(+&XD z#~X(gjAa}*1W&6+(#)v&dV?raDU6b2x|VQ;{5bbo;eApJ@IpD|mBoxLd`xh;VLCNm z$K6BM1jH9O_lN2!ec!Ov?{@X1Is2v8!^MepOwQg)-X=&K7!DUC82d5p&w(46ieLK% zSSMx`42yfW-TZczu=Bnr+tZAWRy+W=VMY!f%zd32=j%L{j@?On%trg% zP9Xl9#oF7}gnpskPgsmfH{(-bZL`!JO}ly62>UAE9knL&%0(iTMCV$5%*%JM-E#@2 zbf$bcE-x@i@a9Ra9*R*lVjoaMerQ5GkfFuD?QSGa(G*JmK9zXC|2N3%gQp^Fd|(Ko zB}@P9L_y_`y>mexR&{xwwex*geq#1EiUPIc66hRJnHB@c)niPS>G2@*jYbhmjdIcQ z16fQQx9q`!S2bulPU&Ca2&tbFIUy&0mz~Qqo7X!^>1`;e(6y{#i+?J?tcWal7dTud z7Z1wMFnH9@(&5m_t_`X&Yn#bmZ{gWRhb=5?YlNZO3fhotbyRawreSX)WV&LKM~AG< zg9^g*9jQqDF~c@fr?O!~)$i5{6K45Faw{Q`a_bsiABlsy)iCIWI9p?hN zAcOMYo_%$OLCFR>AUe~ow;be){Ml=nH(&Q&pY2&&{0 z3`Qj9!&UBPHBhYk!3Zb>>gwk3gwFy^u6b_q-HUQwWu45?Sf+W}OUXj1eI3#DU1yrr zD}nU~yFUf<8;XG9lzulaN57c-ROXhJ6j&f_eLrNYv7xQu6FyAg!e4~~{=+!)ztYj@ z|0a6;|2`j$@n7%%e?0Pkx3d39P5a|&|GR(vzxvbvKE(eT3SePn{}1&8(2@?#EDcYe zjESJLVmZysu5!oMLO&TWN~4-F!(n0hw_PxEKmMG2#rjZ7=H+z`gEd{aY2fv|o$Ooh ziU~!U3wSU>-D`9m!>L9OJOwm=jRs2V&^xDf>_~^U6?wgo?ski`nbYQp6eez_%&~-~soogd@4;n*_EPGc7t7 z))c#Qu&e605Ksek2`#y)fH08=4WZ1jIDKLMx05)FfdE+J>-z!%o3KU-?OBqlf z!K3=LUH%E-+R?zFm^T|<*7~@CN+0fl!;+;X56Zf83M_i%INQJIhuMhS8uxFgvY^r0 zU*QQ<3i<{;Cr7e7izQe{W%l-H4;Cs3>488VpKX!zv_*5T&HcwrxWzN71HSjlnuT`I zv-SitKD~0{*ov;`NsPOFqI|S`Q7*WyE4(BcUKUD<{@mxq#Z?~%QCO49PNc3ftyx%a zAsvtqN#s9X3wut7eAR2ONWv6BYh~IuVpjnI86Pm#VG?Rh?E09Z9E3S{*T%Z=>}#N{ z1D&d}dm$8NmIIxgQvzdj7Z_|p*U#>zWyzV~jBj+%;)-J`(^zWGHI2|x-U#MJVK}K$ zpbIaSSkG1|CycTZ4b(^Hy7#B1M_g2|^4Ev#46Sj}L;_CRpxk86%6E1Ei>L8s(xK~t z+Pmv(Fw({YzCvPX*o7E6&b>nT6DI_*Ti{)Se==X1TwOEWP$93Jtd94KlRaYjpTH!5 ztDcr}qLgVW?9w@Gc1nO)ocm63?lm^W!gD}IpK`SsTW$gy-LETX{GIxP2tpb1(Vxd3 z7V+PEZDFY-cGh6xvpC3!ngZ^*NnR1?zLYa?ey;`fByjDjAbK^`QMM$FNrH2sOqdw( zF|0*|eI{u;pC~#LFru4IhM0lgBMy!k(^ph*Q#(Y6C~g)(-<$DwxoLJur7#p}iobI^ z(vgaV(K*QSUes^H88Yre-|@g*KR|Y)?LKX#Nuh5QGIrU+h!1H{2u1V*aE2lsPl#N5 zg_JSUxRA~X^7AR;B@P}v$cKI>ysLQpoRE=Rf%{d)P36wk6pZ|+xUq8$h(iNL-;ucS z2*J-0m*k18>NlD-$!niDdGryuLh$x##+7QzP@URzS~)-q;~+b)G&BL#ZR@~*mIaj5 zoKLI(%cY1~;Bnvx$?nEz0N z>&X_XmI*Xl%@4EAPPX>>+cLDw4`E{oPW6%#j*l}Xs-|!B6FeqlkES#0uTolo!y?mx z0sLP)Sk});5q6SG$=%h?g{dUm4s;U((vdhhayEGz)td118&R47wue5+>p`(i39NZ? zYG^4_v_gxYn55_T;e8txo=j9Fyi7!>ycx0W*Gd~>b*r;JRz)BIoXM$7UWmUPewka3 z9JnBT@4GY8lB!JC!>gNA)VEJ99%@~*=>z$n~pqA^QlZymOAyDuqW?H-~A69>Yz7MqRw5-0nd-@}w zXCl>qYK{XvNJrNwWYK^0IGvxGwB}rk?0hCf2iuvRBvN*F)n7bi(6kanfd5OeFElGw zFX6M5_z|&!>-02WEgju~CCH6O+UHvQLB865O$T(NbbF79xO&?_26}xkGvZ6P*(XL~ zN-P2oXbG*&HQA<4%3CNGyv%Qu2*7ADVDns+I_OdZ>zDLITc$E zjuMp9Abf4Pz7_(?ANJVA-PB{^3Up^&-v03G`eIW8o76CJL%xrssNbo$&|T~88YJgv$m&G0)%{mSOclr~Z=~c- zqGl1T;IX=Rz=~l}xXhep&6k{tbNB|;qShOyL(6aygf%AGiCT)v-!0xX{8H6x?6ci8@}nl(f(TFdVH$247qF&#vL zu5I6LwpA#-be}fSPvIfzHg1PULBK;<<&?}v#{4%8tz%SS?*qEZk9(mO85OPNVzlqE zdxI~>Ddhr!Br(8|2R9N^fwVa-M6V~_CF!3zkh?#vFOy-O!z>g~u`ZwcBKA~QgYuv= zN1HJGJS9|nXW{D54#n+9g+dPJIWRP}8>o>=%XJ4kpJR>^dXsP3g7*KENy3Rb%7ImC z{#}mkbyy+%&d~Jdl_poR%P=L&jEoWGMo9q;9ZR}+m~2_(z|2;< z01`>b(Z=%0`ecEwfx&&NCc>fsO1dgLli1X2TxNFyJDGTtj$wMz_92~Y0-Z&e5`=x& zausyngk`%ra=(OA6WY4sx32NKu@Q0`Ekt6nS8&Lk(K2uUp-|MIaIDn8^%!w{jh&|D z+;)k`Sa!c*BF6>8-48m>MYn3jw$7cv79I(4dPcM)>(e8Vmkz<2GP^-CVwpy6p9W=r zt3LWW+@?{yV$`aIyLYnKrv1rV<^?8d8DrC;EcW27hBRA6J3nV2Ytlw;I+u5oG($Yl ztQyyAyu}x`9H9(BOGG2o_&ZZQu1TtIrs1d2CuG+z{iz!}MU<14d)qAjq7EXppDisH zt`mtYYkpnOtL=2H*sqlU70jl8Z~gY|&D!uYIvzC0MKS9&TKM@A+V^ zV;bP4$c%GdP?;C#8;K4hLNKS^LytM;{c6#73eB~=fQ5vzMhY~Zpe`{!9~;YAO9+?a z!{UIGG?TB#nH)_c8D}bp+h0RvF)VNB>xD5Q&k79O4p!yoVXORL;habgn^|4!D0qu7 zRyJyxOzi<%GBUa|+BYk%q=I~dtG=mIMe{?(`^46Q^{N$Zp2g|`nt{utwNp=zMk7xwR2@(d9Ds9AkyZt5 z)!umpQ)}_O+Tq{KP{f$0G&e}Orl89@`gsC`W+5=mXje<9y<61$e?!XP8>mu|l`lB( zw2Edn#a?CiY;nDqbV3R08r^i(1GlX2i0K-DeVy0UU4)eUEGEa{Gcb16{&tQMN(-Hp zn8UKAO!(HbAtdR+@@xr1WW_3v+md-RR1E)$U7VmrQw?q(OfIuEOXVnVsq^?%F2*l3 z-r=_wUNzE0kq_MK?az;;(YTbFGGw8Kz$*Z zfkT3K=)tl|9H2r(ZZrgak{|kwlO(Pk#n^I?tl<{_?LHCT00Ed;5*W=C4es`gXb_cu zljWAS!?>i5ETN%~S74D&rj>YsMW2WlH-*c2@2Z~-eCQQa|;ceNA-B&H%n5WVM(^T2m zK!Y(gNN4+3tdCKI_6D!1W`u@p^%}h~G@S~j;#UNBJAP~P+H@}xU5${DCg~<(p;$bX z`xfRNZqv;QKQYW3pcllH0+O}uE;gYtx1u-!T;;%7cQZcn_9;^E_(|PS2ybdl+F*G? z1GQ!>0i>NtPDouX>hNB`7(QIwhqWc=SVvKzanA-@kg&Q0{&-T2o9*%G z6;t)Iih*28;{+{af|z5s(ku2esYkv8R`u%#-rOMy-+j$qm8Iiln7J^)W+W26>4xPe zNVQG*TrO1RF(uZ2^Ww7E6C;xF6v&)p^7%@gFHmjeE00$q$c&R;k{miREs@~FofD;6 zEZ4^MeQi^umu9SE%)qVlW7iVP_{9@*B<@?~^$R(|GxQ9RvGlMJ1b&x#p_1`db(B7+ z7DZ~bZw`_b20V&4sqK8H@=}}De-)ejScB62Jaj~+JncJk`@Yp~P39ft6N&PXo?tH! zA1u7HQzw{Z8T5t)e+Fj?Yj;3saXfaYZ$$`wWgT@St|)qkz%7`W`8!dND&gCJ(MTzR zLU!}-=!ZGApig(Thk1&Fvn`at6;bFunXqSf9sf!xiuLT(| zSW$YY{p5{bg7(`aH0SLjBJ-I7^>uY(%)s~ausMmT+>xsv@|d(pJYsZ7oCqwLwze%< zjF|C7R=Zr5`Q;NQxF!&(v2g6d+RSuI7Dl5+FxP!YaSDwc`@B|0SpISG^B1yBqD;p^ zzBs)w0TgaNu8FqWHzv#}qUgif&~cX;v3N&+jN1bv>@rRn88nCaSZBj$^MJ0dTpxgN zshuj)QLF*7ld6cpRQp(+3$+W5^HT41+rS0PtfuXq4QRkGsKhLuqb~Qycx*w1Nk_cW z>afYXhrBLS^_b!i=Tkz%PzBd0-EUbKS78hJ0b+)#)gKn=9Q%7biW*^gEDk|xzk7QY z{pFD9tM#3|s(;$oi|0>y485PcbO0i2uj&DEr?J`HB=72u*_Etf!&p0b+%S-(tD~~A zT2OEVxWX)oV7MnWRUeOm^QhsyClp2`bz`mmN-=Y?dCv^DR#gHpo=%a)Ph{-~6Ke4M zhyg!}j~OU!ap zU~wW}b4+t+tfD@Smjnx+{Hg>mDrFONq;q~<)Lfv=|y^`@b z;dS_N*b*Dlg)m642iZ+xEqi6SA^1&#`~K+(03 zt|AG}Q&k}EHB40auofG=R`Av4l_Dl>2*!HvBBJCE7y7P2e zxDY{+YSKF!p~Gvbr7#V%5CnnQ(hG=^3GIg5;yHGSos4|i2T(rjBt5ng!m|b4Eo0) zQxN6FQEEH-k8WY6{h%6yDlpQAxjES%Z)>OD^5DI(B=&;Tu_uT^n*|wN1A@8*-Fau!yXTXA; z_fz7l4y=0A{OxC7lAjUB!2@kt4O1`wFrnQ`&}<|;F5nx^3Y%xgAn*Xt6>QXFwYu(m z*{x-inXOOOEmHg5PAH+xI12kZ1|{Uk=yk8;HezZ!QAJ%Uk%K>HxP`fw2u>jlB7gAb zh_6+miY>OtoI;&b!+MX{C;=&qHJsxH!Ix^k>iD)RXIR{zr)o^xrrRBqY>r?}l-u5b z`)a8flQixWz{RTTZV``$>^Fv4fow?QAcv`)984$tmPGa#5_D64R(g&j^1bNz5;p0hOrjoIJkq%9-jy7?`Dbu@1hz{%OckI8x zJWfm&r^T6RUCmOg6FZ*x;ja4@$zKEMshXnlOo(k8lfKTZHe9XZs6yRf2d}ynKQ7IP+jy7(O3~`lB-LW)4t*(6~r2W#R>p>vE|uFIBP@KYAIdQ zi#|RrzGBaI5z3c&AcE$Z2zWoBTv2qNVW=0yLtnig0MF;hA#aHKdv*gmN(324Gv?uhhI)J-)Ny%_t>9Z5GqyKp^O5BF3; z){47j<_2;FD0vZj?9GP?{O+0sm|~8+3xCWVQPzpnyD%qc8po~eh{JAMAHT{53Babs z%|f(*`C~NL%(8D|K5uB4Ld|C^5kp%XB#TfIUgD)@vZe{(z7Ce47wr5+dqAJLjGtc& z@5N9a1_Fuwe5v+SV7f6saS#6t~^5v(VOpp_dyHZjR`%zaDc?H24T@qT+X&kw%8b*R4y? z;lTRI8hT#P#m*Yq@W?-$`+zAbdZCpgNrOCBDmH=`Hwf*>cNF`?)SUO`&GEb@|GRcD z!X|2hTw%_Fjja9^r^O__tzwd&-{ayimZAUpyQy!OHJfL5kj9H z^}t*0Sx&ah9hHjJ;{^8M0nuJ>=hJr6n-L;&qb(re-_bBBbyT3dAj(?_4>YDf zieJMrByHxmBID7NBDSe%50`py1Pn-u0~_Hy_T90y_My=T zxlm!TUt3Gg^$jOX0_y&O>)pBj5Y5Dx*$*z&@Rx-e)VABY_9!9&G_c~W$;%{49cV;4 zw;M9JF&8J|8|BoGz-A7Y7K126fh?p?wn;4n+Bdo>vUA0T9 z)OK>R(jjNeRWo8T%&nF0skPB%rfBO*c2$RJH_Od7y46qZNTQV+9hi3g4n}woY=~hA ztYk|iK_*pgZ|)Q}V){GgP9okQoO_mwA1Hm;1<6B7dSGJii8WxbpFboI2LK>w&|uHJ zu+=y>g6YNYl42VT&wn}4Ma}1 zo0~-=Mwy`Ol z0oOg1R!N4xw?8lHUeu7V3>w8BmU`G=Hk9MP!6}?x+%SU*gt1Efh#oHwTY$d6G&(9X zG@X|m>-5@OU-G>V0yGUBR+=YiY=xcBy6E24NOc2R5^H3A@;15K*U>Y-;*j7x9t{JmjH*9dRl8~RD{UqRX}!1Vcy zW|(t4chFFaxwD?h4V^4>*e7J64JW4vdB1&jfIn~_5|k(;mksM63jq~2pKK&#gf_=6TX-r+@jHZi=r3hG zN3#56W?z(rozXsN>rWSkLe%!ZrmN1Oj;lmAyoA?Pf@FDXyy9>KpwlAB7R}--Bo4ct z+kns3#5F(gidoSmz|(aFgNjMY(n0NOur{SakRIthsVu8-1uUtL9(37mb3nUBAoAaf zvw~MHuh4X6q#ZPyA($PVZ1Iyl-a{5pyod{&ctfWj=#q_oi*mdwa$qPfDc?S_n&rD|L3MJ2NMI!|7!ZKFeg43He|>$cnI7L%yBe3 zsLo`(x%DjAODHO8g_`?v5c&bLi=vsdEVzavN}G6-jbX%xqOuP3DJiJ*+}a|fYrGw2 za0fBfWGpuuB?(P%Zh=e~bZ0^zv3zjB?CVsf4t~c!QfNO;GiA}G9>SXqQwP|X*Ku;# zQJ+*b1CX877WvuNeQ-2X*)j(GJv-<)${CD_xS;~npdm)@ukf@lR+B9o(!SDM205Nk zbgK3+L~Sy40W0xQGG|q|>w;5yX_nq!>J@)dMq&K`p9yt|olKMiGmXxLy7zxLZH89o zivg@6eT4;^2qP}b9FJ9I&B11Q3c>iM)d(YysboRF#E;(aunby7i-xEQGCnR+3u6r1 z=yDSrvCQ*K(FYvx?tu4oAMef-^p`&usEg77RN2)KsccZ0hvHUA!3!{CKq_8{b>SiM zI-n|kI3J&Y_GC)&#GWvCTnR))XM`Lxd3oVKNjmiZ#@IhI_;!m;&QZ0sxO!Iq+3**Y&`CI=n*2 z+9PIZV>e|I!juo#?W`dg{jqXVVwUB&9@L@iCV44{Wbcx`(9J5Qn<0-~dQK5`*SoM4<%%VnKUgWw z%rnY_W=+iyS_}W~`UdV2wml7hIRny7@eu@fgYNoBHHuvBs=dV9(0rpTryUwwXUscU zgY%|PjxUOU+6=RZnLrT$Om73k;*A1nZk9CGty;Grg9}=^PUV7lbI8T-b49mnjs~g>bv>b%hItbf zsJ^l^a@E+UYnM5zVghJkS1SfTtVO~LW1#!w0*;cOGoV>}3{#Hgu=9o~gZhG% zA-E{{7~G>k@p+daRMX2C;Ap!X1Q3B6WNgXl5Ryme>wQoDwvQa_qH|nqYY$*7!3Zj> zC_Ay9L)w11H{EOTwNvf5(PZiW{{Fm>e|ED~^=H?-b)dCxeiiaV!^@c;Wj!%A*md>i zb)rXgX-uf|$F-$^TIu8y1Hoz+eZQpD%)dUDcL*}_%j~1kl&bE!l_N662t9#cWov%q zKLBwGJ~v`Lb%VP-Nk&&itB^8&2+%cup|y!{0`A4)59GMMu6}ayoZ8NN5r`(_ot>&< zwWE}1>z8Iw6uONME|ThSO?BB}9cjiZ`A}RqZuI-Js&Z>ZAu{lkYu39?f2~8+7Smwd zFmXxY^gH}KA(%%3dc-^jaIh_I+(VU7UsE_J!Ds}opR|sh*iN=;1Dw93FR%6ob zJP;YD&?UtUIH!)K6Y}}hXrw#ZO8a?mj}93DGA9!Q#vu>QT@Hc|`?2wLb`4Ma15OWE zI~*^akU1uX_+)64fI$uCPLTlk6Hx{m28Q2g|0 zRWkICb&`_meK`P<0Wmgd3W(V^X`DD-YnDhs<^*5i?7Vjw_B;}9(S#lq?(rLyY~;CP zhURQ_DdUnuhS-6!1JL=BI)jp_gJ<8tyvrBLK6!vi06IF}3GTzyKJ!>N1;LZqCn;XY z0{FzCCE6TcrE1?`ZN(+x*Cp}Xp{^_v@7s02m(qwsRWA~#y^mFeZFgb@g&1JZ%Z%nS zj;8mqG?88EA_H^Hg-g}kIu_p=dHaVy7gI|6^{<-MRO8kcwntfIQ&&Z2Y4=HCuc&;- zCWe#hD7%0w_Nm6a@RVy#LM+TH45fGJQU}rH>VbAnfILew6dDU<0rhw(Z*6{af2*wG ztgVcyIurk349$jY-}}ar>CFRMN%vPBJ05@eCiG3)Up#by=vz>CytY(#-E=<(pJ{@K z0tfMw#`Y&O)*9i({XTe7kAM#~{2H7cq3Zd~!-wGV1TdUU#)CK8r7^&cp~EUP{ht|k zaMh^tnw1|^_tweGX&0WJ3VOt*f4rTLGav85fSq#*s7)%Nipb;-ZTH|m%1yi`X{=W+ z3ieXG8k{h&a=nQ;`=RtoHw6&J+F^9Z0PhSoU-S(h7sPTE>T3#)O}FCx>qHy&3nixx z>v@^=t}v6>8Jq#fTX8l>2!Fi1y%cQMR^R63*xu)N#&th3i*>E_oTwtWUvB@oZ&qL~ zhanb^b~o5Ck26MXXXyeFpPU-5A|+J(R8a$F@SX+;;W^d$!q_SR&G2V2c|{;;i6&%h z$q0o7lLqRQCT*;F0HT?%=L^lzGzA=PckV6^6CeiFvoYXLxMs192^?;8@CSTXbLsDh zUB3BfMk+&f+v#-iHh4#!5xh##b?Z9bHh!QYz}=~BWTr5EFQM`5f(=uDt~PMDsbU7jk6nz6M?BTPK4zEx>8TqZ_nW-)I}U#zFvej06g&%P-~w;kY)RHU1y4A2#% zsiS0gJLs!4j;`B}3Z1>Z391u^Zcwvhi0S?Cgx3)S7ii3A)ePI<;HS-0$0Gy?zgSpl z81SxDQq7 z!}+zK)M7SSOz(JIe7_i}kseY{?JC|SCxqjb$5A>y_HH4A9U&sJAKiwYH!mKOlyN~h zxxfHmhZ1++Z|I!IfBS8X2pyq%@>Qd_LpL)o7Yf*{ytw@fAe)wfDQp8HSMhdz5*rfE z?|+dXY)ogh9w2}#Lwt&ccjMsu`q(br&cZhZi>wFi|KAfb3i*>~DIi~O@aT|;= zcjp?>B0g1Wngqx}lZZ3F*O61Yq1N`Evd2I4JQsh|H+(_#d>H?Ls^2-6ra@)8V5zHX z%g!{+?8tRHe#nVVmaoh57%A#IeZ?-*<@+&k21v$1f5R>C@PG^D0#1hoyRR^F-&GE6 zyde()#l$E}_E?E=Z4xkHpemIGQWJ5K22WRDkWsoFcD`(VU1O$ zHzqy}Si#-bz?e}bakhEWyPoY;XH|NmXO5D)27v>N`PGvyUR~@Tz~rJJVU4#^QZl0F zd~eFwfzK%(F`0=i`!xJT;rQSi>5h=8Q$&1iCYffXZf^NR)!Jy&{FPsPtBt(ZYD=%I zZ}mNaLCKgNDP}9Nsna7Wusn1sD~I?EsHAu&X=pA+QLb#*_At^bk;e~g-F2?)>aq%* zELRn_46=UQ#-p297Wggf!tIK0ML_B)P$%)Yg;h>oZ`IrhNE-p6 z>F<4?(HE`e1B!f!o{q76g3ngshvHI_oe^J-vKa7rv6Ioq2i@*@e4N!>scyZ#NL)jt zfgF zl(f(JCKlDUd$tLc#_alZ&~!vEzzijtJme$H#2$SbgijY~JVZE{t z5^l65CbtZ$WQ}D(ev2hx?-Jt=_20eD>}R?R;i59Z;$#m+$)0g3w$I}@qsu=rtPVZY}%K` zr==Rn02!kA^IE+gU|r_3$YX!%*Z(5y-cYAR?J1y!T$lEDx}6gyI#>6}p3x#jNkvp* z(amBc@$tCHkFAi}F48OPru<9q zMz86zhf5W4?!%F~ZVMRPYVPnlWepn&A0s4SK8Atfrsr*C?!;*!L=C(`xY7GShWX-5V__ROC1{0tm87Lc6umQ=Bg@F1?$@ z0+~n3E3oLD-yUo&R%xyB!OHy<_s^E8k3SnyRPv8DH_&>9YU&#iO2z$zwqQ9q$#(`^ zobqjsbB^`x>$6vkLz*Tv< z-R1}lp{>y29%Cfj*k<9*4a$M>+0t@{Ib!9Y)#A0WQ?626vu0pE&KSyR_ZvI>7)+fL z=9(qSlpXad04=Jc{g3bDhy*?(wUN&uC9JqPRCynJY{DU)Tfta2R}THCzZ8BsQ^iOU;LU3^pe z&e6T&?(rqEozMEmbP7Z-~Gtcc%PuW8gH<*>E^M0%K!K|GDOt` zT#Zg_LBxc>4Gdi`Y0d1|%B{3uiKN|ZTmn-^>Y`6JW|#j{{Fne&9Jv|>inh+ei~eW@ zO{`<5Trnu@AFWs&5Znv)o2hyOy9BVit$*zOz)y%!8j}OZDEvS%^IUB<lODd2(oV^q~q+V*Qs&@aGeN{iB(@mCbAppRFx7C#8Q*CByjKWC2`9g@scM0 z1@{Zarii3nGHC&RVxX2*=iJ&u!Lo{7NyRoPA%Rtz577plmF(EN+^q!9;6?JnY#_Z9 zypfYY>T|IN2~{^0ct*Qk)`2o0Ym9BP*G6LYRiZX^UqaiZc|tWz|Kv}3OBr6v1Ssr& z23~5Ke-;;w4@D1YxxlwTFhdv0mC_*$9yj*hq)eab_0w;DI($w#)u_kC?5I5UrY0Z{ zEKd?pcv$ctG__Q`?0Q5s%K61Sn7=6rEan2S$uEa(tMPYS8qtC)iWtm?9Tr|7#@2bt z@-df=Ra@rO6MEQLfY(uN-XVZ09+oolGyatm$_*cUQSr;*R(6NPIXDlh(xSSG(^-<`*@PKP@S~AD`{_Q6dClo38FpFya&=XqZBe-U zL_6emJog|RpKt1AS~<$Qi@d=E9Q5TW_I&G=D`ktEvIO@#!@je*a^L}lgSkE=4%=7) z46+2k(k6vFm%fDao*#y{^#^xCLC;pg78abXE@^9|l{Vs5ZSN6NF}*J4q9J^x{)jeY zyTXx0j&;dpGoAu?NuV*}xoQ=ynMpl^B0gg?$^w<_QT4^E&LI1jD8SGOjCo3c@_y&Z zOcf?a*zT7lo#ZhMhGRi8WDgBSsQ9tSGuM|U_{yJhCdr#CkAW-7*cpY1sCe;7P8ey0 z2$#(jdRP|<{jDLv1Q5c_wmhV(a{8ojdOFRJ?xxnKB>+C&;~j;JOX@)8V%HD}A`^JX z-V96N_G$H_YX&qKayE_carOf+6xu@M3#tIToO?~-H;u}dy?m5OQJl?EYAj!&PpYddpBK$ln|C-vSf)QG? z1o_d&%pCkWlP3*i^FkeCqfOe%B474dZk->Wl6)81agLrssfs{?!866}9E668nc>T^ z&9m+;5G|6D%wye0d;J1)<&=dtBJVF>KpIr2g`3zgOgM^A;@gYf$01qZ2t;0%$-btm zTyAEp9tox|k{{bJ84&zMsDsE9INgc-9>5EaUxC0(5^_9aJoAWfiI(5CTil=W2}uq= zjhcPS-5>nirk`bhama}UmJRW8J`8QL`_UZ%RzO=6So=uiTdy1kOAOgiIgulgS*-xS z%h1vjiRL8*DSh$AdULjZgS%KBVk|fhzc7E1PFh1mNGG_9d0Ol(h;B7Ao0PI3RX+Sz z&1zRxPAd3OuMvr|(Q}wHqy~;Cm*}q7Ajno29<>aN<+cu4@&=tgX%Vl=P09mjt;jQT zIG$Ia=m?k_#axC33w2u@7y{C1(}j`Bv-~S`+}q{{JhqxIwY^dQ*ac{ifPIL3790TR zOL5{{eHPUZmKr_}lAGWh=q$p;wi+s+5(i_V-cHWxo{!(XZ2a;bc4XrXRVlwKNT->n zzHSAuyr%##lX%RuEM2U!TY%qh6kldT8%7!V!=Ug-Qakt3I=b~akL*~DU2^NVI_|Xb z1%(tkr>y2e(AQ?5LHUcv%2`U_Itq5lupsC3#${~01W|0;HW2f8RCb6v!&ih`7}(^d z9ms|blk>H#ZhA}IF+8-W8JV6s6!t6u-q#9?0!V6VIlN#yyY}K2rM#`6X-1xzcy|b3 z7*yRGE}*OnGf~b0h2lhC^<|$vu;%Gt7AagR#fjX=60~uEQ33!Q=;To%#mX-}!im-tpQ@p_e$CtYm`T6NVM97|JF5Q@WeLFr`_G z^y0lJdJP)D`+-ND4>0@vUSQ)EF}pN;VA33h1$E956#LB5w)yIm3INCs3Qv{*5p^ZR6`dz@j^|OUZL|F zDvz8fzff|9PbbuSVNr*4>(S z$zSID2OUi-md%?@4jl?QWmY+dnKpFCDnqA?v(5)KXTO;6PaTa6+1Dk5FLEofCF|I6 zJf=x22O6uVg|Hz@b4WKo`)?@eL)-1urN#8Sn@bTNu@N zG}5Bt-@j`A0tdyAZGIt!E4bo?m4ge#9WU`Aq9CLVDwNpb~V;b)KLk{_qJi-D? z?RhW2K{j(gt9dg_a1~lEbU--cuZ!b110AVZAw-Vcsm9BkIPMtm1b#)1ksGN5b58^>D zfOjW|KW+vSXF*TJ-MB6%7r4?;n#YMRbF2ng+5b0nIF;!4AGME1XGzirzvcE|v(oLZ zA*F_99@IwHjOF&CB*KYY#+vuGvkqBbjx|9Q@m6Gd1CF2PT`pFm-qQckdfm*NPO_h5 ztnuOtJJ|RgPb>tSDN4x3LZj){$LtcyA&$}KO*tUbVir+;H36bo4S%Pi=i4@qb({#) zLpWpa72KyMb@e^;|6&sKBPzmTr(HOgp$}R1#(ybhNdQQPPw`~o#)nem#7S34W z>5Bq}>y=D{V6_hDb(HBG-+m;;VLjM%Bo{Eho`-Ipz#Ew++$T?@=(K$tq$rz>#GS3sE^PZ`MR^7Ix614F-~&ScbZy17 z@A?{#HUoHj7-nM-V>)egdxFO#lofl!um7TP=3u^yU2SDo?*98-PQ!O)qv}nugP(lhVPZLm!9%p8Zi|U)QlkGkF-)i3(6l z8clY?!pv|eSca&dj^w#MkJ6!}c=sBV2~Whuajh9YbrbF|dN!A-hUqQFKg7jqXU0UDFKw|BBI$R8 zddW45?P@zQ;C3*Rg|9Dt6pqjErJzfb*6!BBMpq3Ar?B@Nd7gg9O59IG?Z~nNZWU0nj%t{V0@I9rL8K8VwJE<+P`=t|5dhcuz?(0 zMNZb?rNN{xxk&7>6-$R8f|E@LCspe=PvyW2w@Lbz?OY}NATIa!-k0-GlA#l~S#1%2 zz%B6%be0EGp21beg}q1Bs!cP=gxyC3ToPEAbo;C(;d4thlfx|>Pa)TXMg(*v2cF`; zM>|jgI+Y&|>+)K?pd3NEF13~K%QLy2*h0i0aQ#4s!yrF?1&)hQrBCImHsbzx4(@}* z_0=^Z+`Eigk4aLVhc+Q)PVraAg8ibp5`F$D@5usYdHi4k2mcX-P7svd-sbh<2Z1{d z8Sga8GOq+3<$Wb%enO!KIBrSLt*ApwFDy#fjw&IQ+<c!VvJn6vUDu}zXa|4?#YGS<&!MRoKI5QVO>KxIFkgB~rcs2yt8LV2u>`$9Jc;hmol~}9 z6TvpB(=jdE;YnQ~9iH_nc@{zz(Z(7Ii1R-z+xqi$w4`U)ksI7%?M*y9wb!|&kP0d= z@*%%aN2sbq(?z*m|HuUc1^t?3ePu8^bUIBI3V3^Si1-CpKJ3Rzk}CFBa?|R986er_ zQV1n%|LC1iJL%D<(h3_|9ooW9WCy;H9jESU^fSvRc2l zGZK56WNE`STtUU&9^m9+b3Bq^`^V&nog)K~iNqF!5fah|tUSKXYxdKmP{GByv1rA0 zutsi{kR| z)3wh0G@Y*vJWi!*aM_Z0TEk3oEJyHS+Z7qDN1ph;I+IR7!Pr))=%1@(l;bR$E}bw=6*@djDbFLKx zUf>qYN`aK?RIvCJYFZad{FoN*!wd~>Vn(V4HC~A~vhCJ;b2o6@fJqJgK}aO0trM zRJP-wa@ABFik^1tIvqmKyY89(fm#L9E`-Do>Z&w`j>}n$3u{$Rr1OqI5kN=8|;M zN;NR+Dzpm8tqUU=&x&z^Bpct=h%cdQN+qLumg$9moMHtcak43`tw8`}pPT7S`YP(} zBvBs7Y@teLKT_i*sWm@0f?+v|&TSA~QFXk7iSnz0hc3V~^v|Fz$U?Wmm}db3u$GxK z2b!(5X(9pTvr)#)C4(^$5o2sH0#I+;iamljS8qz=^X3NRiogp{>^A+Tv2U27hW5&r zvI6bs&pzQ+{IpFj18yfE@VTy#ar25$x0OHb6yurd;dquvEkCQZ8=@S+2bwzKKKn&T zy1?V-4T@O8Y-0Rxpj?$Iq2WlQ%wa=x@77{4eOey|6TasXIc?u-i6#H>=H_)TtwhB! zOD5$AL5Wnsr;|bt)uM~g7VN$mqOYT`6>^?sS0cW5S336Hhmv9~*?-{|M2bo|JK|3FKb!<{lET8>H-Jbe`XDrsx2^I{V*S=)s-~+>GgC)3GdU!FoV;nJYw^sONy~q53caB*87CNOH4-;wV?VJu-3|n*kxb#~coh ztP0zD0?%S}dRUr9avq|_iyE{LFgTWg@=6F5f%g-Ku3vwKeyP(ph<5jqlS>|wx%_tY z2T-?$Vi%?rb@<3pobwgGOGsbuCeALcaWFUE=YhNNU^8?1*+$sE1?cX0D?QoWVS(N{ zP;%x{&wGU!m_E`-F9dyZ;fFzI#KSja?JVlNkCQFQVaVdU>K4q~V=?~1zdktW>`*UvS3ymnx|f*{vtNQ8JpG@oU?4ho*(EQb zu8h1HRVYT~dGxHD1ec4zO$Ilx<=>!=vO`R>QVj5bv@vkrekb^-Mw(|FBfd2Ss@d`%suJ*f|cTQe~8D)!01>n6)w? zZ6NP^NhakQ;6H}nUE0h@891yr7)R9P;tp5-MwUTvS1>?hIuEFZGOu{{(zAzb0NzJ) z2ce>*FYkZ(OqH=Rq^Vq9|N6pSWvkMUw6?r1RXb=V@l z6$lJ^#4e?Z{2n)W1&Ac;qf^iwIZFTP7N%WN8TpyB>G+bhs3?RD1}&)-OxcVD^5>&kpU+Q3$Ty z!Kem+tHTv`o>2zrwyO;}bdSQ#kljK3Bb+6(3W^}SDG>ARGyd&LUROrnHmh0nHi zLfWkK(@9N+MYBVKAZYNH9#2RXndVOKt~O$7gN7Q3zmI&e@E%fGxB z>Q*rc*HgWlHyrjgtRGm;B5s5lHZ7|>Ds)!F&jBb{07w7a<(U@!ju;e+HF0Eg{T&1x zZu!=V&N)KMTf7K%@n%}=X(v&u51mY~86=cr#*Z9Bum{)rw@x+DFko|Vg7D!5!X|uB z5)1jr7TKW_a{ab)6I~0ptiS1SF+|5_Fxa5?JAGWj~#7?}{UpJjIm`CfS zoY+{iSa7fmE+}Yb3P2|rX+onb>i%xxiJH9rZFM^qU|+K>&BAG$Ebqli93n=q{wgZ` zzdG0zAsY@Hauzg|uR+y|S~LpxrBKYa&ihsGu;YbZlwg`Jp&XX&jmeOsL&InXiBO(X zxlayxLgXglWSELiINjn@7N`vpb`$uIcJY%2&vt!~DU$Kx4} z#1DHEaWZrn^tqZtG1+8Ar%5(SX@8K84naE2%5G=vMg$>Wg}MT+Jjn|u{NAlzxz4#)9x4#!Z(3MSxT@7ye34s6Y^|qBYl)w zJ`;uLp%W@i!@x`y-F9^4zP-C~i+ZUl^C>vX&yY2?zoY7?=3t~SF+!MIKdmLzn>7k8*nb8n4v?Ha3f?U34|36!$UfufAt&r3UbL7r;z&_L))F z3D|Ic>OI?#YKh#M`eNSj`(e=~23*Z?KMr1JzD=eM>1kQ7p2~{jh(0kBU8kR)28w~U zNLUrW+>6ZL%Uyjrz_yRm`qK(?Mwai}y1*P|Ayhta8L*npz>dq~(m^=uBS9n;xE0|q zaoBr`aE*jTVHWpAc!>;mFz*lLq~P;f*lL8$+u0>EZBd|^@G?RajSN31$sT}g)71L8 z&YGKzARS7%SHUE5t}x5+$(W{Y_JJn(&C0>EZbdjS@9y+rV}*g-7a2l5k3|{u6Yu71 zJYqI*-2C)19Ae7t3rc(xHQyPtaB{(0r_Y6G@=;j_4lUz55A-oJxY3m+Kbr8as(DG+3I>IUmO4`soBYd9!~K#LC1Uf-*= z9IB84up%Zb1pYh{^%0W#H}5kL^y%F1P)qDe0Y>I!UUTc}=%O4=Kc)siyu16!`5-s- zLtcSyUdfo%6}?+6CR-_!$=sM0RoZ9My!?4J%ukDs38ZvMQBBQ#w>@v!Y)J=Q$VLcm zyhe**0!F9M-wWP7h?{6pN>#7tfLFBX8}qq^DD-W(MwljbySslkx*eJl=XG{)q>mNtU|ViCi*=LOH-Wo zSp(e!RuwaKPw-0fP<~Fu5QIG3Pk{gx?!%QQe=40q$(QU3Ix6mu;XPk-PkkyM3%ah=xX@4v>T7fqnDs2lN=6gpFC+6^b~0&Y7fOQ(iYp z`zG9xUE*Efd9GHq1(Gh$0oGaqe$IJMG6$qup}u*$*V!9BHk|&p(sB#_ln+tCd{I&C zQCw~B%)xcT94_oAbS=;fG^%@YG_HF-T;bu{d$Nx}3voSNjOg%VFpBa}m5kP^uhhB5hyC zk9x<4+=k=33sm2i;OYx;bsz=Zcc-aq8Yo`Z^T;8lG=rI>>L6cT`754|7FZ6cisZXj zB+m=&Pn7o9}v$C?Vdt9IDJmXi}x`XYPENx`Mj*4ae z((Di9(=jJey)8t2>@e;03oqjsY)_Z}HEB)|*4$Zki=_|uAuv1s18`Dmz!tqq%RDgk z+2+Ecb|$`4=(qRReuZy(Eabhkiu~g~D@s_AD^?mDo4#BGlQd8B4R0k(ggYeSF2n8b>%!50J{&S{bh_ zZQLQBYq&^orlIlNBUKG%*2eTUY6Dnc(){RA!A3dQXTjAP*AgzD|PdTaH z#fHpb&;srR&7KkLDTnYt4^WG;3DbKWhMqdea!-}YiTr4E94;INmXwrF8NvZ)t?o@V zr1ijZdIk{IF%LXiv+BEG2&nT1^#CkIiD*9AnDq8vsC5F2UTY1FxHyK*lcQNwXcVpo zt*#6R*l;3|(!9x*5!N>S9Jvj2sge5llEDV+2|`cOm&!mH6zTenTs}`58YYxx2UR@d zF%%>ZO$IzcdlVqZ%vVlr=bJb0r4O6tEr3*bd8B%ex`2udy@<9wHwSlGmU?u}RkTj* z5T+@_Wo1Bf*H)6i`wtAK9++kH{L~t%Ayruf?L5;JPWXvNYPHDq&Q*lt{LqpVd+FfP zji{sLcKq92_dLDL0_>)(a{qv}r@j-2j}G8e>sS67@`3bRorIA3@e6-P>cW6MIO0}1 zmY-l>V=jv@^u|)~oag41U9^X!-e&BTrz4n4QznSzlE&?9xPl zs10@+Sd=${OzV+!0#S^gu4F~O5;Cs{YYvR zVu)8kSX_vZgx=HO7vwhZa(T;bU@B9-7|YIx2s%p0(@$yyHGEbn=}8^QnKU~tVm$SE z1gs9=G)~FFdES~Zi40S9^#$HQ+@dc3;XA_vRRH)W%XB8@MnBN@qJSqr=)2CclBqC@P$!(d&G_)Js=7$o;wp&B%P?r9xze>!d2W|4+CfZhL7B{Q zkyQa|f;cEZ00Pv-A_y;A9WQZYw5#_5F_bWgwOi3=h+v2o3l$PUsUvymqJNEFn5ZW_ ztBD98sM|ur$|bd;zl>tb#iV+P?f?lpibRouIXJR9h7-_z#J%3F#E)@~;;Gb~onL3> zcxIWYZ;Ve6v+J6cW)*VI*KEu@$XBJ}8$xgM_@FeIe8U3!*g6pe&fwln$Lac_QHZpK zCz6(vlLsiMRrDHmiTtz=G?-xtH-Q8AQ^#q|ZrGjKP_8_HE9DiA)u44|Z`<86sU%9T zjL(0o?i_+dYZfhCwsFd~ZQHhO+qP|+r)=A{?K)+<&+B_%+#dYh9X;&Hp6=X;6`3nn zuJ5)M`XQu7r}{f`xYLw(pNAV;(r7AcUOH1|2nAK-0So3+j0)BxW6zy6Y=bCtIn`uM z=eo0;=j3HL6k&S~H)qMXy84dbsiW$X<1TXmdXf*uwNa_3r(%SSHV>)mA6a#2VL) zVTRL3D{<+a#d<{iv~Cm43KW&yDNQvQVx0_Xph#9paeL&M7y-smh4h8Wi$2O(6}qiI z3F45m2Yi`u1!7@;ge=x?^B_q=o)aO)Mb!pYdVI*moG3{;jv4c9*DVy#kB$AEMqzOY zVv-n_C^e3F0nz%#1cnzPB@L+SEPrz;r#7=iC}6oBM*&F|34!yuZ{Bp#mT@9fKomYn z>8#|Lo(d#|8N+Z=E>td3H>c}+Y&b7L2YxLh`~f60&B<#=BL<+>@Nh8rv7!}Pl~+2% zQq?;!%~sQqgYLxlC@q7f|I-XOOqFR@rDy+2?J1IX^@UJ_CB25huHB()d!a+&`-%yC z(84ESWAsc!j7|1|m4Wl-OW;z;!t=gb0O?GA#G5G>z z=}S^xPCZYk)hdRK!pS$oW(-{gJ0}Bt3WS*h#A)9_i#e%8b&-?EE4BGIL02e`h{kuE0l-egx)664qaAhf-Yrs?r=$t&gba3jyVTS?; zebuZ|ijyBkJ%I=+tqk%OIiYq_O@RMGaeNF6AQr|uXepK@H`Yan2&WN zr9|E9MYXs)XsJVR_nyL#U#&#O_4Qmqt2(8yRAbXqrBxV$Z%PK zYqq6c=TwidS8X=!9dY^4(<16H3}~z(YiF%&v1>(xVQqLf2abw@{O5Y?xQr1BY=F1H zM3$0mDETZ|K8^%ISjgHf;f1xRulf4@Blel?8uh5=FI4#~J2m+S|(qG>5S z1wxvxDUs|ZG+g{SYj{0w*fXkD^4teW+h2J6lr_k&j~z15Q-PK$y*e}>KcA!nxP(_j zvE0`^;Afur2hA6PyZlPEIWPnH3O8HfAMa?A{JEO^M~)~2aLh4J(0*d4c=+-9Xm})u zou%#;M=v6E`QY%B0Jdv5>XlY!vy>u%1M=Jcm9bT%+a}X>hn+dJ0(>SWkMN#0Aa(}| z__-g(w8spK^xu6oUlRzk;vqs76^t)s9!Z5J=GEy}QBrKZS z6H?uCMr4}tO{7N09vUS%z%ZvO?cC56>$9{bTE8p6#6V*Nqn zdDD~S#}>RraY+N%oOoZLwZriAw2-C#d)ul*j_}lCfI?U#t{v=qzslWKz zI-fjg>S@$CRYt0l3FWF1T!-Wl@y1QqAx97vCA+7tY{8VoCe_#t^co%RBXdPbmJpK1 z9Gz=pe+K}1HaUJ);&-Ot+{>l3%c$hrx9^GL=gZAXe)JPyD_=&>%f5R}?TTH1ximrZB&1_22YrH0QN~p;>BAEJ zKf|2`T`qV#WE1X67>!``0Bj>j$x5!vL=5Y6#fz3ie~k7>8w8w!WwM;Ve_IQNV3@LG zzeYYDk}mkAeCM<3SW9S3sE9kLHs^G~5uJsI{V1?7gZxqnTzVzhxq}zpNgcH%vQzNz z#Y-7mm|4EN7%3>l%yc#Y?l|9zxuiJNvQ z*pu&*{poJ*6r(9FO{%7E zZlMVQb>I=yqxvJRAS)Y>_mFO?k32-E*ZkO3lu^5^ImYHtiLLrJqgbu!p_>BAgvqTt zKC4MnDIy#xr@t9?oBnRXzUbVm>_Rv@gjFuI*-z3jc+)eNf>>08{V)Dd%mY05&vT`Hn^ySaBVvw%W2J zq+m@YMS!WiyP`u+!X|f1XvDICJg+5K%Vn2H=TdX9MjV%IlcJJkaGz8)(R4(Jv z8`&O11V0Ixrt5)=0T^w`M8%y$Fk!SsjY%3rYQW*CBrqy4Pk1%fB6qYYZ1E z50W8m$m}8TNQ&;hSAaUW0wNl*O1+I#fjf%3>m7o)1N_mwk*YLir_ZU?2-XRGlToe0kcOPD)9DhkS&O2dZQOb1b6u+V5+6{+U}CoRUER3GAHu7>^muI@QtI@LaYd z;-icVi#>#rXhu>aY{og5aW1N$g}xPDlk5-!qE>D^T!V%qa*a@35NzZJuzs4b5fzOj zK<#h>D~1fME=hWuyW)^>bjrwgczNi$FlM$#l~ZY?AYRXcW?ThhD25cp0J+{67U_`0 zJ0CDCABY74*98xy=#^-GMRnG&y8tS_#dg00AHp5Ry%n=#FI&twm z9|Y$Kh3b&(19y5DGUP!%CpA57QA^#|Y3OC8o;&5FggAX(%Bl}$m_rDk!tsfzqVSlOSrW`F+h2Fz(37M6&lG zS)U!lRpHUIiIw`n0-7Qv=t-8xgXrZ^9_?O^0P2Ric(ms!BTfWSrUoaPYY`3Qz+@@j z{uS_%b!KFBvklcXwP1(lqwcmwlG3_Z!K?8tOwJJyx}Xr9Tlh#`CAefnI)EZ(HCPP5 z1Q_%e*Z|EopWefy;%4cKZpdtXzZfBjMG!+my9n=^3pN5z#OQ;y>0E4GC>X%=d0JCVW&0O%rcN7i@-&d;LbYG zBO%%Up^APTQECo0_U{n)v?Dl4hh9|(7a8#l*{`tH!iWg5g=weHmeoo` zvQreA!#JBB>L^rRe+yqN17Gft9ZWpq$NZh!|H@6YVGa23_$`2dOtYjT5xM&LxgUYy`2-j~>hoTwLH&Pic>9`uU-Ftnys3a79 z=szGj`A~UL{iUB6oa9Z{9EbN|b@sD|RJJxo=8}tn_9Y>5sLNO3=eXh_(gR&3<331q z6nDiZL<-U9j3ll-w-EX}#aH52QsqxmbBH8>7>bMcyl z*80mpBlDmaxQe7;FZd)-d5g3Zyp%&2K)Cce1_z(qVH!eStX$+GRXC2Fi2E6~=awEf z1(i}cKESa?xfYo@U4^or_+BgG>_xYg$0Qy5!n&oJGQSP`M0OHtaU;F3l;&xU2KRK- zYye>yKQ;_!z6SZbnYwE|{Bw~37x(M%n)WJ$R05_x4{RE}i}hGX%kODi=#TnOe$u}S z?>N>yME!s9I?n9;p<1&;a2m?pWly(S?Au}J6z{pcRI%H^p`=;#p8=tB_O$Z4LTa75 zK*=k!=4wcOfAKl8v;9-mP2dff9|Sxvm)?5wiw1Nl&1YhWH|ik*5Mv~53o7`BBYw}F z#M$ehB0Rc)DFOA;U429E%NKd#E^wBK$lrYI8JTv=LzSJkz(()nzx( z7^ewy3)nFwh}%n4fWS5Zp3Hk`O(hjAgujYl?yG+D+1p?oRS8u(k|ypBea!2;$h?Z| z3vNCXqopxMXkY`N1!B4{35bAU!+lDwp?h2UX!FG*K1ucU6jl)+rL=nxEjJPcpVl~1 zQ|UTL{MW4S{D^eQrU|AztN12yvuh=pjRt^`MnzX<$m(>cVM!ol`=}oX=G{L#;X}#I0QIin zB!ttMaa{W<&xdbI{-bRZp6_)crYIfOA<;?qIX+yJUaJl&8jpZ6a9i{1>VF&uSUw8W zbV*L~4sT-?1$%$iis-a1ecmQAeWIYm=BBy?A@wUMmI^Vp^TvUTuCmg@5I2p@u=A8b z-PIcYA$Q04zfiINle_yD0Q>*9+}*#xNB=W3_9e7UL~BnE(p@Akzxb?=Mx zvM>b>#ob_M+2BK4;8&^tCCypkZ@t_(Cwxdx4i7gvlzInO114OkP*|3xO=N0j^YH1i` zawBMXy5ox|rBvS!o|7E~Dog(R{dO7)mnlewWO8p!&neKN_n+R8iJO8cU7sj*_m5b!rnjiy{?-67qCpYVqa{wCS z0LhXkoQC?$fLPb{IHhM491Qij?8;%=0#u~3D*m|en(U07logylD1w}fRp~&@dp8E1 zsI;L+VnA3E3PZ>GD`BWft-HRo#nH~3?T71TrLQlR&9LdxP%={wEgTf?vTu~2^jHt}>Hfw1&^ofZ z_>oCySYA2uXtmO6!(l+p!1PO_z8iq7OqkD?2qRddr<)`m_@Jo-Ej(eErVNpS zKRY>&irvGeL^G8m!2@_+0pIQfHLxOKv0$p00rVU%!BL1w!phbH_1TOrwF@8m?TY@m ziCqJp7jq4k!k2l}&=w}kYFv1Hv1|-&+H1ESLFPGoU`5nk?7x@9E)DLk1zp@fP_Rbkzz!!PH zhb;+>vF}Bz&ZU}WUw!H%V}a0cZ40YoAuK+)TY#hO=*%G{S;fvXnv|Ui=;B8q9|59$ zoV79cEq@%hCY0{(&SL|cR4U1B&AEZ<{HBSdLdyw%|Ju$k*}#x zr7!S%u?Ze(C#S)fqOd!ydZSnL+}E~2oW1$V5KTMSZeV?v2Gu2E=oY|y5!hzwYx?-| z$W5RB%HICC+XijT;1zc`>mCLVsM`*;=H{Z>ld>4(=w`b5DKzO`2;0Jq=4_$Tdz-r zH|3Jvx#IC`+L1bLMe7dL%%3j7?-MA>L%NeN$Q9yJS#Wqg;{YoHuA%Pc3%Km;-k~wL zAr4p6+}bY1OmVn~sn^P*T<{Hsq;sG3ERx^Z5ki|%wG>73w-73>Ju$YUROEF+t-W`5 zkh%)_d8M-$_X|VWU4s|9S}WBt!eO!8Gk-=&iP`CZ&2pc+uK^zJlfpX$@g%;aTO@N0 z5AWFP5CWB}t_uU*^`b@daA9XWkpnMRt11@ddKnTumM*4TzM+#>ndBzY1*CexpcPmB zQ_Gl(*R;Zl$WxPi0K?xj4o$BB#mcXtRakQB7YWuAA&EiQrl4S!!JMDxL!*AlR7w~I zaE2iZu!xbT;?ez(A%{m7va*IJF}$Pu;O!Fa-pAd|!|5WygYnCTZP95@k#g&R9b`nx z&qy@{d_5lFyRnFlf^gni(4qVt<=7}4ky4wsaMPp;Pd^*GGt);JAq*Gc?Y&X`c;bob ztTZBYPT79Qd*^{Za>>3=XU+G7eFO|*LiBpES~2sizm#Q+t(x{zmq?rG3IHRnRa(0k zHj$dU-z)t@lLfn;rkkbf_oM{r2XdRA5WLXk!PnW|O?2hh;m4touJd zxTl*UVSvaDS*@NWR*-0No%GU4UL>|iHKiM$W|4;Yyn3EZfoZ^&*+?zxMSEt&@mGtL zhNe2wL+{@qYl2zbRlyM501g73Jnr3EGwm4q=(ozru-VSR2ummDvZlrrjZwzb@P~sh z1#`@vqK1hHmr6#tHvZ2PNL+ zp?-BKR*wwpPs^Psn2k#9mV*QVj}P5{_+{JS#W+QWoF$gk#5qo{fn|%Bes(EG(4)h0 z$)rd9LXHD1U6KiM;K8e?S=7hiS5;6o-(#UY#UXXF#D`4a>o*5&=o)i6w&Uu3gJje) zr;v`yVSPAsF5&{h=Ma_prVAw}nc|d+XBy82yL57pLj(h6xlBQo=&dkR{5GOh+JPQZ zTW0VsbD4D_=H+2WsCK>k!lpM#hxY-DlV1*y*Sp93w#qMoi$Jq(T6BndS1mK|)2SVt zQtCG)etlZ{{V1+E&I~bzuTUqcuCfG(;fCFL;Z2==njQKeG-S{S7h78$*_L$^r+<@{ z+-}TO^W-+#|MFw%Q3}Gw1ik~Uv%_F;LQ^ZPzy_q7uca2osC)PmF@LeTC`y#a>60jk zxO^TX3tR3|*z#1O7N;^1xzlJe(#FLE7*tKFcdLB`9>w#B;2Qjq(CAsytFO$CNx`HU zmH34f9Kl&N+t45WyMb)58%-nzSO8JD!zHWwcGrS4U?sEs6*bI5Y<#I>z z)BYld2VD!B(nDkE)6?WD>#{{K+-FyYbEku)CQH+tzh+v zI)1;Yw$20rBrY}M2E=66a8iU@2`Wpte%bWot0O$*?Q`%5lJKpHeM5D|I^d)?UK*NL z5a9u*i`F&8Z4f@t2Gyr*W>he)vy7xzqYTWwUpS9uzAMRN0Z!e&)epwH>CjfN^oWgV zSv*?D`Dgbtrwa2A9c9&^38gMnEkyd0unY39W%>ScEUw+efno7Hp}5S);oL$f1ts^# zXgM@N;Ev6vXmxp+v)T3}v^n{Tu#Mzj6T6phpw)gcq-7dy<`D1N?V1xTQTuvnm!vHYBW8G*gdZsjNinV=2{D&mHepR6R6wy zK2`6wP5>@)PO1pwy8s~+vk!6d3@l!|UU@NmU;|=zA3s+7r^zeRUqI*o{v3s1704ii=w5$WMO2FH`jyAd0Pn~py_PsPL5d=|x$(!7Pl`Tl!>G~;q z#g2F?64R#Pyn%4Mmn(@9kIogj@^YWYv_Mw+euTE!H+jfM*F6}jn6>uC!5~9*s5%Ki zuM+UJV`!SNwVr@}aTrW{YWo0{Z^@NYDQoOe;L5>oO2Nd^kZF81iu+Sr6Vj;AB#B=l? z-L%UWcI_!^C-j5BNA!TFYaucew!ZBTtr_#E`N=br>D(Li+ITv#LU43P<~B2%g6}^v)l-h#WDIbo zwIFN3`rcymyJHU-)V`{(#tdmiC}=mRnXswV(lMg{n9=~QGt6igSN$=`K*85G(E;db z`NOsQ_!MtdLkvP~vsLS0ELQ@`D#bvSY>&$J?4}cs#elA;`SzO6U}Lfcd_~(|%Da;3 z8VcubrCm)yHdtvGkF}<0gf`RNH+*ET_IV~NFaZ`CN&b2^BV5VPW3y8*7BF%Otv(Ht zu9Pa^E)pit04lrZ-IL7|;1z^~b5lm>59~3Kxy$b8x2IU6hl6~_o~|EnVg6l40D(Wg zNC(N&Tso~PLoCVIjP~Vfy(LArH`)wOC+7do_)@FiUuSauTG6YIcUmMi@d^>%&-m_= zAoQ9SwwNd)u=%~{fV&sIo~LJ4wk9FA%Ja8gc?L;Z6vR-UoSG$y8ruRT6~+$gZxe$` z;iY+bJ>yg%R`g&&sg5tpY>Zcm^TxeBn-V$ZM0{u8rg0l2#9+#@0A|!OJ8Za?5y#3A zaY&G^4#~hDN2-O{)|TVqStzl0Hqzy+`XJT*;zVsPEB2na&^6)19j1#Ly-<-2M15Z&4P7exu}5gX=|hV$l;nthQtOAy=gH&~~p?OTqb_XU>he+MCVqr!FGm7A;Aai_l|2eMJdRd16V%r@5QsB&tfa)8Vr$w>*&DuXrRQUTrV_oxEIZZcZ4LRZ$94 z2%7mAlV$);QnsU8M70cw=U6+J`(Xf2EnK*@w_5s8Xl#5Bd56-`v_6D@e$t4oJED)O zMz8(cr>s!1$)Cfpb&CGFbSlGVFetnJEMDRtcHf^o@q3J#JVzUn`nesWx@&h^_m>@# zGn7N3KgRxh{a7i^tGt~OU%H^VmC+rBBNYa)NaE51j_N^rUYKSID!__v8RlUnlvPp8 zE}(pmXJT-aHyGxCbxu+1HT0FC99d+qfGEe?`D9n4_9Ut&?nk zAy|G8_E%|b>v5RiQCZ@cokW(FUX0myAgUhwgliB?qDcFJ1{>|jCo&x#Jx{8IHDCgG zK(JXHCW_>hgI|Ne>nS3*(G>!<`+$(B1$$BQ??-d=xx3j4Dw=rbA#Bvs!v*W!Ih{l| z&Q?`3m2=Y>TxQcq;q>EHcAb#kUiAGyyYLmn+Y8Lgri!F#unwluRMS~rEW&N+ip;+q zF7U6DR!FB#Hd%J_CIG!lxQfI;C&JN*!|ZT3e=*!cKSSFfOC;gyncHk37}>!pJGZ`? z;R?oG#G=)0S9>))_;di5u}o{`AnCNimvKk%A*j8En{;b*pJHnijFDY99Q!9`S3 z@JvAjltd8K5qgM_b~HkPRqIz!H`05HnHW4 zybZlb@6>V)YDUU-2^njo7X|rPFOXy)&zGrI9MZ&T-}EIZNx0fr6Z8x-%0!MY^w%ob za+!821nst37OVS>Hoo4nl3`lA}I8GP3COMn1{)v$h`bo?FW~s1+CN%cz2h zIU8;uE}bhXeL?`0^I1^g<8z?(sNre4YZu99)-ld|4+u`Lt!7wK1dTAo70`IZ8-E#cl@qFk}J>e2DNCimu6}ie86qN@97_o0@;ky*( zVcve=9*0$v%lw==K&G_f9Z0+)@W<{_?0l-kJ7sHDt}hVd+oqxWL~}}7o*mQP_P5C- z@M_a3X&X8EUEaYP3ej|Ae|fgkrcQZ74`+tHp$2}o)9cIr3jGJ*xtXIz4V{jO;)kSy zUk26*p~c1MsMB;Np@e2oUU0|@_xaluT=iUVR3{_6HKM#X*MA0tDSP^-{t8alVoY zj4O_Po-l6e?roZ2W)rVm@O%kLXcn8boA{g)YXIe+Z-=s<>#nScyc~}KANPjEK_-dv zIKGq{%;ZYI`Nd?al0n`NCiVWu&vqXV4s9{jeoB?Zqc~d}lu}V@P2pv@S>_m8Xb$pvWIdhLVSB(6T=b5ETp3N4cp~og@4Ilpdw7A3%h2-n|buP-Y z04}Sk`@meJ!J8Qz6>@wuO2Vs^!(U}}1+eMsfaMDDb(bCyy79qt(Zib^?*BDbd zt(&zto)5@_UjU7sZh2utXJE8CY}=x_%m!4s9(f^uLW5#T*uC)KEIN;*9*pM5!aXwO zKcp6CZ%3Zx^V0?bPOqf8Qh?Bd$Y0z(fHoq~4)vs$>p;*^<4uV@88(6y`X4lNddt-L zU{3}eoqh098aQ$n2l;B;7O(TL^Skxvf*6+5Blvf>S8q62QJ)P6mQTZCn>}jhR8=i} zAFFzA{sOd!z5;DJLCTLy!#v&de=42wD`Id{b-E~DhP=AcK%nq}J5zf_z8QxJ^X*_s z+6$OV9Fy1KQZprp=WMGuRKHdQwy};wHO8M05UjR0B}p%4DCl_;300qpsQiUusQYMI zfmw(WU?BhGRMH0RjOr{{d`P|ksMqL5dL?6xb_`(Tmsk^RB4Nt&d&wsWWfx}`4Xzj^ zWDXVzX`KV_^X++4cV2a}MOwHEPra@asouB+RRQb&iDR4zn>Zf~r?NI?h~#S%j-N#z z%b|A2xMM_8r5r&2l5VHpCl$b1wHHfsH&+^bEy(77>eLwR zN!*U_sCG3Gv^X^=&q!??!l?X_&BxsEE|Ev8BuHVz9?#EJE+6TcRzI%5In*t9(~xM7 zYy)7h;?*`-Zhhv)c7_YC_r_EnK#WG6wuofYCpNu+DIYsU$S$JED>=BU;9(*1P(Jtr z2>ims{JX#=ZWhDseuOOOhvdZUTKpILULnf{wf<>(TTiSmzn3Emn<{PO(+LQcjt+#Q z?iu-WBjZ22O zFlHcC;d$*dzx9w$1&E*`ft1}eDyNdz2Hv%<8ExfU>>dp)2lse;t^7L;-@8i2<^l|Z zOx|k%Tn)!ux8#}pK6Skk>7mA+Hby#cYR%ve=mU9`yeth&{ju*09zeXB|5l}~mUyMT zDjcGUzGpj2eVur;(X2Oq{KPbD#E1i`X$G{J^)}l2mn6iv+$Q6mx4iOh=Ywq_7EI+g z8pXJ(86iHP1HbG)G?A^H-Ob^2$e$Tas?YH_%1XdDK0Ks6xk|KC#MWt7wq#i(1MbuM!}8mHW|XE@K(P-(TB})lY`KKmimU=kf`gLV#;NoxU~hvh^($;#FcVj$YvWh4 z+cxvuE>7%8-FlNhK&oCl@mW_Vm$R3}G^yM}j!*+YFQx|ChZ3bVn>>$E?qv4b)K4{d zl1PBDr4(akG#Og3a*6HL#Fr3O#5a2*9jHGa(%jOzi*rA%aJYq?TYA4YdJs`$nbl znNcqer`}LT=5t2 z^%n;;sDntS@j;}X0Vh;Z3s|=kDAxQNy}-tm@&G0_dQku)69W@FE4>_monGb7B^CxYdI^9wfR&j6z{Je1%f|Z`?n4eQ)7D*Qw2jOTj$>zh3#!zZS9-^tn>;_rY4rgF7{5p74h-Wi`p4G zc{;cNm{@*`D$$Es+PIiH(Tmv_x|se~5A>2E+B~A1oD7_dV$6&Tf{aXTEDW4%3}Q^I zVj>LeVhn5|3?h6y%$!2Z%z|vf%*;aULM$vyg3OE@LW~?@f=q&J>?|UJe7f|Kb|$7C z+Q04adlJ8YnAroEnEp~KV`^vaVgX=e;P^8-xBr?nJH3*<{qJ$H{?$bJx3K_h4D>3V z4yN=PN~UJ?>e`F|W&q=Fb2z&=nHt){!&qz^8JQR$85kHD7T>B{uK96g9ZR&hP;yCn|jmlq5sa+=C*;UZ4wF)lme@OQXlfIycj&pzdZyG!^-(@@BEXU0gN0R^#8I2D=WS7Zx1p4dwM$dWcAq>r-?vi?S~Gd z)w)hosp+TPPxnDM(siOcvq=cGUW~D_=6vDLBWkA%4tj?7FW%_8_*76Qrxaki!PbZc zSiGnuWdn=~6Cz<()J`}rNA!nf^iCuTXjcT|wApu7mV{+VF#ykAWd1AtD#{2mS4k8% z_QY@3;k#0Y$c)uUc6F%rd`UCNR@93NK0nDvvu3{DO%J1{js1f){=(DWa2FQ)jX-4= zlfU+Yt}Yg$Zl-oF^dk1g@(!kU^ul7Y^lD81J##j`-`l@{sO(~BXJY7N^50jPIOydm zk*VM2k_{kq?7$n0eRjg`RN5T9qG5lgq7(|}`iUCa&Qj4U0B9MRSs3V*04%>%+lu{{ z{@>qD|2kBq44%K;*e@BQd(RH7(}S(}4)p)osOZ%IEdLI-zo7W{lw?g^3{4DO41Z(w zFMKK(nw!cPdfL0X(97GI{#Ufo|2gRlU}F5M#b3x3{w-o-Z~h;B{zt?L+uOPPwu`g& z??C?@ivZ@o1Od!{1qp!p4}bhV`B$6*nEz4>VE!Zi`y~6Hoi4qwlf8qGy@xgf-R~ZL ze^@zL>3)lIurShbGU?KbJK4KB09ZNxG^UsRO#_DiL*w7f@p~};8oiRKv%Ra6vFYDj zV(+BvU}$Xmhgg&u04#s0|9!{^VEL=_KfL1MBL3TXE`QpH|7r6F{7Qcu`+JtZ >V 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⎻-tUSZ|(H0NjqB5L}S~$db>mU`T|jN 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 Dw3!jg literal 0 HcmV?d00001 diff --git a/STM32F1/libraries/OLED_I2C/License/License - CC BY-NC-SA 3.0 - Summary.pdf b/STM32F1/libraries/OLED_I2C/License/License - CC BY-NC-SA 3.0 - Summary.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b35e677e66c08dbb9caccc1c135051624b16b0d7 GIT binary patch literal 109586 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%0Aw`tglGsl`4d>k#@@?6B) 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 g@OZxgFA`CAsDFt1M#e8bpQYW literal 0 HcmV?d00001 diff --git a/STM32F1/libraries/OLED_I2C/OLED_I2C.cpp b/STM32F1/libraries/OLED_I2C/OLED_I2C.cpp new file mode 100644 index 0000000..8b59f9d --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/OLED_I2C.cpp @@ -0,0 +1,862 @@ +/* + OLED_I2C.cpp - Arduino/chipKit library support for 128x64 pixel SSD1306 OLEDs + Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved + + This library has been made to make it easy to use 128x64 pixel OLED displays + based on the SSD1306 controller chip with an Arduino or a chipKit. + + You can always find the latest version of the library at + http://www.RinkyDinkElectronics.com/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#include "OLED_I2C.h" +#if defined(__AVR__) + #include + #include "hardware/avr/HW_AVR.h" +#elif defined(__PIC32MX__) + #pragma message("Compiling for PIC32 Architecture...") + #include "hardware/pic32/HW_PIC32.h" +/* +#elif defined(__arm__) + #pragma message("Compiling for ARM Architecture...") + #include "hardware/arm/HW_ARM.h" + */ +#elif defined (__STM32F1__) + #pragma message("Compiling for STM32F1 Architecture...") +#include "hardware/arm/HW_STM32.h" +#endif + +OLED::OLED(uint8_t data_pin, uint8_t sclk_pin, uint8_t rst_pin) +{ + _sda_pin = data_pin; + _scl_pin = sclk_pin; + _rst_pin = rst_pin; +} + +OLED::OLED(uint8_t data_pin, uint8_t sclk_pin) +{ + _sda_pin = data_pin; + _scl_pin = sclk_pin; + _rst_pin = RST_NOT_IN_USE; +} + +void OLED::begin() +{ + if (_rst_pin != RST_NOT_IN_USE) + { + pinMode(_rst_pin, OUTPUT); + digitalWrite(_rst_pin, HIGH); + delay(1); + digitalWrite(_rst_pin, LOW); + delay(10); + digitalWrite(_rst_pin, HIGH); + } + +#if defined(SDA1) & defined(SCL1) + if (((_sda_pin == SDA) and (_scl_pin == SCL)) or ((_sda_pin == SDA1) and (_scl_pin == SCL1))) +#else + if ((_sda_pin == SDA) and (_scl_pin == SCL)) +#endif + { + _use_hw = true; + #pragma message("I2C HW mode enabled") + _initTWI(); + } + else + { + _use_hw = false; + pinMode(_scl_pin, OUTPUT); + #pragma message("SCL pinmode OUTPUT") + } + + _sendTWIcommand(SSD1306_DISPLAY_OFF); + _sendTWIcommand(SSD1306_SET_DISPLAY_CLOCK_DIV_RATIO); + _sendTWIcommand(0x80); + _sendTWIcommand(SSD1306_SET_MULTIPLEX_RATIO); + _sendTWIcommand(0x3F); + _sendTWIcommand(SSD1306_SET_DISPLAY_OFFSET); + _sendTWIcommand(0x0); + _sendTWIcommand(SSD1306_SET_START_LINE | 0x0); + _sendTWIcommand(SSD1306_CHARGE_PUMP); + _sendTWIcommand(0x14); + _sendTWIcommand(SSD1306_MEMORY_ADDR_MODE); + _sendTWIcommand(0x00); + _sendTWIcommand(SSD1306_SET_SEGMENT_REMAP | 0x1); + _sendTWIcommand(SSD1306_COM_SCAN_DIR_DEC); + _sendTWIcommand(SSD1306_SET_COM_PINS); + _sendTWIcommand(0x12); + _sendTWIcommand(SSD1306_SET_CONTRAST_CONTROL); + _sendTWIcommand(0xCF); + _sendTWIcommand(SSD1306_SET_PRECHARGE_PERIOD); + _sendTWIcommand(0xF1); + _sendTWIcommand(SSD1306_SET_VCOM_DESELECT); + _sendTWIcommand(0x40); + _sendTWIcommand(SSD1306_DISPLAY_ALL_ON_RESUME); + _sendTWIcommand(SSD1306_NORMAL_DISPLAY); + _sendTWIcommand(SSD1306_DISPLAY_ON); + + clrScr(); + update(); + cfont.font=0; +} + +void OLED::clrScr() +{ + memset(scrbuf, 0, 1024); +} + +void OLED::fillScr() +{ + memset(scrbuf, 255, 1024); +} + +void OLED::setBrightness(uint8_t value) +{ + _sendTWIcommand(SSD1306_SET_CONTRAST_CONTROL); + _sendTWIcommand(value); +} + +void OLED::invert(bool mode) +{ + if (mode==true) + _sendTWIcommand(SSD1306_INVERT_DISPLAY); + else + _sendTWIcommand(SSD1306_NORMAL_DISPLAY); +} + +void OLED::setPixel(uint16_t x, uint16_t y) +{ + int by, bi; + + if ((x>=0) and (x<128) and (y>=0) and (y<64)) + { + by=((y/8)*128)+x; + bi=y % 8; + + scrbuf[by]=scrbuf[by] | (1<=0) and (x<128) and (y>=0) and (y<64)) + { + by=((y/8)*128)+x; + bi=y % 8; + + scrbuf[by]=scrbuf[by] & ~(1<=0) and (x<128) and (y>=0) and (y<64)) + { + by=((y/8)*128)+x; + bi=y % 8; + + if ((scrbuf[by] & (1<0) + { + buf[c]=48+(num % 10); + c++; + num=(num-(num % 10))/10; + } + buf[c]=0; + + if (neg) + { + st[0]=45; + } + + if (length>(c+neg)) + { + for (int i=0; i<(length-c-neg); i++) + { + st[i+neg]=filler; + f++; + } + } + + for (int i=0; i=0) and (x<128) and (y>=0) and (y<64)) + { + for (int cx=0; cx=0) and (x<128) and (y>=0) and (y<64)) + { + for (int cx=0; cx=0) and (x<128) and (y>=0) and (y<64)) + { + for (int cy=0; cy=0) and (x<128) and (y>=0) and (y<64)) + { + for (int cy=0; cyx2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + drawHLine(x1, y1, x2-x1); + } + else if (x1==x2) + { + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + drawVLine(x1, y1, y2-y1); + } + else if (abs(x2-x1)>abs(y2-y1)) + { + delta=(double(y2-y1)/double(x2-x1)); + ty=double(y1); + if (x1>x2) + { + for (int i=x1; i>=x2; i--) + { + setPixel(i, int(ty+0.5)); + ty=ty-delta; + } + } + else + { + for (int i=x1; i<=x2; i++) + { + setPixel(i, int(ty+0.5)); + ty=ty+delta; + } + } + } + else + { + delta=(float(x2-x1)/float(y2-y1)); + tx=float(x1); + if (y1>y2) + { + for (int i=y2+1; i>y1; i--) + { + setPixel(int(tx+0.5), i); + tx=tx+delta; + } + } + else + { + for (int i=y1; ix2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + clrHLine(x1, y1, x2-x1); + } + else if (x1==x2) + { + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + clrVLine(x1, y1, y2-y1); + } + else if (abs(x2-x1)>abs(y2-y1)) + { + delta=(double(y2-y1)/double(x2-x1)); + ty=double(y1); + if (x1>x2) + { + for (int i=x1; i>=x2; i--) + { + clrPixel(i, int(ty+0.5)); + ty=ty-delta; + } + } + else + { + for (int i=x1; i<=x2; i++) + { + clrPixel(i, int(ty+0.5)); + ty=ty+delta; + } + } + } + else + { + delta=(float(x2-x1)/float(y2-y1)); + tx=float(x1); + if (y1>y2) + { + for (int i=y2+1; i>y1; i--) + { + clrPixel(int(tx+0.5), i); + tx=tx+delta; + } + } + else + { + for (int i=y1; ix2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + + drawHLine(x1, y1, x2-x1); + drawHLine(x1, y2, x2-x1); + drawVLine(x1, y1, y2-y1); + drawVLine(x2, y1, y2-y1+1); +} + +void OLED::clrRect(int x1, int y1, int x2, int y2) +{ + int tmp; + + if (x1>x2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + + clrHLine(x1, y1, x2-x1); + clrHLine(x1, y2, x2-x1); + clrVLine(x1, y1, y2-y1); + clrVLine(x2, y1, y2-y1+1); +} + +void OLED::drawRoundRect(int x1, int y1, int x2, int y2) +{ + int tmp; + + if (x1>x2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + if ((x2-x1)>4 && (y2-y1)>4) + { + setPixel(x1+1,y1+1); + setPixel(x2-1,y1+1); + setPixel(x1+1,y2-1); + setPixel(x2-1,y2-1); + drawHLine(x1+2, y1, x2-x1-3); + drawHLine(x1+2, y2, x2-x1-3); + drawVLine(x1, y1+2, y2-y1-3); + drawVLine(x2, y1+2, y2-y1-3); + } +} + +void OLED::clrRoundRect(int x1, int y1, int x2, int y2) +{ + int tmp; + + if (x1>x2) + { + tmp=x1; + x1=x2; + x2=tmp; + } + if (y1>y2) + { + tmp=y1; + y1=y2; + y2=tmp; + } + if ((x2-x1)>4 && (y2-y1)>4) + { + clrPixel(x1+1,y1+1); + clrPixel(x2-1,y1+1); + clrPixel(x1+1,y2-1); + clrPixel(x2-1,y2-1); + clrHLine(x1+2, y1, x2-x1-3); + clrHLine(x1+2, y2, x2-x1-3); + clrVLine(x1, y1+2, y2-y1-3); + clrVLine(x2, y1+2, y2-y1-3); + } +} + +void OLED::drawCircle(int x, int y, int radius) +{ + int f = 1 - radius; + int ddF_x = 1; + int ddF_y = -2 * radius; + int x1 = 0; + int y1 = radius; + char ch, cl; + + setPixel(x, y + radius); + setPixel(x, y - radius); + setPixel(x + radius, y); + setPixel(x - radius, y); + + while(x1 < y1) + { + if(f >= 0) + { + y1--; + ddF_y += 2; + f += ddF_y; + } + x1++; + ddF_x += 2; + f += ddF_x; + setPixel(x + x1, y + y1); + setPixel(x - x1, y + y1); + setPixel(x + x1, y - y1); + setPixel(x - x1, y - y1); + setPixel(x + y1, y + x1); + setPixel(x - y1, y + x1); + setPixel(x + y1, y - x1); + setPixel(x - y1, y - x1); + } +} + +void OLED::clrCircle(int x, int y, int radius) +{ + int f = 1 - radius; + int ddF_x = 1; + int ddF_y = -2 * radius; + int x1 = 0; + int y1 = radius; + char ch, cl; + + clrPixel(x, y + radius); + clrPixel(x, y - radius); + clrPixel(x + radius, y); + clrPixel(x - radius, y); + + while(x1 < y1) + { + if(f >= 0) + { + y1--; + ddF_y += 2; + f += ddF_y; + } + x1++; + ddF_x += 2; + f += ddF_x; + clrPixel(x + x1, y + y1); + clrPixel(x - x1, y + y1); + clrPixel(x + x1, y - y1); + clrPixel(x - x1, y - y1); + clrPixel(x + y1, y + x1); + clrPixel(x - y1, y + x1); + clrPixel(x + y1, y - x1); + clrPixel(x - y1, y - x1); + } +} + +void OLED::drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy) +{ + int bit; + byte data; + + for (int cy=0; cy0) + setPixel(x+cx, y+cy); + else + clrPixel(x+cx, y+cy); + } + } +} + +// Private + +void OLED::_sendStart(byte addr) +{ + pinMode(_sda_pin, OUTPUT); + digitalWrite(_sda_pin, HIGH); + digitalWrite(_scl_pin, HIGH); + digitalWrite(_sda_pin, LOW); + digitalWrite(_scl_pin, LOW); + shiftOut(_sda_pin, _scl_pin, MSBFIRST, addr); +} + +void OLED::_sendStop() +{ + pinMode(_sda_pin, OUTPUT); + digitalWrite(_sda_pin, LOW); + digitalWrite(_scl_pin, HIGH); + digitalWrite(_sda_pin, HIGH); + pinMode(_sda_pin, INPUT); +} + +void OLED::_sendNack() +{ + pinMode(_sda_pin, OUTPUT); + digitalWrite(_scl_pin, LOW); + digitalWrite(_sda_pin, HIGH); + digitalWrite(_scl_pin, HIGH); + digitalWrite(_scl_pin, LOW); + pinMode(_sda_pin, INPUT); +} + +void OLED::_sendAck() +{ + pinMode(_sda_pin, OUTPUT); + digitalWrite(_scl_pin, LOW); + digitalWrite(_sda_pin, LOW); + digitalWrite(_scl_pin, HIGH); + digitalWrite(_scl_pin, LOW); + pinMode(_sda_pin, INPUT); +} + +void OLED::_waitForAck() +{ + pinMode(_sda_pin, INPUT); + digitalWrite(_scl_pin, HIGH); + while (digitalRead(_sda_pin)==HIGH) {} + digitalWrite(_scl_pin, LOW); +} + +void OLED::_writeByte(uint8_t value) +{ + pinMode(_sda_pin, OUTPUT); + shiftOut(_sda_pin, _scl_pin, MSBFIRST, value); +} + diff --git a/STM32F1/libraries/OLED_I2C/OLED_I2C.h b/STM32F1/libraries/OLED_I2C/OLED_I2C.h new file mode 100644 index 0000000..4bde83f --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/OLED_I2C.h @@ -0,0 +1,162 @@ +/* + OLED_I2C.h - Arduino/chipKit library support for 128x64 pixel SSD1306 OLEDs + Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved + + This library has been made to make it easy to use 128x64 pixel OLED displays + based on the SSD1306 controller chip with an Arduino or a chipKit. + + You can always find the latest version of the library at + http://www.RinkyDinkElectronics.com/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#ifndef OLED_I2C_h +#define OLED_I2C_h + +#define SSD1306_ADDR 0x3C + +#define LEFT 0 +#define RIGHT 9999 +#define CENTER 9998 + +#define SSD1306_COMMAND 0x00 +#define SSD1306_DATA 0xC0 +#define SSD1306_DATA_CONTINUE 0x40 + +#define RST_NOT_IN_USE 255 + +// SSD1306 Commandset +// ------------------ +// Fundamental Commands +#define SSD1306_SET_CONTRAST_CONTROL 0x81 +#define SSD1306_DISPLAY_ALL_ON_RESUME 0xA4 +#define SSD1306_DISPLAY_ALL_ON 0xA5 +#define SSD1306_NORMAL_DISPLAY 0xA6 +#define SSD1306_INVERT_DISPLAY 0xA7 +#define SSD1306_DISPLAY_OFF 0xAE +#define SSD1306_DISPLAY_ON 0xAF +#define SSD1306_NOP 0xE3 +// Scrolling Commands +#define SSD1306_HORIZONTAL_SCROLL_RIGHT 0x26 +#define SSD1306_HORIZONTAL_SCROLL_LEFT 0x27 +#define SSD1306_HORIZONTAL_SCROLL_VERTICAL_AND_RIGHT 0x29 +#define SSD1306_HORIZONTAL_SCROLL_VERTICAL_AND_LEFT 0x2A +#define SSD1306_DEACTIVATE_SCROLL 0x2E +#define SSD1306_ACTIVATE_SCROLL 0x2F +#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 +// Addressing Setting Commands +#define SSD1306_SET_LOWER_COLUMN 0x00 +#define SSD1306_SET_HIGHER_COLUMN 0x10 +#define SSD1306_MEMORY_ADDR_MODE 0x20 +#define SSD1306_SET_COLUMN_ADDR 0x21 +#define SSD1306_SET_PAGE_ADDR 0x22 +// Hardware Configuration Commands +#define SSD1306_SET_START_LINE 0x40 +#define SSD1306_SET_SEGMENT_REMAP 0xA0 +#define SSD1306_SET_MULTIPLEX_RATIO 0xA8 +#define SSD1306_COM_SCAN_DIR_INC 0xC0 +#define SSD1306_COM_SCAN_DIR_DEC 0xC8 +#define SSD1306_SET_DISPLAY_OFFSET 0xD3 +#define SSD1306_SET_COM_PINS 0xDA +#define SSD1306_CHARGE_PUMP 0x8D +// Timing & Driving Scheme Setting Commands +#define SSD1306_SET_DISPLAY_CLOCK_DIV_RATIO 0xD5 +#define SSD1306_SET_PRECHARGE_PERIOD 0xD9 +#define SSD1306_SET_VCOM_DESELECT 0xDB + +#if defined(__AVR__) + #include "Arduino.h" + #include "hardware/avr/HW_AVR_defines.h" +#elif defined(__PIC32MX__) + #include "WProgram.h" + #include "hardware/pic32/HW_PIC32_defines.h" +/* +#elif defined(__arm__) + #include "Arduino.h" + #include "hardware/arm/HW_ARM_defines.h" + */ +#elif defined (__STM32F1__) +#include "Arduino.h" +//#include +#include "hardware/arm/HW_STM32_defines.h" +#endif + +struct _current_font +{ + uint8_t* font; + uint8_t x_size; + uint8_t y_size; + uint8_t offset; + uint8_t numchars; + uint8_t inverted; +}; + +class OLED +{ + public: + OLED(uint8_t data_pin, uint8_t sclk_pin, uint8_t rst_pin); + OLED(uint8_t data_pin, uint8_t sclk_pin); + void begin(); + void update(); + void setBrightness(uint8_t value); + void clrScr(); + void fillScr(); + void invert(bool mode); + void setPixel(uint16_t x, uint16_t y); + void clrPixel(uint16_t x, uint16_t y); + void invPixel(uint16_t x, uint16_t y); + void invertText(bool mode); + void print(char *st, int x, int y); + void print(String st, int x, int y); + void printNumI(long num, int x, int y, int length=0, char filler=' '); + void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' '); + void setFont(uint8_t* font); + void drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy); + void drawLine(int x1, int y1, int x2, int y2); + void clrLine(int x1, int y1, int x2, int y2); + void drawRect(int x1, int y1, int x2, int y2); + void clrRect(int x1, int y1, int x2, int y2); + void drawRoundRect(int x1, int y1, int x2, int y2); + void clrRoundRect(int x1, int y1, int x2, int y2); + void drawCircle(int x, int y, int radius); + void clrCircle(int x, int y, int radius); + + protected: + uint8_t _scl_pin, _sda_pin, _rst_pin; + boolean _use_hw; + _current_font cfont; + uint8_t scrbuf[1024]; + + void _print_char(unsigned char c, int x, int row); + void _convert_float(char *buf, double num, int width, byte prec); + void drawHLine(int x, int y, int l); + void clrHLine(int x, int y, int l); + void drawVLine(int x, int y, int l); + void clrVLine(int x, int y, int l); + + void _initTWI(); + void _sendTWIstart(); + void _sendTWIstop(); + void _sendTWIcommand(uint8_t value); + void _sendStart(byte addr); + void _sendStop(); + void _sendAck(); + void _sendNack(); + void _waitForAck(); + void _writeByte(uint8_t value); +#if defined(__arm__) + // Twi *twi; +#endif +}; + +#endif \ No newline at end of file diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.ino new file mode 100644 index 0000000..6b123d4 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.ino @@ -0,0 +1,158 @@ +// OLED_I2C_3D_Cube +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library to rotate a 3D cube. +// The average FPS (Frames Per Second) will be displayed on the screen. +// +// NOTE: The FPS counter will overflow if left for an extended amount of time. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +double vectors[8][3] = {{20, 20, 20},{-20, 20, 20},{-20, -20, 20},{20, -20, 20},{20, 20, -20},{-20, 20, -20},{-20, -20, -20},{20, -20, -20}}; + +double perspective = 100.0f; +int deltaX, deltaY, deltaZ, iter = 0; +long stime, fps = 0, frames = 0; + +void setup() +{ + randomSeed(analogRead(0)); + + myOLED.begin(); + myOLED.setFont(SmallFont); + stime = micros(); +} + +void loop() +{ + myOLED.clrScr(); + drawVectors(); + if (iter == 0) + { + deltaX = random(7) - 3; + deltaY = random(7) - 3; + deltaZ = random(7) - 3; + iter = random(250) + 5; + } + rotateX(deltaX); + rotateY(deltaY); + rotateZ(deltaZ); + iter--; + fps += 1000000 / (micros() - stime); + stime = micros(); + frames++; + myOLED.printNumI(fps / frames, 0, 0, 3); // Print average FPS on screen + myOLED.update(); +} + +int translateX(double x, double z) +{ + return (int)((x + 64) + (z * (x / perspective))); +} + +int translateY(double y, double z) +{ + return (int)((y + 32) + (z * (y / perspective))); +} + +void rotateX(int angle) +{ + double rad, cosa, sina, Yn, Zn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Yn = (vectors[i][1] * cosa) - (vectors[i][2] * sina); + Zn = (vectors[i][1] * sina) + (vectors[i][2] * cosa); + vectors[i][1] = Yn; + vectors[i][2] = Zn; + } +} + +void rotateY(int angle) +{ + double rad, cosa, sina, Xn, Zn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Xn = (vectors[i][0] * cosa) - (vectors[i][2] * sina); + Zn = (vectors[i][0] * sina) + (vectors[i][2] * cosa); + vectors[i][0] = Xn; + vectors[i][2] = Zn; + } +} + +void rotateZ(int angle) +{ + double rad, cosa, sina, Xn, Yn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Xn = (vectors[i][0] * cosa) - (vectors[i][1] * sina); + Yn = (vectors[i][0] * sina) + (vectors[i][1] * cosa); + vectors[i][0] = Xn; + vectors[i][1] = Yn; + } +} + +void drawVectors() +{ + myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2])); + myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2])); + myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2])); + myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2])); + myOLED.drawLine(translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2])); + myOLED.drawLine(translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2])); + myOLED.drawLine(translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2])); + myOLED.drawLine(translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2])); + myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2])); + myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2])); + myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2])); + myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2])); +} diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino new file mode 100644 index 0000000..cd4b945 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino @@ -0,0 +1,81 @@ +// OLED_I2C_Bitmap +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t logo[]; +extern uint8_t mice[]; + +void setup() +{ + myOLED.begin(); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.drawBitmap(0, 16, logo, 128, 36); + myOLED.update(); + delay(4000); + for (int i=0; i<2; i++) + { + myOLED.invert(true); + delay(500); + myOLED.invert(false); + delay(500); + } + delay(4000); + + myOLED.clrScr(); + myOLED.drawBitmap(0, 0, mice, 128, 64); + myOLED.update(); + delay(4000); + for (int i=0; i<2; i++) + { + myOLED.invert(true); + delay(500); + myOLED.invert(false); + delay(500); + } + delay(4000); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/graphics.c b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/graphics.c new file mode 100644 index 0000000..7cc2fdf --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Bitmap/graphics.c @@ -0,0 +1,112 @@ +#include + +const uint8_t logo[] PROGMEM={ +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, 0x08, // 0x0010 (16) pixels +0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x1F, 0xFF, 0xFE, 0x83, // 0x0020 (32) pixels +0x83, 0xC2, 0xC6, 0x7E, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x00, // 0x0030 (48) pixels +0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, // 0x0040 (64) pixels +0x20, 0xE0, 0x60, 0x20, 0x20, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0x40, 0x00, 0x40, 0xE0, 0x60, 0x00, // 0x0050 (80) pixels +0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xFF, 0xFF, 0xEF, 0x03, 0x02, 0x02, 0x02, 0x06, 0xFC, 0xF8, // 0x0060 (96) pixels +0xE0, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, // 0x0070 (112) pixels +0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, 0x20, 0xE0, 0x60, 0x20, 0x20, // 0x0080 (128) pixels +0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, // 0x0090 (144) pixels +0x90, 0x7F, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x3F, 0x3F, 0x20, // 0x00A0 (160) pixels +0x00, 0x00, 0x07, 0x3F, 0x3C, 0x30, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x00, // 0x00B0 (176) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, // 0x00C0 (192) pixels +0x27, 0x2F, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xBC, 0x60, 0x1E, 0x01, 0x00, 0x01, // 0x00D0 (208) pixels +0x01, 0x01, 0x01, 0x01, 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x1F, 0x0F, // 0x00E0 (224) pixels +0x03, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, // 0x00F0 (240) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, 0x27, 0x2F, 0x38, 0x30, 0x20, // 0x0100 (256) pixels +0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x06, // 0x0110 (272) pixels +0x01, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0xE0, // 0x0120 (288) pixels +0xE0, 0xC0, 0x40, 0x40, 0x40, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00, // 0x0130 (304) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0140 (320) pixels +0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0160 (352) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0170 (368) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0180 (384) pixels +0x00, 0x00, 0x0F, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // 0x0190 (400) pixels +0x01, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // 0x01A0 (416) pixels +0xFF, 0x9F, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x87, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // 0x01B0 (432) pixels +0x60, 0xF8, 0xFC, 0x46, 0x26, 0x2E, 0x3C, 0xB8, 0x00, 0xE0, 0xF8, 0x08, 0x0C, 0x0C, 0x7C, 0x38, // 0x01C0 (448) pixels +0x00, 0x06, 0x06, 0xFF, 0x0E, 0x06, 0x84, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x08, 0x0C, 0x0C, 0x08, // 0x01D0 (464) pixels +0x00, 0xF0, 0xF8, 0x1C, 0x06, 0x02, 0x04, 0xFC, 0xF8, 0xF0, 0x00, 0x04, 0xEE, 0xFC, 0x18, 0x04, // 0x01E0 (480) pixels +0x06, 0x06, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x08, // 0x01F0 (496) pixels +0x0C, 0x0C, 0x7C, 0x38, 0x00, 0x00, 0x7C, 0x7C, 0x64, 0xC4, 0xDC, 0xCC, 0x80, 0x00, 0x00, 0x00, // 0x0200 (512) pixels +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xF1, 0xF1, // 0x0210 (528) pixels +0xF1, 0xF1, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF4, 0xF4, 0xF7, // 0x0220 (544) pixels +0xF7, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF6, 0xF7, 0xF3, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, // 0x0230 (560) pixels +0xF0, 0xF3, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF1, 0xF0, 0xF1, 0xF7, 0xF6, 0xFC, 0xFC, 0xF4, 0xF7, // 0x0240 (576) pixels +0xF0, 0xF0, 0xF0, 0xF7, 0xFE, 0xF4, 0xF7, 0xF0, 0xF0, 0xF6, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF0, // 0x0250 (592) pixels +0xF0, 0xF0, 0xF3, 0xF6, 0xF4, 0xF4, 0xF4, 0xF7, 0xF3, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, // 0x0260 (608) pixels +0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF6, 0xF0, 0xF0, 0xF1, 0xF7, 0xF6, // 0x0270 (624) pixels +0xFC, 0xFC, 0xF4, 0xF7, 0xF0, 0xF0, 0xFF, 0xF6, 0xF4, 0xF8, 0xF8, 0xF7, 0xF1, 0xF0, 0xF0, 0xF0, // 0x0280 (640) pixels +}; + +const uint8_t mice[] PROGMEM={ +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0010 (16) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, // 0x0020 (32) pixels +0x3F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0030 (48) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0040 (64) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0050 (80) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xCF, 0xCF, 0xEF, 0xCF, 0x9F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, // 0x0060 (96) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x9F, 0x9F, 0xDF, 0xCF, 0xCF, 0xCF, // 0x0070 (112) pixels +0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0080 (128) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0090 (144) pixels +0xFF, 0xFF, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00A0 (160) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00B0 (176) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00C0 (192) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00D0 (208) pixels +0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE1, 0x07, 0x3F, // 0x00E0 (224) pixels +0xFF, 0xFF, 0x7F, 0x1F, 0x47, 0x33, 0x98, 0xCC, 0xE6, 0xF3, 0xF9, 0xFE, 0xFF, 0xFF, 0x3F, 0x07, // 0x00F0 (240) pixels +0xC0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0100 (256) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0110 (272) pixels +0xFF, 0xFF, 0xFC, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0120 (288) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0130 (304) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0140 (320) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF7, 0xE6, 0x00, // 0x0160 (352) pixels +0x33, 0xF9, 0xF0, 0x04, 0x0E, 0xCF, 0xEF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x00, 0x03, // 0x0170 (368) pixels +0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0180 (384) pixels +0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, // 0x0190 (400) pixels +0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x01A0 (416) pixels +0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC, 0xF9, 0xF1, 0xC3, // 0x01B0 (432) pixels +0x87, 0xCF, 0x9F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x01C0 (448) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x01D0 (464) pixels +0x00, 0x00, 0x3F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0xDF, 0xCF, 0xEF, 0xE7, 0xB7, 0x33, 0x11, 0x30, // 0x01E0 (480) pixels +0xC6, 0xC7, 0xE3, 0x10, 0x32, 0x17, 0x67, 0xAF, 0xCF, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, // 0x01F0 (496) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0200 (512) pixels +0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0210 (528) pixels +0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0220 (544) pixels +0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x01, 0xC1, 0xF1, // 0x0230 (560) pixels +0x07, 0x3F, 0x0F, 0x87, 0x0C, 0x01, 0x0F, 0x7F, 0x1F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x0F, 0xFF, // 0x0240 (576) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF8, 0xF8, 0xF0, // 0x0250 (592) pixels +0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0x00, 0x3E, 0x3C, // 0x0260 (608) pixels +0x03, 0x8F, 0x01, 0x3C, 0x3E, 0x00, 0x83, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x70, // 0x0270 (624) pixels +0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0280 (640) pixels +0xFF, 0xF8, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0290 (656) pixels +0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xE0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0x7E, 0x7C, // 0x02A0 (672) pixels +0x3C, 0x3C, 0x3C, 0x78, 0x78, 0xF1, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF3, 0xE7, // 0x02B0 (688) pixels +0xF0, 0xF8, 0xF0, 0xF3, 0xF8, 0xF8, 0xFC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xFF, // 0x02C0 (704) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x02D0 (720) pixels +0x80, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0x63, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x08, 0x00, // 0x02E0 (736) pixels +0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xFF, 0xFF, 0x3F, 0x39, 0x78, 0xF8, 0xF8, 0x60, 0x00, // 0x02F0 (752) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0300 (768) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, // 0x0310 (784) pixels +0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xE7, 0xCF, 0x9F, 0x3F, 0x3F, 0x7F, 0x7F, 0xFF, // 0x0320 (800) pixels +0xF8, 0xE3, 0xCF, 0xBF, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0330 (816) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, // 0x0340 (832) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0350 (848) pixels +0xFF, 0xFC, 0xF9, 0xF3, 0xE7, 0xCE, 0xDE, 0x9C, 0xB9, 0x33, 0x67, 0x87, 0x0F, 0x4F, 0x8F, 0x8F, // 0x0360 (864) pixels +0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x87, 0xF3, 0x79, 0x7D, 0x3E, 0x9F, 0xCF, 0xE7, 0xF3, 0xF8, 0xFE, // 0x0370 (880) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0380 (896) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0390 (912) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, // 0x03A0 (928) pixels +0xFE, 0xFC, 0xFC, 0xFC, 0xFD, 0xF8, 0xFA, 0xF8, 0xF8, 0xF9, 0xF9, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, // 0x03B0 (944) pixels +0xF9, 0xFD, 0xFD, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03C0 (960) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03D0 (976) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF9, 0xF8, 0xF0, 0xF1, // 0x03E0 (992) pixels +0xF1, 0xF1, 0xF1, 0xF8, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03F0 (1008) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0400 (1024) pixels +}; + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Brightness/OLED_I2C_Brightness.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Brightness/OLED_I2C_Brightness.ino new file mode 100644 index 0000000..bda13e4 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Brightness/OLED_I2C_Brightness.ino @@ -0,0 +1,64 @@ +// OLED_I2C_Brightness +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +void setup() +{ + myOLED.begin(); + myOLED.invert(true); +} + +void loop() +{ + for (int i=0; i<256; i++) + { + myOLED.setBrightness(i); + delay(5); + } + for (int i=255; i>=0; i--) + { + myOLED.setBrightness(i); + delay(5); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino new file mode 100644 index 0000000..1c7f619 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino @@ -0,0 +1,195 @@ +// OLED_I2C_Graph_Demo +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; +extern uint8_t logo[]; +extern uint8_t The_End[]; +extern uint8_t pacman1[]; +extern uint8_t pacman2[]; +extern uint8_t pacman3[]; +extern uint8_t pill[]; + +float y; +uint8_t* bm; +int pacy; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); + randomSeed(analogRead(7)); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.drawBitmap(0, 16, logo, 128, 36); + myOLED.update(); + + delay(3000); + + myOLED.clrScr(); + myOLED.print("OLED_I2C", CENTER, 0); + myOLED.print("DEMO", CENTER, 28); + myOLED.drawRect(50, 26, 78, 36); + for (int i=0; i<6; i++) + { + myOLED.drawLine(79, 26+(i*2), 105-(i*3), 26+(i*2)); + myOLED.drawLine(22+(i*3), 36-(i*2), 50, 36-(i*2)); + } + myOLED.print("(C)2015 by", CENTER, 48); + myOLED.print("Henning Karlsen", CENTER, 56); + myOLED.update(); + + delay(5000); + + myOLED.clrScr(); + for (int i=0; i<64; i+=2) + { + myOLED.drawLine(0, i, 127, 63-i); + myOLED.update(); + } + for (int i=127; i>=0; i-=2) + { + myOLED.drawLine(i, 0, 127-i, 63); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + myOLED.drawRect(0, 0, 127, 63); + for (int i=0; i<64; i+=4) + { + myOLED.drawLine(0, i, i*2, 63); + myOLED.update(); + } + for (int i=0; i<64; i+=4) + { + myOLED.drawLine(127, 63-i, 127-(i*2), 0); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + for (int i=0; i<10; i++) + { + myOLED.drawRoundRect(i*3, i*3, 127-(i*3), 63-(i*3)); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + for (int i=0; i<25; i++) + { + myOLED.drawCircle(64, 32, i*3); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + myOLED.drawRect(0, 0, 127, 63); + myOLED.drawLine(0, 31, 127, 31); + myOLED.drawLine(63, 0, 63, 63); + for (int c=0; c<4; c++) + { + for (int i=0; i<128; i++) + { + y=i*0.04974188368183839294232518690191; + myOLED.invPixel(i, (sin(y)*28)+31); + myOLED.update(); + delay(10); + } + } + + delay(2000); + + for (int pc=0; pc<3; pc++) + { + pacy=random(0, 44); + + for (int i=-20; i<132; i++) + { + myOLED.clrScr(); + for (int p=6; p>((i+20)/20); p--) + myOLED.drawBitmap(p*20-8, pacy+7, pill, 5, 5); + switch(((i+20)/3) % 4) + { + case 0: bm=pacman1; + break; + case 1: bm=pacman2; + break; + case 2: bm=pacman3; + break; + case 3: bm=pacman2; + break; + } + myOLED.drawBitmap(i, pacy, bm, 20, 20); + myOLED.update(); + delay(10); + } + } + + for (int i=0; i<41; i++) + { + myOLED.clrScr(); + myOLED.drawBitmap(22, i-24, The_End, 84, 24); + myOLED.update(); + delay(50); + } + myOLED.print("Runtime (ms):", CENTER, 48); + myOLED.printNumI(millis(), CENTER, 56); + myOLED.update(); + for (int i=0; i<5; i++) + { + myOLED.invert(true); + delay(1000); + myOLED.invert(false); + delay(1000); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/graphics.c b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/graphics.c new file mode 100644 index 0000000..ece23be --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Graph_Demo/graphics.c @@ -0,0 +1,89 @@ +#include + +const uint8_t logo[] PROGMEM={ +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, 0x08, // 0x0010 (16) pixels +0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x1F, 0xFF, 0xFE, 0x83, // 0x0020 (32) pixels +0x83, 0xC2, 0xC6, 0x7E, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x00, // 0x0030 (48) pixels +0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, // 0x0040 (64) pixels +0x20, 0xE0, 0x60, 0x20, 0x20, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0x40, 0x00, 0x40, 0xE0, 0x60, 0x00, // 0x0050 (80) pixels +0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xFF, 0xFF, 0xEF, 0x03, 0x02, 0x02, 0x02, 0x06, 0xFC, 0xF8, // 0x0060 (96) pixels +0xE0, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, // 0x0070 (112) pixels +0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, 0x20, 0xE0, 0x60, 0x20, 0x20, // 0x0080 (128) pixels +0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, // 0x0090 (144) pixels +0x90, 0x7F, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x3F, 0x3F, 0x20, // 0x00A0 (160) pixels +0x00, 0x00, 0x07, 0x3F, 0x3C, 0x30, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x00, // 0x00B0 (176) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, // 0x00C0 (192) pixels +0x27, 0x2F, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xBC, 0x60, 0x1E, 0x01, 0x00, 0x01, // 0x00D0 (208) pixels +0x01, 0x01, 0x01, 0x01, 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x1F, 0x0F, // 0x00E0 (224) pixels +0x03, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, // 0x00F0 (240) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, 0x27, 0x2F, 0x38, 0x30, 0x20, // 0x0100 (256) pixels +0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x06, // 0x0110 (272) pixels +0x01, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0xE0, // 0x0120 (288) pixels +0xE0, 0xC0, 0x40, 0x40, 0x40, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00, // 0x0130 (304) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0140 (320) pixels +0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0160 (352) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0170 (368) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0180 (384) pixels +0x00, 0x00, 0x0F, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // 0x0190 (400) pixels +0x01, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // 0x01A0 (416) pixels +0xFF, 0x9F, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x87, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // 0x01B0 (432) pixels +0x60, 0xF8, 0xFC, 0x46, 0x26, 0x2E, 0x3C, 0xB8, 0x00, 0xE0, 0xF8, 0x08, 0x0C, 0x0C, 0x7C, 0x38, // 0x01C0 (448) pixels +0x00, 0x06, 0x06, 0xFF, 0x0E, 0x06, 0x84, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x08, 0x0C, 0x0C, 0x08, // 0x01D0 (464) pixels +0x00, 0xF0, 0xF8, 0x1C, 0x06, 0x02, 0x04, 0xFC, 0xF8, 0xF0, 0x00, 0x04, 0xEE, 0xFC, 0x18, 0x04, // 0x01E0 (480) pixels +0x06, 0x06, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x08, // 0x01F0 (496) pixels +0x0C, 0x0C, 0x7C, 0x38, 0x00, 0x00, 0x7C, 0x7C, 0x64, 0xC4, 0xDC, 0xCC, 0x80, 0x00, 0x00, 0x00, // 0x0200 (512) pixels +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xF1, 0xF1, // 0x0210 (528) pixels +0xF1, 0xF1, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF4, 0xF4, 0xF7, // 0x0220 (544) pixels +0xF7, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF6, 0xF7, 0xF3, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, // 0x0230 (560) pixels +0xF0, 0xF3, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF1, 0xF0, 0xF1, 0xF7, 0xF6, 0xFC, 0xFC, 0xF4, 0xF7, // 0x0240 (576) pixels +0xF0, 0xF0, 0xF0, 0xF7, 0xFE, 0xF4, 0xF7, 0xF0, 0xF0, 0xF6, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF0, // 0x0250 (592) pixels +0xF0, 0xF0, 0xF3, 0xF6, 0xF4, 0xF4, 0xF4, 0xF7, 0xF3, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, // 0x0260 (608) pixels +0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF6, 0xF0, 0xF0, 0xF1, 0xF7, 0xF6, // 0x0270 (624) pixels +0xFC, 0xFC, 0xF4, 0xF7, 0xF0, 0xF0, 0xFF, 0xF6, 0xF4, 0xF8, 0xF8, 0xF7, 0xF1, 0xF0, 0xF0, 0xF0, // 0x0280 (640) pixels +}; + +const uint8_t The_End[] PROGMEM={ +0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x00, 0x00, // 0x0010 (16) pixels +0x80, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, // 0x0020 (32) pixels +0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, // 0x0030 (48) pixels +0xE0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, // 0x0040 (64) pixels +0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0x60, 0x40, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, // 0x0050 (80) pixels +0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x81, 0xFC, 0xFF, 0x0F, 0x03, 0x00, 0x00, 0x00, // 0x0060 (96) pixels +0xEE, 0x6F, 0x67, 0xFF, 0xFF, 0x7F, 0x71, 0x30, 0xF0, 0xFF, 0x3F, 0x39, 0x38, 0x18, 0x00, 0x01, // 0x0070 (112) pixels +0x00, 0xF8, 0xFF, 0x1F, 0x0F, 0x0C, 0x0D, 0x8D, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // 0x0080 (128) pixels +0x00, 0xC0, 0xFF, 0x7F, 0x0F, 0x0C, 0x0D, 0x0D, 0x84, 0x80, 0x80, 0x07, 0x07, 0x83, 0xFF, 0xFF, // 0x0090 (144) pixels +0x1F, 0x3F, 0xFE, 0xF8, 0xF8, 0xFE, 0xDF, 0x03, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x1F, 0x00, // 0x00A0 (160) pixels +0x00, 0x80, 0x81, 0xC3, 0xE7, 0x7F, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x03, 0x00, // 0x00B0 (176) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x0F, 0x0F, 0x07, 0x00, // 0x00C0 (192) pixels +0x00, 0x06, 0x06, 0x3F, 0x1F, 0x0F, 0x0F, 0x0E, 0x06, 0x06, 0x06, 0x07, 0x07, 0x03, 0x00, 0x00, // 0x00D0 (208) pixels +0x00, 0x00, 0x06, 0x1F, 0x3F, 0x1F, 0x0F, 0x0E, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x03, 0x00, // 0x00E0 (224) pixels +0x06, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x18, 0x1C, 0x1F, // 0x00F0 (240) pixels +0x0F, 0x07, 0x06, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, +}; + +const uint8_t pacman1[] PROGMEM={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3E, 0x1C, // 0x0010 (16) pixels +0x0C, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels +0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, +}; + +const uint8_t pacman2[] PROGMEM={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x7C, // 0x0010 (16) pixels +0x7C, 0x38, 0x20, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels +0xF9, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, +}; + +const uint8_t pacman3[] PROGMEM={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, // 0x0010 (16) pixels +0xF8, 0xF0, 0xE0, 0x80, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0020 (32) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF9, 0x79, 0x19, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, +}; + +const uint8_t pill[] PROGMEM={ +0x0E, 0x1F, 0x1F, 0x1F, 0x0E, +}; + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino new file mode 100644 index 0000000..94b32e3 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino @@ -0,0 +1,79 @@ +// OLED_I2C_NumberFonts +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; +extern uint8_t MediumNumbers[]; +extern uint8_t BigNumbers[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); +} + +void loop() +{ + for (int i=0; i<=10000; i++) + { + myOLED.setFont(MediumNumbers); + myOLED.printNumF(float(i)/3, 2, RIGHT, 0); + myOLED.setFont(BigNumbers); + myOLED.printNumI(i, RIGHT, 40); + myOLED.update(); + } + + myOLED.setFont(SmallFont); + myOLED.print("|", LEFT, 24); + myOLED.print("|", RIGHT, 24); + myOLED.update(); + delay(500); + for (int i=0; i<19; i++) + { + myOLED.print("\\", 7+(i*6), 24); + myOLED.update(); + delay(250); + } + myOLED.clrScr(); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino new file mode 100644 index 0000000..e5e803d --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino @@ -0,0 +1,64 @@ +// OLED_I2C_Scrolling_Text +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); + randomSeed(analogRead(0)); +} + +void loop() +{ + int y = random(0, 56); + for (int i=128; i>=-(34*6); i--) + { + myOLED.print("OLED_I2C Scrolling Text Demo ", i, y); + myOLED.update(); + delay(50); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino new file mode 100644 index 0000000..87bc261 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino @@ -0,0 +1,65 @@ +// OLED_I2C_TinyFont_View +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t TinyFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(TinyFont); +} + +void loop() +{ + myOLED.print(" !\"#$%&'()*+,-./", CENTER, 16); + myOLED.print("0123456789:;<=>?", CENTER, 22); + myOLED.print("@ABCDEFGHIJKLMNO", CENTER, 28); + myOLED.print("PQRSTUVWXYZ[\\]^_", CENTER, 34); + myOLED.print("`abcdefghijklmno", CENTER, 40); + myOLED.print("pqrstuvwxyz{|}~ ", CENTER, 46); + myOLED.update(); + + while (1); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino new file mode 100644 index 0000000..01b4be9 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/Arduino/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino @@ -0,0 +1,83 @@ +// OLED_I2C_ViewFont +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the Arduino you must connect +// the pins as follows: +// +// Arduino Uno/2009: +// ---------------------- +// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin +// SCL pin -> Arduino Analog 5 or the dedicated SCL pin +// +// Arduino Leonardo: +// ---------------------- +// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin +// SCL pin -> Arduino Digital 3 or the dedicated SCL pin +// +// Arduino Mega: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin +// +// Arduino Due: +// ---------------------- +// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin +// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin +// +// The internal pull-up resistors will be activated when using the +// hardware I2C interfaces. +// +// You can connect the OLED display to any available pin but if you use +// any other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used, and you will also have to use appropriate, external +// pull-up resistors on the data and clock signals. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.print("Upper case:", LEFT, 0); + myOLED.print("ABCDEFGHIJKLM", CENTER, 16); + myOLED.print("NOPQRSTUVWXYZ", CENTER, 24); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Lower case:", LEFT, 0); + myOLED.print("abcdefghijklm", CENTER, 16); + myOLED.print("nopqrstuvwxyz", CENTER, 24); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Numbers:", LEFT, 0); + myOLED.print("0123456789", CENTER, 16); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Special:", LEFT, 0); + myOLED.print("!\"#$%&'()*+,-.", CENTER, 16); + myOLED.print("/:;<=>?@[\\]^_`", CENTER, 24); + myOLED.print("{|}~", CENTER, 32); + myOLED.update(); + delay (5000); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.pde b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.pde new file mode 100644 index 0000000..c1fa541 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_3D_Cube/OLED_I2C_3D_Cube.pde @@ -0,0 +1,148 @@ +// OLED_I2C_3D_Cube +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library to rotate a 3D cube. +// The average FPS (Frames Per Second) will be displayed on the screen. +// +// NOTE: The FPS counter will overflow if left for an extended amount of time. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +double vectors[8][3] = {{20, 20, 20},{-20, 20, 20},{-20, -20, 20},{20, -20, 20},{20, 20, -20},{-20, 20, -20},{-20, -20, -20},{20, -20, -20}}; + +double perspective = 100.0f; +int deltaX, deltaY, deltaZ, iter = 0; +long stime, fps = 0, frames = 0; + +void setup() +{ + randomSeed(analogRead(0)); + + myOLED.begin(); + myOLED.setFont(SmallFont); + stime = micros(); +} + +void loop() +{ + myOLED.clrScr(); + drawVectors(); + if (iter == 0) + { + deltaX = random(7) - 3; + deltaY = random(7) - 3; + deltaZ = random(7) - 3; + iter = random(250) + 5; + } + rotateX(deltaX); + rotateY(deltaY); + rotateZ(deltaZ); + iter--; + fps += 1000000 / (micros() - stime); + stime = micros(); + frames++; + myOLED.printNumI(fps / frames, 0, 0, 3); // Print average FPS on screen + myOLED.update(); +} + +int translateX(double x, double z) +{ + return (int)((x + 64) + (z * (x / perspective))); +} + +int translateY(double y, double z) +{ + return (int)((y + 32) + (z * (y / perspective))); +} + +void rotateX(int angle) +{ + double rad, cosa, sina, Yn, Zn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Yn = (vectors[i][1] * cosa) - (vectors[i][2] * sina); + Zn = (vectors[i][1] * sina) + (vectors[i][2] * cosa); + vectors[i][1] = Yn; + vectors[i][2] = Zn; + } +} + +void rotateY(int angle) +{ + double rad, cosa, sina, Xn, Zn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Xn = (vectors[i][0] * cosa) - (vectors[i][2] * sina); + Zn = (vectors[i][0] * sina) + (vectors[i][2] * cosa); + vectors[i][0] = Xn; + vectors[i][2] = Zn; + } +} + +void rotateZ(int angle) +{ + double rad, cosa, sina, Xn, Yn; + + rad = angle * PI / 180; + cosa = cos(rad); + sina = sin(rad); + for (int i = 0; i < 8; i++) + { + Xn = (vectors[i][0] * cosa) - (vectors[i][1] * sina); + Yn = (vectors[i][0] * sina) + (vectors[i][1] * cosa); + vectors[i][0] = Xn; + vectors[i][1] = Yn; + } +} + +void drawVectors() +{ + myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2])); + myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2])); + myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2])); + myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2])); + myOLED.drawLine(translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2])); + myOLED.drawLine(translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2])); + myOLED.drawLine(translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2])); + myOLED.drawLine(translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2])); + myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2])); + myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2])); + myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2])); + myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2])); +} diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino new file mode 100644 index 0000000..946e563 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/OLED_I2C_Bitmap.ino @@ -0,0 +1,71 @@ +// OLED_I2C_Bitmap +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t logo[]; +extern uint8_t mice[]; + +void setup() +{ + myOLED.begin(); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.drawBitmap(0, 16, logo, 128, 36); + myOLED.update(); + delay(4000); + for (int i=0; i<2; i++) + { + myOLED.invert(true); + delay(500); + myOLED.invert(false); + delay(500); + } + delay(4000); + + myOLED.clrScr(); + myOLED.drawBitmap(0, 0, mice, 128, 64); + myOLED.update(); + delay(4000); + for (int i=0; i<2; i++) + { + myOLED.invert(true); + delay(500); + myOLED.invert(false); + delay(500); + } + delay(4000); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/graphics.c b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/graphics.c new file mode 100644 index 0000000..14b5f85 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Bitmap/graphics.c @@ -0,0 +1,110 @@ +const unsigned char logo[] ={ +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, 0x08, // 0x0010 (16) pixels +0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x1F, 0xFF, 0xFE, 0x83, // 0x0020 (32) pixels +0x83, 0xC2, 0xC6, 0x7E, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x00, // 0x0030 (48) pixels +0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, // 0x0040 (64) pixels +0x20, 0xE0, 0x60, 0x20, 0x20, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0x40, 0x00, 0x40, 0xE0, 0x60, 0x00, // 0x0050 (80) pixels +0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xFF, 0xFF, 0xEF, 0x03, 0x02, 0x02, 0x02, 0x06, 0xFC, 0xF8, // 0x0060 (96) pixels +0xE0, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, // 0x0070 (112) pixels +0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, 0x20, 0xE0, 0x60, 0x20, 0x20, // 0x0080 (128) pixels +0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, // 0x0090 (144) pixels +0x90, 0x7F, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x3F, 0x3F, 0x20, // 0x00A0 (160) pixels +0x00, 0x00, 0x07, 0x3F, 0x3C, 0x30, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x00, // 0x00B0 (176) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, // 0x00C0 (192) pixels +0x27, 0x2F, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xBC, 0x60, 0x1E, 0x01, 0x00, 0x01, // 0x00D0 (208) pixels +0x01, 0x01, 0x01, 0x01, 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x1F, 0x0F, // 0x00E0 (224) pixels +0x03, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, // 0x00F0 (240) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, 0x27, 0x2F, 0x38, 0x30, 0x20, // 0x0100 (256) pixels +0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x06, // 0x0110 (272) pixels +0x01, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0xE0, // 0x0120 (288) pixels +0xE0, 0xC0, 0x40, 0x40, 0x40, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00, // 0x0130 (304) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0140 (320) pixels +0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0160 (352) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0170 (368) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0180 (384) pixels +0x00, 0x00, 0x0F, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // 0x0190 (400) pixels +0x01, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // 0x01A0 (416) pixels +0xFF, 0x9F, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x87, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // 0x01B0 (432) pixels +0x60, 0xF8, 0xFC, 0x46, 0x26, 0x2E, 0x3C, 0xB8, 0x00, 0xE0, 0xF8, 0x08, 0x0C, 0x0C, 0x7C, 0x38, // 0x01C0 (448) pixels +0x00, 0x06, 0x06, 0xFF, 0x0E, 0x06, 0x84, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x08, 0x0C, 0x0C, 0x08, // 0x01D0 (464) pixels +0x00, 0xF0, 0xF8, 0x1C, 0x06, 0x02, 0x04, 0xFC, 0xF8, 0xF0, 0x00, 0x04, 0xEE, 0xFC, 0x18, 0x04, // 0x01E0 (480) pixels +0x06, 0x06, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x08, // 0x01F0 (496) pixels +0x0C, 0x0C, 0x7C, 0x38, 0x00, 0x00, 0x7C, 0x7C, 0x64, 0xC4, 0xDC, 0xCC, 0x80, 0x00, 0x00, 0x00, // 0x0200 (512) pixels +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xF1, 0xF1, // 0x0210 (528) pixels +0xF1, 0xF1, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF4, 0xF4, 0xF7, // 0x0220 (544) pixels +0xF7, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF6, 0xF7, 0xF3, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, // 0x0230 (560) pixels +0xF0, 0xF3, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF1, 0xF0, 0xF1, 0xF7, 0xF6, 0xFC, 0xFC, 0xF4, 0xF7, // 0x0240 (576) pixels +0xF0, 0xF0, 0xF0, 0xF7, 0xFE, 0xF4, 0xF7, 0xF0, 0xF0, 0xF6, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF0, // 0x0250 (592) pixels +0xF0, 0xF0, 0xF3, 0xF6, 0xF4, 0xF4, 0xF4, 0xF7, 0xF3, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, // 0x0260 (608) pixels +0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF6, 0xF0, 0xF0, 0xF1, 0xF7, 0xF6, // 0x0270 (624) pixels +0xFC, 0xFC, 0xF4, 0xF7, 0xF0, 0xF0, 0xFF, 0xF6, 0xF4, 0xF8, 0xF8, 0xF7, 0xF1, 0xF0, 0xF0, 0xF0, // 0x0280 (640) pixels +}; + +const unsigned char mice[] ={ +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0010 (16) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x3F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, // 0x0020 (32) pixels +0x3F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0030 (48) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0040 (64) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0050 (80) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xCF, 0xCF, 0xEF, 0xCF, 0x9F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, // 0x0060 (96) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x9F, 0x9F, 0xDF, 0xCF, 0xCF, 0xCF, // 0x0070 (112) pixels +0x1F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0080 (128) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0090 (144) pixels +0xFF, 0xFF, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00A0 (160) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00B0 (176) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00C0 (192) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00D0 (208) pixels +0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE1, 0x07, 0x3F, // 0x00E0 (224) pixels +0xFF, 0xFF, 0x7F, 0x1F, 0x47, 0x33, 0x98, 0xCC, 0xE6, 0xF3, 0xF9, 0xFE, 0xFF, 0xFF, 0x3F, 0x07, // 0x00F0 (240) pixels +0xC0, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0100 (256) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0110 (272) pixels +0xFF, 0xFF, 0xFC, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0120 (288) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0130 (304) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0140 (320) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0x07, 0x03, 0x01, 0x01, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF7, 0xE6, 0x00, // 0x0160 (352) pixels +0x33, 0xF9, 0xF0, 0x04, 0x0E, 0xCF, 0xEF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x00, 0x03, // 0x0170 (368) pixels +0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0180 (384) pixels +0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, // 0x0190 (400) pixels +0x3F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1E, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x01A0 (416) pixels +0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFC, 0xF9, 0xF1, 0xC3, // 0x01B0 (432) pixels +0x87, 0xCF, 0x9F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x01C0 (448) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x01D0 (464) pixels +0x00, 0x00, 0x3F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0xDF, 0xCF, 0xEF, 0xE7, 0xB7, 0x33, 0x11, 0x30, // 0x01E0 (480) pixels +0xC6, 0xC7, 0xE3, 0x10, 0x32, 0x17, 0x67, 0xAF, 0xCF, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, // 0x01F0 (496) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0200 (512) pixels +0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0210 (528) pixels +0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0220 (544) pixels +0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x01, 0xC1, 0xF1, // 0x0230 (560) pixels +0x07, 0x3F, 0x0F, 0x87, 0x0C, 0x01, 0x0F, 0x7F, 0x1F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x0F, 0xFF, // 0x0240 (576) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF8, 0xF8, 0xF0, // 0x0250 (592) pixels +0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0x00, 0x3E, 0x3C, // 0x0260 (608) pixels +0x03, 0x8F, 0x01, 0x3C, 0x3E, 0x00, 0x83, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x70, // 0x0270 (624) pixels +0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0280 (640) pixels +0xFF, 0xF8, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0290 (656) pixels +0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xE0, 0xF8, 0xF8, 0xFC, 0xFC, 0xFC, 0x7E, 0x7C, // 0x02A0 (672) pixels +0x3C, 0x3C, 0x3C, 0x78, 0x78, 0xF1, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF3, 0xE7, // 0x02B0 (688) pixels +0xF0, 0xF8, 0xF0, 0xF3, 0xF8, 0xF8, 0xFC, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xFF, // 0x02C0 (704) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x02D0 (720) pixels +0x80, 0x00, 0x80, 0xC0, 0xE0, 0xE0, 0x63, 0x6F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x08, 0x00, // 0x02E0 (736) pixels +0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xFF, 0xFF, 0x3F, 0x39, 0x78, 0xF8, 0xF8, 0x60, 0x00, // 0x02F0 (752) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0300 (768) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, // 0x0310 (784) pixels +0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xE7, 0xCF, 0x9F, 0x3F, 0x3F, 0x7F, 0x7F, 0xFF, // 0x0320 (800) pixels +0xF8, 0xE3, 0xCF, 0xBF, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0330 (816) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x9F, 0xCF, 0xE3, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, // 0x0340 (832) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0350 (848) pixels +0xFF, 0xFC, 0xF9, 0xF3, 0xE7, 0xCE, 0xDE, 0x9C, 0xB9, 0x33, 0x67, 0x87, 0x0F, 0x4F, 0x8F, 0x8F, // 0x0360 (864) pixels +0x8E, 0x8E, 0x8E, 0x8E, 0x07, 0x87, 0xF3, 0x79, 0x7D, 0x3E, 0x9F, 0xCF, 0xE7, 0xF3, 0xF8, 0xFE, // 0x0370 (880) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0380 (896) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0390 (912) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, // 0x03A0 (928) pixels +0xFE, 0xFC, 0xFC, 0xFC, 0xFD, 0xF8, 0xFA, 0xF8, 0xF8, 0xF9, 0xF9, 0xFD, 0xF9, 0xF9, 0xF9, 0xF9, // 0x03B0 (944) pixels +0xF9, 0xFD, 0xFD, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03C0 (960) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03D0 (976) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF9, 0xF8, 0xF0, 0xF1, // 0x03E0 (992) pixels +0xF1, 0xF1, 0xF1, 0xF8, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x03F0 (1008) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0400 (1024) pixels +}; + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Brightness/OLED_I2C_Brightness.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Brightness/OLED_I2C_Brightness.ino new file mode 100644 index 0000000..7ee96ef --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Brightness/OLED_I2C_Brightness.ino @@ -0,0 +1,54 @@ +// OLED_I2C_Brightness +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +void setup() +{ + myOLED.begin(); + myOLED.invert(true); +} + +void loop() +{ + for (int i=0; i<256; i++) + { + myOLED.setBrightness(i); + delay(5); + } + for (int i=255; i>=0; i--) + { + myOLED.setBrightness(i); + delay(5); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino new file mode 100644 index 0000000..2455068 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/OLED_I2C_Graph_Demo.ino @@ -0,0 +1,185 @@ +// OLED_I2C_Graph_Demo +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; +extern uint8_t logo[]; +extern uint8_t The_End[]; +extern uint8_t pacman1[]; +extern uint8_t pacman2[]; +extern uint8_t pacman3[]; +extern uint8_t pill[]; + +float y; +uint8_t* bm; +int pacy; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); + randomSeed(analogRead(7)); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.drawBitmap(0, 16, logo, 128, 36); + myOLED.update(); + + delay(3000); + + myOLED.clrScr(); + myOLED.print("OLED_I2C", CENTER, 0); + myOLED.print("DEMO", CENTER, 28); + myOLED.drawRect(50, 26, 78, 36); + for (int i=0; i<6; i++) + { + myOLED.drawLine(79, 26+(i*2), 105-(i*3), 26+(i*2)); + myOLED.drawLine(22+(i*3), 36-(i*2), 50, 36-(i*2)); + } + myOLED.print("(C)2015 by", CENTER, 48); + myOLED.print("Henning Karlsen", CENTER, 56); + myOLED.update(); + + delay(5000); + + myOLED.clrScr(); + for (int i=0; i<64; i+=2) + { + myOLED.drawLine(0, i, 127, 63-i); + myOLED.update(); + } + for (int i=127; i>=0; i-=2) + { + myOLED.drawLine(i, 0, 127-i, 63); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + myOLED.drawRect(0, 0, 127, 63); + for (int i=0; i<64; i+=4) + { + myOLED.drawLine(0, i, i*2, 63); + myOLED.update(); + } + for (int i=0; i<64; i+=4) + { + myOLED.drawLine(127, 63-i, 127-(i*2), 0); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + for (int i=0; i<10; i++) + { + myOLED.drawRoundRect(i*3, i*3, 127-(i*3), 63-(i*3)); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + for (int i=0; i<25; i++) + { + myOLED.drawCircle(64, 32, i*3); + myOLED.update(); + } + + delay(2000); + + myOLED.clrScr(); + myOLED.drawRect(0, 0, 127, 63); + myOLED.drawLine(0, 31, 127, 31); + myOLED.drawLine(63, 0, 63, 63); + for (int c=0; c<4; c++) + { + for (int i=0; i<128; i++) + { + y=i*0.04974188368183839294232518690191; + myOLED.invPixel(i, (sin(y)*28)+31); + myOLED.update(); + delay(10); + } + } + + delay(2000); + + for (int pc=0; pc<3; pc++) + { + pacy=random(0, 44); + + for (int i=-20; i<132; i++) + { + myOLED.clrScr(); + for (int p=6; p>((i+20)/20); p--) + myOLED.drawBitmap(p*20-8, pacy+7, pill, 5, 5); + switch(((i+20)/3) % 4) + { + case 0: bm=pacman1; + break; + case 1: bm=pacman2; + break; + case 2: bm=pacman3; + break; + case 3: bm=pacman2; + break; + } + myOLED.drawBitmap(i, pacy, bm, 20, 20); + myOLED.update(); + delay(10); + } + } + + for (int i=0; i<41; i++) + { + myOLED.clrScr(); + myOLED.drawBitmap(22, i-24, The_End, 84, 24); + myOLED.update(); + delay(50); + } + myOLED.print("Runtime (ms):", CENTER, 48); + myOLED.printNumI(millis(), CENTER, 56); + myOLED.update(); + for (int i=0; i<5; i++) + { + myOLED.invert(true); + delay(1000); + myOLED.invert(false); + delay(1000); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/graphics.c b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/graphics.c new file mode 100644 index 0000000..5f16986 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Graph_Demo/graphics.c @@ -0,0 +1,87 @@ +const unsigned char logo[] ={ +0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, 0x08, // 0x0010 (16) pixels +0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x1F, 0xFF, 0xFE, 0x83, // 0x0020 (32) pixels +0x83, 0xC2, 0xC6, 0x7E, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x00, // 0x0030 (48) pixels +0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, // 0x0040 (64) pixels +0x20, 0xE0, 0x60, 0x20, 0x20, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0x40, 0x00, 0x40, 0xE0, 0x60, 0x00, // 0x0050 (80) pixels +0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xFF, 0xFF, 0xEF, 0x03, 0x02, 0x02, 0x02, 0x06, 0xFC, 0xF8, // 0x0060 (96) pixels +0xE0, 0x00, 0x00, 0x00, 0x20, 0xE7, 0xE7, 0x00, 0x00, 0x00, 0x20, 0x70, 0xE0, 0xC0, 0x20, 0x30, // 0x0070 (112) pixels +0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFE, 0xFE, 0x00, 0x20, 0xE0, 0x60, 0x20, 0x20, // 0x0080 (128) pixels +0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, // 0x0090 (144) pixels +0x90, 0x7F, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x3F, 0x3F, 0x20, // 0x00A0 (160) pixels +0x00, 0x00, 0x07, 0x3F, 0x3C, 0x30, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x00, // 0x00B0 (176) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, // 0x00C0 (192) pixels +0x27, 0x2F, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x01, 0x0F, 0xBC, 0x60, 0x1E, 0x01, 0x00, 0x01, // 0x00D0 (208) pixels +0x01, 0x01, 0x01, 0x01, 0x20, 0x20, 0x3F, 0x3F, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x1F, 0x0F, // 0x00E0 (224) pixels +0x03, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x30, 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, // 0x00F0 (240) pixels +0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x3F, 0x22, 0x27, 0x2F, 0x38, 0x30, 0x20, // 0x0100 (256) pixels +0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x06, // 0x0110 (272) pixels +0x01, 0x00, 0x01, 0x06, 0x18, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0xE0, // 0x0120 (288) pixels +0xE0, 0xC0, 0x40, 0x40, 0x40, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00, // 0x0130 (304) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0140 (320) pixels +0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0150 (336) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0160 (352) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0170 (368) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x0180 (384) pixels +0x00, 0x00, 0x0F, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // 0x0190 (400) pixels +0x01, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // 0x01A0 (416) pixels +0xFF, 0x9F, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x87, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // 0x01B0 (432) pixels +0x60, 0xF8, 0xFC, 0x46, 0x26, 0x2E, 0x3C, 0xB8, 0x00, 0xE0, 0xF8, 0x08, 0x0C, 0x0C, 0x7C, 0x38, // 0x01C0 (448) pixels +0x00, 0x06, 0x06, 0xFF, 0x0E, 0x06, 0x84, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x08, 0x0C, 0x0C, 0x08, // 0x01D0 (464) pixels +0x00, 0xF0, 0xF8, 0x1C, 0x06, 0x02, 0x04, 0xFC, 0xF8, 0xF0, 0x00, 0x04, 0xEE, 0xFC, 0x18, 0x04, // 0x01E0 (480) pixels +0x06, 0x06, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x04, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x08, // 0x01F0 (496) pixels +0x0C, 0x0C, 0x7C, 0x38, 0x00, 0x00, 0x7C, 0x7C, 0x64, 0xC4, 0xDC, 0xCC, 0x80, 0x00, 0x00, 0x00, // 0x0200 (512) pixels +0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xF1, 0xF1, // 0x0210 (528) pixels +0xF1, 0xF1, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF4, 0xF4, 0xF7, // 0x0220 (544) pixels +0xF7, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF6, 0xF7, 0xF3, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, // 0x0230 (560) pixels +0xF0, 0xF3, 0xF7, 0xF4, 0xF4, 0xF4, 0xF6, 0xF1, 0xF0, 0xF1, 0xF7, 0xF6, 0xFC, 0xFC, 0xF4, 0xF7, // 0x0240 (576) pixels +0xF0, 0xF0, 0xF0, 0xF7, 0xFE, 0xF4, 0xF7, 0xF0, 0xF0, 0xF6, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF0, // 0x0250 (592) pixels +0xF0, 0xF0, 0xF3, 0xF6, 0xF4, 0xF4, 0xF4, 0xF7, 0xF3, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, // 0x0260 (608) pixels +0xF0, 0xF4, 0xF7, 0xF7, 0xF4, 0xF0, 0xF0, 0xF4, 0xF7, 0xF7, 0xF6, 0xF0, 0xF0, 0xF1, 0xF7, 0xF6, // 0x0270 (624) pixels +0xFC, 0xFC, 0xF4, 0xF7, 0xF0, 0xF0, 0xFF, 0xF6, 0xF4, 0xF8, 0xF8, 0xF7, 0xF1, 0xF0, 0xF0, 0xF0, // 0x0280 (640) pixels +}; + +const unsigned char The_End[] ={ +0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x00, 0x00, // 0x0010 (16) pixels +0x80, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, // 0x0020 (32) pixels +0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, // 0x0030 (48) pixels +0xE0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, // 0x0040 (64) pixels +0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF0, 0x60, 0x40, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, // 0x0050 (80) pixels +0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x81, 0xFC, 0xFF, 0x0F, 0x03, 0x00, 0x00, 0x00, // 0x0060 (96) pixels +0xEE, 0x6F, 0x67, 0xFF, 0xFF, 0x7F, 0x71, 0x30, 0xF0, 0xFF, 0x3F, 0x39, 0x38, 0x18, 0x00, 0x01, // 0x0070 (112) pixels +0x00, 0xF8, 0xFF, 0x1F, 0x0F, 0x0C, 0x0D, 0x8D, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, // 0x0080 (128) pixels +0x00, 0xC0, 0xFF, 0x7F, 0x0F, 0x0C, 0x0D, 0x0D, 0x84, 0x80, 0x80, 0x07, 0x07, 0x83, 0xFF, 0xFF, // 0x0090 (144) pixels +0x1F, 0x3F, 0xFE, 0xF8, 0xF8, 0xFE, 0xDF, 0x03, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x1F, 0x00, // 0x00A0 (160) pixels +0x00, 0x80, 0x81, 0xC3, 0xE7, 0x7F, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x03, 0x00, // 0x00B0 (176) pixels +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x0F, 0x0F, 0x07, 0x00, // 0x00C0 (192) pixels +0x00, 0x06, 0x06, 0x3F, 0x1F, 0x0F, 0x0F, 0x0E, 0x06, 0x06, 0x06, 0x07, 0x07, 0x03, 0x00, 0x00, // 0x00D0 (208) pixels +0x00, 0x00, 0x06, 0x1F, 0x3F, 0x1F, 0x0F, 0x0E, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x03, 0x00, // 0x00E0 (224) pixels +0x06, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x18, 0x1C, 0x1F, // 0x00F0 (240) pixels +0x0F, 0x07, 0x06, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char pacman1[] ={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3E, 0x1C, // 0x0010 (16) pixels +0x0C, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels +0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, +}; + +const unsigned char pacman2[] ={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x7C, // 0x0010 (16) pixels +0x7C, 0x38, 0x20, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels +0xF9, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, +}; + +const unsigned char pacman3[] ={ +0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, // 0x0010 (16) pixels +0xF8, 0xF0, 0xE0, 0x80, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0020 (32) pixels +0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF9, 0x79, 0x19, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels +0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, +}; + +const unsigned char pill[] ={ +0x0E, 0x1F, 0x1F, 0x1F, 0x0E, +}; + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino new file mode 100644 index 0000000..836e944 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_NumberFonts/OLED_I2C_NumberFonts.ino @@ -0,0 +1,69 @@ +// OLED_I2C_NumberFonts +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; +extern uint8_t MediumNumbers[]; +extern uint8_t BigNumbers[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); +} + +void loop() +{ + for (int i=0; i<=10000; i++) + { + myOLED.setFont(MediumNumbers); + myOLED.printNumF(float(i)/3, 2, RIGHT, 0); + myOLED.setFont(BigNumbers); + myOLED.printNumI(i, RIGHT, 40); + myOLED.update(); + } + + myOLED.setFont(SmallFont); + myOLED.print("|", LEFT, 24); + myOLED.print("|", RIGHT, 24); + myOLED.update(); + delay(500); + for (int i=0; i<19; i++) + { + myOLED.print("\\", 7+(i*6), 24); + myOLED.update(); + delay(250); + } + myOLED.clrScr(); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino new file mode 100644 index 0000000..cfc13f2 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_Scrolling_Text/OLED_I2C_Scrolling_Text.ino @@ -0,0 +1,54 @@ +// OLED_I2C_Scrolling_Text +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); + randomSeed(analogRead(0)); +} + +void loop() +{ + int y = random(0, 56); + for (int i=128; i>=-(34*6); i--) + { + myOLED.print("OLED_I2C Scrolling Text Demo ", i, y); + myOLED.update(); + delay(50); + } +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino new file mode 100644 index 0000000..2eaf34d --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_TinyFont_View/OLED_I2C_TinyFont_View.ino @@ -0,0 +1,55 @@ +// OLED_I2C_TinyFont_View +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t TinyFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(TinyFont); +} + +void loop() +{ + myOLED.print(" !\"#$%&'()*+,-./", CENTER, 16); + myOLED.print("0123456789:;<=>?", CENTER, 22); + myOLED.print("@ABCDEFGHIJKLMNO", CENTER, 28); + myOLED.print("PQRSTUVWXYZ[\\]^_", CENTER, 34); + myOLED.print("`abcdefghijklmno", CENTER, 40); + myOLED.print("pqrstuvwxyz{|}~ ", CENTER, 46); + myOLED.update(); + + while (1); +} + + diff --git a/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino new file mode 100644 index 0000000..679a0c9 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/examples/chipKit/OLED_I2C_ViewFont/OLED_I2C_ViewFont.ino @@ -0,0 +1,73 @@ +// OLED_I2C_ViewFont +// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved +// web: http://www.RinkyDinkElectronics.com/ +// +// A quick demo of how to use my OLED_I2C library. +// +// To use the hardware I2C (TWI) interface of the chipKit you must connect +// the pins as follows: +// +// chipKit Uno32/uC32: +// ---------------------- +// Display: SDA pin -> Analog 4 +// SCL pin -> Analog 5 +// *** Please note that JP6 and JP8 must be in the I2C position (closest to the analog pins) +// +// chipKit Max32: +// ---------------------- +// Display: SDA pin -> Digital 20 (the pin labeled SDA) +// SCL pin -> Digital 21 (the pin labeled SCL) +// +// The chipKit boards does not have pull-up resistors on the hardware I2C interface +// so external pull-up resistors on the data and clock signals are required. +// +// You can connect the OLED display to any available pin but if you use any +// other than what is described above the library will fall back to +// a software-based, TWI-like protocol which will require exclusive access +// to the pins used. +// + +#include + +OLED myOLED(SDA, SCL, 8); + +extern uint8_t SmallFont[]; + +void setup() +{ + myOLED.begin(); + myOLED.setFont(SmallFont); +} + +void loop() +{ + myOLED.clrScr(); + myOLED.print("Upper case:", LEFT, 0); + myOLED.print("ABCDEFGHIJKLM", CENTER, 16); + myOLED.print("NOPQRSTUVWXYZ", CENTER, 24); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Lower case:", LEFT, 0); + myOLED.print("abcdefghijklm", CENTER, 16); + myOLED.print("nopqrstuvwxyz", CENTER, 24); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Numbers:", LEFT, 0); + myOLED.print("0123456789", CENTER, 16); + myOLED.update(); + delay (5000); + + myOLED.clrScr(); + myOLED.print("Special:", LEFT, 0); + myOLED.print("!\"#$%&'()*+,-.", CENTER, 16); + myOLED.print("/:;<=>?@[\\]^_`", CENTER, 24); + myOLED.print("{|}~", CENTER, 32); + myOLED.update(); + delay (5000); +} + + diff --git a/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM.h b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM.h new file mode 100644 index 0000000..49c0a5b --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM.h @@ -0,0 +1,127 @@ +void OLED::_convert_float(char *buf, double num, int width, byte prec) +{ + char format[10]; + + sprintf(format, "%%%i.%if", width, prec); + sprintf(buf, format, num); +} + + +void OLED::_initTWI() +{ + if ((_sda_pin == SDA) and (_scl_pin == SCL)) + { + twi = TWI1; + pmc_enable_periph_clk(WIRE_INTERFACE_ID); + PIO_Configure(g_APinDescription[PIN_WIRE_SDA].pPort, g_APinDescription[PIN_WIRE_SDA].ulPinType, g_APinDescription[PIN_WIRE_SDA].ulPin, g_APinDescription[PIN_WIRE_SDA].ulPinConfiguration); + PIO_Configure(g_APinDescription[PIN_WIRE_SCL].pPort, g_APinDescription[PIN_WIRE_SCL].ulPinType, g_APinDescription[PIN_WIRE_SCL].ulPin, g_APinDescription[PIN_WIRE_SCL].ulPinConfiguration); + NVIC_DisableIRQ(TWI1_IRQn); + NVIC_ClearPendingIRQ(TWI1_IRQn); + NVIC_SetPriority(TWI1_IRQn, 0); + NVIC_EnableIRQ(TWI1_IRQn); + + } + else if ((_sda_pin == SDA1) and (_scl_pin == SCL1)) + { + twi = TWI0; + pmc_enable_periph_clk(WIRE1_INTERFACE_ID); + PIO_Configure(g_APinDescription[PIN_WIRE1_SDA].pPort, g_APinDescription[PIN_WIRE1_SDA].ulPinType, g_APinDescription[PIN_WIRE1_SDA].ulPin, g_APinDescription[PIN_WIRE1_SDA].ulPinConfiguration); + PIO_Configure(g_APinDescription[PIN_WIRE1_SCL].pPort, g_APinDescription[PIN_WIRE1_SCL].ulPinType, g_APinDescription[PIN_WIRE1_SCL].ulPin, g_APinDescription[PIN_WIRE1_SCL].ulPinConfiguration); + NVIC_DisableIRQ(TWI0_IRQn); + NVIC_ClearPendingIRQ(TWI0_IRQn); + NVIC_SetPriority(TWI0_IRQn, 0); + NVIC_EnableIRQ(TWI0_IRQn); + } + + // activate internal pullups for twi. + digitalWrite(SDA, 1); + digitalWrite(SCL, 1); + + // Reset the TWI + twi->TWI_CR = TWI_CR_SWRST; + // TWI Slave Mode Disabled, TWI Master Mode Disabled. + twi->TWI_CR = TWI_CR_SVDIS; + twi->TWI_CR = TWI_CR_MSDIS; + // Set TWI Speed + twi->TWI_CWGR = (TWI_DIV << 16) | (TWI_SPEED << 8) | TWI_SPEED; + // Set master mode + twi->TWI_CR = TWI_CR_MSEN; +} + +void OLED::update() +{ + noInterrupts(); + _sendTWIcommand(SSD1306_SET_COLUMN_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(127); + + _sendTWIcommand(SSD1306_SET_PAGE_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(7); + + if (_use_hw) // Send TWI Start + { + // Set slave address and number of internal address bytes. + twi->TWI_MMR = (1 << 8) | (SSD1306_ADDR << 16); + // Set internal address bytes + twi->TWI_IADR = SSD1306_DATA_CONTINUE; + // Send start address + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_DATA_CONTINUE); + _waitForAck(); + } + + for (int b=0; b<1024; b++) // Send data + if (_use_hw) + { + twi->TWI_THR = scrbuf[b]; + while ((twi->TWI_SR & TWI_SR_TXRDY) != TWI_SR_TXRDY) {}; + } + else + { + _writeByte(scrbuf[b]); + _waitForAck(); + } + + if (_use_hw) // Send TWI Stop + { + // Send STOP condition + twi->TWI_CR = TWI_CR_STOP; + while ((twi->TWI_SR & TWI_SR_TXCOMP) != TWI_SR_TXCOMP) {}; + } + else + _sendStop(); + interrupts(); +} + +void OLED::_sendTWIcommand(uint8_t value) +{ + if (_use_hw) + { + // Set slave address and number of internal address bytes. + twi->TWI_MMR = (1 << 8) | (SSD1306_ADDR << 16); + // Set internal address bytes + twi->TWI_IADR = SSD1306_COMMAND; + + twi->TWI_THR = value; + while ((twi->TWI_SR & TWI_SR_TXRDY) != TWI_SR_TXRDY) {}; + + // Send STOP condition + twi->TWI_CR = TWI_CR_STOP; + while ((twi->TWI_SR & TWI_SR_TXCOMP) != TWI_SR_TXCOMP) {}; + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_COMMAND); + _waitForAck(); + _writeByte(value); + _waitForAck(); + _sendStop(); + } +} diff --git a/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM_defines.h b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM_defines.h new file mode 100644 index 0000000..3182890 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_ARM_defines.h @@ -0,0 +1,22 @@ +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) *reg &= ~bitmask +#define sbi(reg, bitmask) *reg |= bitmask +#define pulseClock cbi(P_SCK, B_SCK); asm ("nop"); sbi(P_SCK, B_SCK) + +#define fontbyte(x) cfont.font[x] +#define bitmapbyte(x) bitmap[x] + +#define bitmapdatatype unsigned char* + +#define SDA 20 +#define SCL 21 +#define SDA1 70 +#define SCL1 71 + +#define TWI_SPEED TWI_SPEED_400k // Set default TWI Speed +#define TWI_SPEED_100k 208 +#define TWI_SPEED_400k 101 + +#define TWI_DIV TWI_DIV_400k // Set divider for TWI Speed (must match TWI_SPEED setting) +#define TWI_DIV_100k 1 +#define TWI_DIV_400k 0 diff --git a/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32.h b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32.h new file mode 100644 index 0000000..7060b44 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32.h @@ -0,0 +1,168 @@ +#include "HardWire.h" +#define WIRE_WRITE HWIRE.write + + HardWire HWIRE(2,I2C_FAST_MODE); // stupid compiler + +void OLED::_convert_float(char *buf, double num, int width, byte prec) +{ + char format[10]; + + sprintf(format, "%%%i.%if", width, prec); + sprintf(buf, format, num); +} + + +void OLED::_initTWI() +{ + if ((_sda_pin == SDA) and (_scl_pin == SCL)) + { + + // HardWire HWIRE(1,I2C_FAST_MODE); // I2c1 + + HWIRE.begin(); + /* + twi = TWI1; + + pmc_enable_periph_clk(WIRE_INTERFACE_ID); + PIO_Configure(g_APinDescription[PIN_WIRE_SDA].pPort, g_APinDescription[PIN_WIRE_SDA].ulPinType, g_APinDescription[PIN_WIRE_SDA].ulPin, g_APinDescription[PIN_WIRE_SDA].ulPinConfiguration); + PIO_Configure(g_APinDescription[PIN_WIRE_SCL].pPort, g_APinDescription[PIN_WIRE_SCL].ulPinType, g_APinDescription[PIN_WIRE_SCL].ulPin, g_APinDescription[PIN_WIRE_SCL].ulPinConfiguration); + NVIC_DisableIRQ(TWI1_IRQn); + NVIC_ClearPendingIRQ(TWI1_IRQn); + NVIC_SetPriority(TWI1_IRQn, 0); + NVIC_EnableIRQ(TWI1_IRQn); + */ + + } + else if ((_sda_pin == SDA1) and (_scl_pin == SCL1)) + { + HWIRE.begin(); + // I2c2 + // HardWire HWIRE(2,I2C_FAST_MODE); + // HWIRE.begin(); + + /* + twi = TWI0; + + pmc_enable_periph_clk(WIRE1_INTERFACE_ID); + PIO_Configure(g_APinDescription[PIN_WIRE1_SDA].pPort, g_APinDescription[PIN_WIRE1_SDA].ulPinType, g_APinDescription[PIN_WIRE1_SDA].ulPin, g_APinDescription[PIN_WIRE1_SDA].ulPinConfiguration); + PIO_Configure(g_APinDescription[PIN_WIRE1_SCL].pPort, g_APinDescription[PIN_WIRE1_SCL].ulPinType, g_APinDescription[PIN_WIRE1_SCL].ulPin, g_APinDescription[PIN_WIRE1_SCL].ulPinConfiguration); + NVIC_DisableIRQ(TWI0_IRQn); + NVIC_ClearPendingIRQ(TWI0_IRQn); + NVIC_SetPriority(TWI0_IRQn, 0); + NVIC_EnableIRQ(TWI0_IRQn); + */ + } + + // activate internal pullups for twi. +// digitalWrite(SDA, 1); + //digitalWrite(SCL, 1); +/* + // Reset the TWI + twi->TWI_CR = TWI_CR_SWRST; + // TWI Slave Mode Disabled, TWI Master Mode Disabled. + twi->TWI_CR = TWI_CR_SVDIS; + twi->TWI_CR = TWI_CR_MSDIS; + // Set TWI Speed + twi->TWI_CWGR = (TWI_DIV << 16) | (TWI_SPEED << 8) | TWI_SPEED; + // Set master mode + twi->TWI_CR = TWI_CR_MSEN; + */ +} + +void OLED::update() +{ + //noInterrupts(); + _sendTWIcommand(SSD1306_SET_COLUMN_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(127); + + _sendTWIcommand(SSD1306_SET_PAGE_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(7); + + if (_use_hw) // Send TWI Start + { + HWIRE.beginTransmission(SSD1306_ADDR); + WIRE_WRITE(SSD1306_DATA_CONTINUE); + /* + // Set slave address and number of internal address bytes. + twi->TWI_MMR = (1 << 8) | (SSD1306_ADDR << 16); + // Set internal address bytes + twi->TWI_IADR = SSD1306_DATA_CONTINUE; + // Send start address + */ + + + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_DATA_CONTINUE); + _waitForAck(); + } + + for (int b=0; b<1024; b++) // Send data + if (_use_hw) + { + /* + twi->TWI_THR = scrbuf[b]; + while ((twi->TWI_SR & TWI_SR_TXRDY) != TWI_SR_TXRDY) {}; + */ + static byte aa=scrbuf[b]; + WIRE_WRITE(aa); + + } + else + { + _writeByte(scrbuf[b]); + _waitForAck(); + } + + if (_use_hw) // Send TWI Stop + { + HWIRE.endTransmission(); + /* + // Send STOP condition + twi->TWI_CR = TWI_CR_STOP; + while ((twi->TWI_SR & TWI_SR_TXCOMP) != TWI_SR_TXCOMP) {}; + */ + } + else + _sendStop(); + //interrupts(); +} + +void OLED::_sendTWIcommand(uint8_t value) +{ + if (_use_hw) + { + HWIRE.beginTransmission(SSD1306_ADDR); + WIRE_WRITE(SSD1306_COMMAND); + WIRE_WRITE(value); + HWIRE.endTransmission(); + /* + // Set slave address and number of internal address bytes. + twi->TWI_MMR = (1 << 8) | (SSD1306_ADDR << 16); + // Set internal address bytes + twi->TWI_IADR = SSD1306_COMMAND; + + twi->TWI_THR = value; + while ((twi->TWI_SR & TWI_SR_TXRDY) != TWI_SR_TXRDY) {}; + + // Send STOP condition + twi->TWI_CR = TWI_CR_STOP; + while ((twi->TWI_SR & TWI_SR_TXCOMP) != TWI_SR_TXCOMP) {}; + */ + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_COMMAND); + _waitForAck(); + _writeByte(value); + _waitForAck(); + _sendStop(); + } +} diff --git a/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32_defines.h b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32_defines.h new file mode 100644 index 0000000..c79a070 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/arm/HW_STM32_defines.h @@ -0,0 +1,22 @@ +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) *reg &= ~bitmask +#define sbi(reg, bitmask) *reg |= bitmask +#define pulseClock cbi(P_SCK, B_SCK); asm ("nop"); sbi(P_SCK, B_SCK) + +#define fontbyte(x) cfont.font[x] +#define bitmapbyte(x) bitmap[x] + +#define bitmapdatatype unsigned char* + +#define SDA1 0 +#define SCL1 1 +#define SDA 15 +#define SCL 16 + +#define TWI_SPEED TWI_SPEED_400k // Set default TWI Speed +#define TWI_SPEED_100k 208 +#define TWI_SPEED_400k 101 + +#define TWI_DIV TWI_DIV_400k // Set divider for TWI Speed (must match TWI_SPEED setting) +#define TWI_DIV_100k 1 +#define TWI_DIV_400k 0 diff --git a/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR.h b/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR.h new file mode 100644 index 0000000..9ded737 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR.h @@ -0,0 +1,103 @@ +void OLED::_convert_float(char *buf, double num, int width, byte prec) +{ + dtostrf(num, width, prec, buf); +} + +void OLED::_initTWI() +{ + // activate internal pullups for twi. + digitalWrite(SDA, HIGH); + digitalWrite(SCL, HIGH); + //delay(1); // Workaround for a linker bug + + // initialize twi prescaler and bit rate + __cbi2(TWSR, TWPS0); + __cbi2(TWSR, TWPS1); + TWBR = ((F_CPU / TWI_FREQ) - 16) / 2; + + // enable twi module, acks, and twi interrupt + TWCR = _BV(TWEN) | _BV(TWIE)/* | _BV(TWEA)*/; +} + +void OLED::update() +{ + noInterrupts(); + _sendTWIcommand(SSD1306_SET_COLUMN_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(127); + + _sendTWIcommand(SSD1306_SET_PAGE_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(7); + + if (_use_hw) // Send TWI Start + { + // Send start address + TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); + while ((TWCR & _BV(TWINT)) == 0) {}; + TWDR = SSD1306_ADDR<<1; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); + while ((TWCR & _BV(TWINT)) == 0) {}; + TWDR = SSD1306_DATA_CONTINUE; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); + while ((TWCR & _BV(TWINT)) == 0) {}; + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_DATA_CONTINUE); + _waitForAck(); + } + + for (int b=0; b<1024; b++) // Send data + if (_use_hw) + { + TWDR = scrbuf[b]; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); // Clear TWINT to proceed + while ((TWCR & _BV(TWINT)) == 0) {}; // Wait for TWI to be ready + } + else + { + _writeByte(scrbuf[b]); + _waitForAck(); + } + + if (_use_hw) // Send TWI Stop + TWCR = _BV(TWEN)| _BV(TWINT) | _BV(TWSTO); // Send STOP + else + _sendStop(); + interrupts(); +} + +void OLED::_sendTWIcommand(uint8_t value) +{ + if (_use_hw) + { + // Send start address + TWCR = _BV(TWEN) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA); // Send START + while ((TWCR & _BV(TWINT)) == 0) {}; // Wait for TWI to be ready + TWDR = SSD1306_ADDR<<1; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); // Clear TWINT to proceed + while ((TWCR & _BV(TWINT)) == 0) {}; // Wait for TWI to be ready + + TWDR = SSD1306_COMMAND; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); // Clear TWINT to proceed + while ((TWCR & _BV(TWINT)) == 0) {}; // Wait for TWI to be ready + TWDR = value; + TWCR = _BV(TWEN) | _BV(TWINT) | _BV(TWEA); // Clear TWINT to proceed + while ((TWCR & _BV(TWINT)) == 0) {}; // Wait for TWI to be ready + + TWCR = _BV(TWEN)| _BV(TWINT) | _BV(TWSTO); // Send STOP + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_COMMAND); + _waitForAck(); + _writeByte(value); + _waitForAck(); + _sendStop(); + } +} diff --git a/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR_defines.h b/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR_defines.h new file mode 100644 index 0000000..92a4afa --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/avr/HW_AVR_defines.h @@ -0,0 +1,14 @@ +// *** Hardwarespecific defines *** +#define __cbi(reg, bitmask) *reg &= ~bitmask +#define __cbi2(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#define __sbi(reg, bitmask) *reg |= bitmask +#define pulseClock __cbi(P_SCK, B_SCK); asm ("nop"); __sbi(P_SCK, B_SCK) + +#define fontbyte(x) pgm_read_byte(&cfont.font[x]) +#define bitmapbyte(x) pgm_read_byte(&bitmap[x]) + +#define bitmapdatatype uint8_t* + +#ifndef TWI_FREQ + #define TWI_FREQ 400000L +#endif diff --git a/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32.h b/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32.h new file mode 100644 index 0000000..df53aa0 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32.h @@ -0,0 +1,121 @@ +void OLED::_convert_float(char *buf, double num, int width, byte prec) +{ + char format[10]; + + sprintf(format, "%%%i.%if", width, prec); + sprintf(buf, format, num); +} + +inline void _waitForIdleBus() { while (I2C1CON & 0x1f) {} } + +void OLED::_initTWI() +{ + uint32_t tpgd; + + pinMode(SDA, OUTPUT); + digitalWrite(SDA, HIGH); + IFS0CLR = 0xE0000000; // Clear Interrupt Flag + IEC0CLR = 0xE0000000; // Disable Interrupt + I2C1CONCLR = (1 << _I2CCON_ON); // Disable I2C interface + tpgd = ((F_CPU / 8) * 104) / 125000000; + I2C1BRG = (F_CPU / (2 * TWI_FREQ) - tpgd) - 2; // Set I2C Speed + I2C1ADD = SSD1306_ADDR; // Set I2C device address + I2C1CONSET = (1 << _I2CCON_ON) | (1 << _I2CCON_STREN); // Enable I2C Interface +} + +void OLED::update() +{ + noInterrupts(); + _sendTWIcommand(SSD1306_SET_COLUMN_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(127); + + _sendTWIcommand(SSD1306_SET_PAGE_ADDR); + _sendTWIcommand(0); + _sendTWIcommand(7); + + if (_use_hw) // Send TWI Start + { + _waitForIdleBus(); // Wait for I2C bus to be Idle before starting + I2C1CONSET = (1 << _I2CCON_SEN); // Send start condition + if (I2C1STAT & (1 << _I2CSTAT_BCL)) { return; } // Check if there is a bus collision + while (I2C1CON & (1 << _I2CCON_SEN)) {} // Wait for start condition to finish + I2C1TRN = (SSD1306_ADDR<<1); // Send device Write address + while (I2C1STAT & (1 << _I2CSTAT_IWCOL)) // Check if there is a Write collision + { + I2C1STATCLR = (1 << _I2CSTAT_IWCOL); // Clear Write collision flag + I2C1TRN = (SSD1306_ADDR<<1); // Retry send device Write address + } + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK + I2C1TRN = SSD1306_DATA_CONTINUE; // Send the command for continous data + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_DATA_CONTINUE); + _waitForAck(); + } + + for (int b=0; b<1024; b++) // Send data + if (_use_hw) + { + I2C1TRN = scrbuf[b]; + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} + } + else + { + _writeByte(scrbuf[b]); + _waitForAck(); + } + + if (_use_hw) // Send TWI Stop + { + I2C1CONSET = (1 << _I2CCON_PEN); // Send stop condition + while (I2C1CON & (1 << _I2CCON_PEN)) {} // Wait for stop condition to finish + } + else + _sendStop(); + interrupts(); +} + +void OLED::_sendTWIcommand(uint8_t value) +{ + if (_use_hw) + { + _waitForIdleBus(); // Wait for I2C bus to be Idle before starting + I2C1CONSET = (1 << _I2CCON_SEN); // Send start condition + if (I2C1STAT & (1 << _I2CSTAT_BCL)) { return; } // Check if there is a bus collision + while (I2C1CON & (1 << _I2CCON_SEN)) {} // Wait for start condition to finish + I2C1TRN = (SSD1306_ADDR<<1); // Send device Write address + while (I2C1STAT & (1 << _I2CSTAT_IWCOL)) // Check if there is a Write collision + { + I2C1STATCLR = (1 << _I2CSTAT_IWCOL); // Clear Write collision flag + I2C1TRN = (SSD1306_ADDR<<1); // Retry send device Write address + } + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK + I2C1TRN = SSD1306_COMMAND; // Send the 1st data byte + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK + I2C1TRN = value; // Send the 2nd data byte + while (I2C1STAT & (1 << _I2CSTAT_TRSTAT)) {} // Wait for transmit to finish + while (I2C1STAT & (1 << _I2CSTAT_ACKSTAT)) {} // Wait for ACK + I2C1CONSET = (1 << _I2CCON_PEN); // Send stop condition + while (I2C1CON & (1 << _I2CCON_PEN)) {} // Wait for stop condition to finish + } + else + { + _sendStart(SSD1306_ADDR<<1); + _waitForAck(); + _writeByte(SSD1306_COMMAND); + _waitForAck(); + _writeByte(value); + _waitForAck(); + _sendStop(); + } +} diff --git a/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32_defines.h b/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32_defines.h new file mode 100644 index 0000000..a14c1f9 --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/hardware/pic32/HW_PIC32_defines.h @@ -0,0 +1,30 @@ +// *** Hardwarespecific defines *** +#define __cbi(reg, bitmask) (*(reg + 1)) = bitmask +#define __sbi(reg, bitmask) (*(reg + 2)) = bitmask +#define pulseClock digitalWrite(SCK_Pin, LOW); digitalWrite(SCK_Pin, HIGH) + +#define fontbyte(x) cfont.font[x] +#define bitmapbyte(x) bitmap[x] + +#define PROGMEM +#define bitmapdatatype unsigned char* + +#if !defined(_UP_MCU_) + #if defined(__32MX320F128H__) + #define SDA 18 // A4 (Remeber to set the jumper correctly) + #define SCL 19 // A5 (Remeber to set the jumper correctly) + #elif defined(__32MX340F512H__) + #define SDA 18 // A4 (Remeber to set the jumper correctly) + #define SCL 19 // A5 (Remeber to set the jumper correctly) + #elif defined(__32MX795F512L__) + #define SDA 20 // Digital 20 + #define SCL 21 // Digital 21 + #else + #error "Unsupported PIC32 MCU!" + #endif +#endif + +#ifndef TWI_FREQ + #define TWI_FREQ 400000L +#endif + diff --git a/STM32F1/libraries/OLED_I2C/keywords.txt b/STM32F1/libraries/OLED_I2C/keywords.txt new file mode 100644 index 0000000..4f144ca --- /dev/null +++ b/STM32F1/libraries/OLED_I2C/keywords.txt @@ -0,0 +1,31 @@ +OLED KEYWORD1 + +begin KEYWORD2 +setBrightness KEYWORD2 +update KEYWORD2 +clrScr KEYWORD2 +fillScr KEYWORD2 +invert KEYWORD2 +setPixel KEYWORD2 +clrPixel KEYWORD2 +invPixel KEYWORD2 +invertText KEYWORD2 +print KEYWORD2 +printNumI KEYWORD2 +printNumF KEYWORD2 +setFont KEYWORD2 +drawBitmap KEYWORD2 +drawLine KEYWORD2 +clrLine KEYWORD2 +drawRect KEYWORD2 +clrRect KEYWORD2 +drawRoundRect KEYWORD2 +clrRoundRect KEYWORD2 +drawCircle KEYWORD2 +clrCircle KEYWORD2 + +LEFT LITERAL1 +RIGHT LITERAL1 +CENTER LITERAL1 + +RST_NOT_IN_USE LITERAL1