Example source code for MAXREFDES101.

Dependencies:   max32630fthr Adafruit_FeatherOLED USBDevice

Files at this revision

API Documentation at this revision

Comitter:
gmehmet
Date:
Wed Apr 10 14:56:25 2019 +0300
Parent:
0:07d28b5db986
Child:
2:58c2d53dea38
Commit message:
upload from local

Changed in this revision

.checkout Show annotated file Show diff for this revision Revisions of this file
.config Show annotated file Show diff for this revision Revisions of this file
.mbed Show annotated file Show diff for this revision Revisions of this file
Drivers/Adafruit_FeatherOLED.lib Show annotated file Show diff for this revision Revisions of this file
Drivers/BLE_ICARUS/BLE_ICARUS.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/BLE_ICARUS/BLE_ICARUS.h Show annotated file Show diff for this revision Revisions of this file
Drivers/BMI160/bmi160.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/BMI160/bmi160.h Show annotated file Show diff for this revision Revisions of this file
Drivers/BMI160/bmi160_i2c.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/BMI160/bmi160_spi.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/Arial10x10.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/Arial28x28.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/BufferedDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/BufferedDisplay.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/GraphicsDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/GraphicsDisplay.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/LCDSettings.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/LS013B7DH03.ZIP Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/LS013B7DH03.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/LS013B7DH03.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/Neu44x36.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/TextDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/TextDisplay.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/UbuntuCondensed38x47.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/mbed_logo.c Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/mbed_logo.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/ubuntucondensed16x21.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/ubuntucondensed20x26.h Show annotated file Show diff for this revision Revisions of this file
Drivers/LS013B7DH03/ubuntucondensed22x28.h Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30001/MAX30001.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30001/MAX30001.h Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30001/MAX30001_Helper.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30001/MAX30001_Helper.h Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30205/MAX30205.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX30205/MAX30205.h Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX8614X/MAX8614X.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX8614X/MAX8614X.h Show annotated file Show diff for this revision Revisions of this file
Drivers/MAX8614X/MAX8614X_agc.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MaximSensor/MaximSensor.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/MaximSensor/MaximSensor.h Show annotated file Show diff for this revision Revisions of this file
Drivers/SPIBlockDevice/SPIFBlockDevice.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/SPIBlockDevice/SPIFBlockDevice.h Show annotated file Show diff for this revision Revisions of this file
Drivers/USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
Drivers/USBMSD_BD/USBMSD_BD.cpp Show annotated file Show diff for this revision Revisions of this file
Drivers/USBMSD_BD/USBMSD_BD.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/DeviceStudio/DSInterface.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/DeviceStudio/DSInterface.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/EcgComm/EcgComm.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/EcgComm/EcgComm.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/EcgComm/EcgComm_Defines.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SensorComm/SensorComm.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SensorComm/SensorComm.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSBootloader/SSBootloaderComm.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSBootloader/SSBootloaderComm.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSGenericCmd/SSGenericCmd.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSGenericCmd/SSGenericCmd.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSMAX8614X/SSMAX8614XComm.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/SmartSensorComm/SSMAX8614X/SSMAX8614XComm.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/TempComm/TempComm.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SensorComm/TempComm/TempComm.h Show annotated file Show diff for this revision Revisions of this file
Interfaces/SmartSensor/SSInterface.cpp Show annotated file Show diff for this revision Revisions of this file
Interfaces/SmartSensor/SSInterface.h Show annotated file Show diff for this revision Revisions of this file
Kconfig Show annotated file Show diff for this revision Revisions of this file
Makefile Show annotated file Show diff for this revision Revisions of this file
Platforms/max32630fthr.lib Show annotated file Show diff for this revision Revisions of this file
Platforms/max32630hsp/MAX20303/MAX20303.cpp Show annotated file Show diff for this revision Revisions of this file
Platforms/max32630hsp/MAX20303/MAX20303.h Show annotated file Show diff for this revision Revisions of this file
Platforms/max32630hsp/max32630hsp.cpp Show annotated file Show diff for this revision Revisions of this file
Platforms/max32630hsp/max32630hsp.h Show annotated file Show diff for this revision Revisions of this file
Utilities/CRC8.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/CRC8.h Show annotated file Show diff for this revision Revisions of this file
Utilities/EventStats.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/EventStats.h Show annotated file Show diff for this revision Revisions of this file
Utilities/LEDStatus.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/LEDStatus.h Show annotated file Show diff for this revision Revisions of this file
Utilities/Peripherals.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/Peripherals.h Show annotated file Show diff for this revision Revisions of this file
Utilities/WatchInterface.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/WatchInterface.h Show annotated file Show diff for this revision Revisions of this file
Utilities/mem_debug.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/mem_debug.h Show annotated file Show diff for this revision Revisions of this file
Utilities/mxm_assert.h Show annotated file Show diff for this revision Revisions of this file
Utilities/queue.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/queue.h Show annotated file Show diff for this revision Revisions of this file
Utilities/utils.cpp Show annotated file Show diff for this revision Revisions of this file
Utilities/utils.h Show annotated file Show diff for this revision Revisions of this file
build_version.h Show annotated file Show diff for this revision Revisions of this file
debug_oldmbedos.json Show annotated file Show diff for this revision Revisions of this file
doxygen.conf Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_os_patches/.gitattributes Show annotated file Show diff for this revision Revisions of this file
mbed_os_patches/buttoninterrupt.patch Show annotated file Show diff for this revision Revisions of this file
mbed_os_patches/fffix.patch Show annotated file Show diff for this revision Revisions of this file
mbed_os_patches/rtc.patch Show annotated file Show diff for this revision Revisions of this file
mbed_settings.py Show annotated file Show diff for this revision Revisions of this file
mbed_settings.pyc Show annotated file Show diff for this revision Revisions of this file
patches/.gitattributes Show annotated file Show diff for this revision Revisions of this file
patches/0001-porting-MAX32625PICO-to-mbed-os-5.patch Show annotated file Show diff for this revision Revisions of this file
patches/USBDevice.patch Show annotated file Show diff for this revision Revisions of this file
patches/filesystem.patch Show annotated file Show diff for this revision Revisions of this file
version.h Show annotated file Show diff for this revision Revisions of this file
waerables_MBED.launch Show annotated file Show diff for this revision Revisions of this file
werror_build_profile.json Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.config	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,100 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# MAXIM MAX326XXX mBED EVKit platform configuration
+#
+#CONFIG_CONFIG_NAME="icarus_hsp3_0"
+#CONFIG_CONFIG_NAME="Pegasus_MAX86140_SmartSensor"
+#CONFIG_CONFIG_NAME="Pegasus_MAX30101_SmartSensor"
+
+#
+# Platform setup
+
+CONFIG_PLATFORM_MAX32630HSP=y
+
+CONFIG_MAXIM_PLATFORM_NAME="icarus"
+
+
+#
+# ECG Sensor setup
+#
+CONFIG_ENABLE_ECG=y
+CONFIG_ECG_MAX30001=y
+
+#
+# TP Sensor setup
+#
+CONFIG_ENABLE_TP=y
+CONFIG_TP_MAX30205=y
+
+#
+# Accelerometer setup
+#
+CONFIG_ENABLE_ACCEL=y
+
+
+#
+# SmartSensor setup
+#
+CONFIG_ENABLE_SMARTSENSOR=y
+CONFIG_ENABLE_SS_BOOTLOADER=y
+CONFIG_ENABLE_SS_MAX8614X=y
+
+
+#
+# Bootloader Configuration
+#
+CONFIG_BOOTLOADER_USES_MFIO=y
+
+#
+# DISPLAY setup
+#
+CONFIG_LCD_LS013B7DH03=y
+CONFIG_LCD_WATCHINTERFACE=y
+
+
+#
+# Algorithm setup
+#
+CONFIG_ENABLE_WHRM_AND_SPO2=y
+
+
+
+
+#
+# BLE setup
+#
+CONFIG_ENABLE_BLE=y
+CONFIG_USE_BLE_TICKER_TO_CHECK_TRANSFER=y
+
+#
+# Data streaming setup
+#
+#CONFIG_ENABLE_BLETEST_COMM=y
+CONFIG_ENABLE_SS_GENERICCMDCOMM=y
+
+#
+# Memory debug setup
+#
+# CONFIG_ENABLE_MEMORY_DEBUG is not set
+
+#
+# LED status setup
+#
+CONFIG_ENABLE_LED_STATUS=y
+
+#
+# EventStat Setup
+#
+#CONFIG_ENABLE_EVENTSTATS=y
+
+#
+# Debug messages setup
+#
+#CONFIG_SHOW_DEBUG_MSGS=y
+#CONFIG_SHOW_INFO_MSGS=y
+#CONFIG_SHOW_I2C_DEBUG_MESSAGES=y
+
+
+#File Storage System. Either enable or disable both
+CONFIG_ENABLE_MX25U=y
+CONFIG_ENABLE_USBMSD=y
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.mbed	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,2 @@
+TARGET=MAX32630FTHR
+TOOLCHAIN=GCC_ARM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/Adafruit_FeatherOLED.lib	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/switches/code/Adafruit_FeatherOLED/#a267f00528be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BLE_ICARUS/BLE_ICARUS.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,255 @@
+#include "BLE_ICARUS.h"
+
+#include "../../Utilities/mxm_assert.h"
+#include "queue.h"
+#include "Peripherals.h"
+#include "../../version.h"
+
+
+UUID customServiceUUID("00001523-1212-efde-1523-785feabcd123");
+UUID notifyCharUUID(  "00001011-1212-efde-1523-785feabcd123");
+UUID configRWCharUUID("00001027-1212-efde-1523-785feabcd123");
+
+const static char     DEVICE_NAME[]        = FIRMWARE_VERSION;
+static const uint16_t uuid16_list[]        = {0xFFFF}; //Custom UUID, FFFF is reserved for development
+
+// BLE defines
+#define BLE_TICKER_PERIOD   0.050			//Ticker period in order of seconds
+#define BLE_CONN_INT_PACKET 2			    //Ticker period in order of seconds
+#define BLE_NOTIFY_CHAR_ARR_SIZE    20
+#define BLE_READWRITE_CHAR_ARR_SIZE 16
+#define MAX_BLE_QUEUE 128
+// end of BLE defines
+
+#if defined(USE_BLE_TICKER_TO_CHECK_TRANSFER)
+Ticker TICKER_BLE;
+static volatile unsigned char BLE_CAN_TRANSFER = 0;
+
+static void Ble_Can_Transfer_Toggle(){
+	BLE_CAN_TRANSFER = true;
+}
+
+static inline char Ble_Can_Transfer_Check(){
+	return BLE_CAN_TRANSFER;
+}
+
+static inline void Ble_Can_Transfer_Set(unsigned char en){
+	BLE_CAN_TRANSFER = en;
+}
+
+#endif
+
+/* Set Up custom Characteristics */
+static uint8_t notifyValue[BLE_NOTIFY_CHAR_ARR_SIZE] = {0};
+GattCharacteristic notifyChar(notifyCharUUID, notifyValue, BLE_NOTIFY_CHAR_ARR_SIZE, BLE_NOTIFY_CHAR_ARR_SIZE, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
+
+static uint8_t configValue[BLE_READWRITE_CHAR_ARR_SIZE] = {3,0,254,37};
+ReadWriteArrayGattCharacteristic<uint8_t, sizeof(configValue)> writeChar(configRWCharUUID, configValue);
+
+/* Set up custom service */
+GattCharacteristic *characteristics[] = {&writeChar,&notifyChar};
+GattService        customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
+
+// Temporary Fixes to be removed
+volatile BLE_State bleState = BLE_STARTING;
+
+// end of Temporary Fixes to be removed
+
+// sc...
+struct queue_t BLEQUEUE;
+static uint8_t BLEOutBuffer[BLE_NOTIFY_CHAR_ARR_SIZE * MAX_BLE_QUEUE];
+
+static DSInterface *BLE_DS_INTERFACE;
+
+
+/*
+ *  Handle writes to writeCharacteristic
+ */
+void writeCharCallback(const GattWriteCallbackParams *params)
+{
+	uint8_t data[BLE_READWRITE_CHAR_ARR_SIZE] = {0};
+	/* Check to see what characteristic was written, by handle */
+	printf("writeCharCallback %p\r\n", Thread::gettid());
+	if(params->handle == writeChar.getValueHandle()) {
+		printf("Data received: length = %d, data = 0x",params->len);
+		for(int x=0; x < params->len; x++) {
+			if ((BLE_DS_INTERFACE != NULL) && (params->data[x] != 0)) {
+				BLE_DS_INTERFACE->build_command((char)params->data[x]);
+			}
+			printf("%x-", params->data[x]);
+		}
+		printf("\n\r");
+	}
+	/* Update the notifyChar with the value of writeChar */
+	BLE::Instance(BLE::DEFAULT_INSTANCE).gattServer().write(writeChar.getValueHandle(), data, BLE_READWRITE_CHAR_ARR_SIZE);
+}
+
+/**
+ * This function is called when the ble initialization process has failed
+ */
+void onBleInitError(BLE &ble, ble_error_t error)
+{
+	printf("errro %d\r\n", __LINE__);
+	/* Avoid compiler warnings */
+	(void) ble;
+	(void) error;
+	/* Initialization error handling should go here */
+}
+
+/* Restart Advertising on disconnection*/
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+	pr_debug("disconnectionCallback %p\r\n", Thread::gettid());
+#if defined(USE_BLE_TICKER_TO_CHECK_TRANSFER)
+	TICKER_BLE.detach();
+	pr_debug("detached disconnectionCallback\r\n");
+	Ble_Can_Transfer_Set(false);
+#endif
+	bleState = BLE_DISCONNECTED;
+	BLE::Instance().gap().startAdvertising();
+	BLE_DS_INTERFACE->ds_set_ble_status(false);
+	queue_reset(&BLEQUEUE);
+}
+
+/* Connection */
+void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
+{
+	pr_err("connectionCallback %p\r\n", Thread::gettid());
+
+	Gap::ConnectionParams_t newParams = {
+		.minConnectionInterval = 6,			/**< Minimum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
+		.maxConnectionInterval = 9,			/**< Maximum Connection Interval in 1.25 ms units, see BLE_GAP_CP_LIMITS.*/
+		.slaveLatency = 0,					/**< Slave Latency in number of connection events, see BLE_GAP_CP_LIMITS.*/
+		.connectionSupervisionTimeout = 600 /**< Connection Supervision Timeout in 10 ms units, see BLE_GAP_CP_LIMITS.*/
+	};
+
+	BLE::Instance().gap().updateConnectionParams(params->handle, &newParams);
+	BLE::Instance().gap().stopAdvertising();
+	BLE_DS_INTERFACE->ds_set_ble_status(true);
+#if defined(USE_BLE_TICKER_TO_CHECK_TRANSFER)
+	TICKER_BLE.attach(&Ble_Can_Transfer_Toggle, BLE_TICKER_PERIOD);
+	pr_debug("Attached connectionCallback\r\n");
+#endif
+	//m.sensor_enable(1);
+	bleState = BLE_CONNECTED;
+}
+
+/**
+ * Callback triggered when the ble initialization process has finished
+ */
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
+{
+	int ret;
+	BLE&        ble   = params->ble;
+	ble_error_t error = params->error;
+
+	if (error != BLE_ERROR_NONE) {
+		printf("errro %d\r\n", __LINE__);
+		/* In case of error, forward the error handling to onBleInitError */
+		onBleInitError(ble, error);
+		printf("errro %d\r\n", __LINE__);
+		return;
+	}
+	/* Ensure that it is the default instance of BLE */
+	if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
+		printf("errro %d\r\n", __LINE__);
+		return;
+	}
+	ble.gap().onDisconnection(disconnectionCallback);
+	ble.gap().onConnection(connectionCallback);
+	ble.gattServer().onDataWritten(writeCharCallback);
+	/* Setup advertising */
+	ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
+	ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
+	ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
+	ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
+	ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_TAG);
+	ble.gap().setAdvertisingInterval(100); // 100ms.
+	/* Add our custom service */
+	ble.gattServer().addService(customService);
+	printf("bleInitComplete\n");
+	ble.gap().startAdvertising();
+
+	ret = queue_init(&BLEQUEUE, BLEOutBuffer, BLE_NOTIFY_CHAR_ARR_SIZE, BLE_NOTIFY_CHAR_ARR_SIZE * MAX_BLE_QUEUE);
+	if(ret != 0)
+		printf("queue_init has failed\r\n");
+}
+
+int BLE_Icarus_TransferData(uint8_t data_transfer[20]){
+	int ret;
+	ret = BLE::Instance(BLE::DEFAULT_INSTANCE).gattServer().write(notifyChar.getValueHandle(), data_transfer, 20);
+	return ret;
+}
+
+int BLE_Icarus_TransferDataFromQueue(){
+	int ret;
+	uint8_t data_transfer[20];
+	unsigned char i;
+
+	if (BLEQUEUE.num_item >= 1) {
+#if defined(USE_BLE_TICKER_TO_CHECK_TRANSFER)
+		if(!Ble_Can_Transfer_Check())
+			return 0;
+#endif
+		for(i = 0; i < BLE_CONN_INT_PACKET; ++i){
+			ret = dequeue(&BLEQUEUE, data_transfer);
+			if(ret < 0)
+				break;
+			pr_debug("dequeued data for tx, %d remain\r\n", BLEQUEUE.num_item);
+			BLE::Instance(BLE::DEFAULT_INSTANCE).gattServer().write(notifyChar.getValueHandle(), data_transfer, 20);
+		}
+#if defined(USE_BLE_TICKER_TO_CHECK_TRANSFER)
+		TICKER_BLE.attach(&Ble_Can_Transfer_Toggle, BLE_TICKER_PERIOD);
+		Ble_Can_Transfer_Set(false);
+#endif
+	}
+
+	return 0;
+}
+
+
+//TODO: check that function for memory safety (no overflow should occur)
+int BLE_Icarus_AddtoQueue(uint8_t *data_transfer, int32_t buf_size, int32_t data_size) {
+	int ret = 0;
+	//printf("size is: %d\r\n", size);
+	// TODO: Append a known character to the byte array in case size is
+	// less than 20 bytes
+	while ((data_size % BLE_NOTIFY_CHAR_ARR_SIZE) && data_size < buf_size)
+		data_transfer[data_size++] = 0;
+	mxm_assert_msg(!(data_size % 20), "BLE packet size must be multiple of 20 bytes");
+
+	while(data_size > 0){
+		ret = enqueue(&BLEQUEUE, data_transfer);
+		data_size -= BLE_NOTIFY_CHAR_ARR_SIZE;
+		data_transfer += BLE_NOTIFY_CHAR_ARR_SIZE;
+	}
+
+	if(ret != 0)
+		printf("BLE_Icarus_AddtoQueue has failed\r\n");
+
+	return ret;
+}
+
+
+int BLE_Icarus_SetDSInterface(DSInterface *comm_obj) {
+	BLE_DS_INTERFACE = comm_obj;
+	return 0;
+}
+
+bool BLE_Icarus_Interface_Exists()
+{
+	return (bleState == BLE_CONNECTED);
+}
+
+int BLE_ICARUS_Get_Mac_Address(char MacAdress[6]){
+    /* Print out device MAC address to the console*/
+    Gap::AddressType_t addr_type;
+    Gap::Address_t address;
+    if(BLE::Instance().gap().getAddress(&addr_type, address) != 0)
+    	return -1;
+    for (int i = 5; i >= 0; i--){
+    	MacAdress[5-i] = address[i];
+	}
+	pr_info("BLE_ADV_NAME:%s", DEVICE_NAME);
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BLE_ICARUS/BLE_ICARUS.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,66 @@
+#ifndef _BLE_ICARUS_H_
+#define _BLE_ICARUS_H_
+
+
+#include "mbed.h"
+#include "ble/BLE.h"
+#include "DSInterface.h"
+
+
+
+
+
+
+
+enum BLE_State {
+	BLE_DOWN,
+	BLE_STARTING,
+	BLE_ADVERTISING,
+	BLE_CONNECTED,
+	BLE_DISCONNECTED,
+};
+
+extern volatile BLE_State bleState;
+
+/**
+ * Callback triggered when the ble initialization process has finished
+ */
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params);
+
+int BLE_Icarus_TransferData(uint8_t data_transfer[20]);
+
+int BLE_Icarus_AddtoQueue(uint8_t *data_transfer, int32_t buf_size, int32_t data_size);
+
+int BLE_Icarus_SetDSInterface(DSInterface *comm_obj);
+
+int BLE_Icarus_TransferDataFromQueue();
+
+bool BLE_Icarus_Interface_Exists();
+
+int BLE_ICARUS_Get_Mac_Address(char MacAdress[6]);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BMI160/bmi160.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,724 @@
+/**********************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+**********************************************************************/
+
+
+#include "bmi160.h"
+
+
+const struct BMI160::AccConfig BMI160::DEFAULT_ACC_CONFIG = {SENS_2G,
+                                                             ACC_US_OFF,
+                                                             ACC_BWP_2,
+                                                             ACC_ODR_8};
+
+const struct BMI160::GyroConfig BMI160::DEFAULT_GYRO_CONFIG = {DPS_2000,
+                                                               GYRO_BWP_2,
+                                                               GYRO_ODR_8};
+
+
+//*****************************************************************************
+int32_t BMI160::setSensorPowerMode(Sensors sensor, PowerModes pwrMode)
+{
+    int32_t rtnVal = -1;
+
+    switch(sensor)
+    {
+        case MAG:
+            rtnVal = writeRegister(CMD, (MAG_SET_PMU_MODE | pwrMode));
+        break;
+
+        case GYRO:
+            rtnVal = writeRegister(CMD, (GYR_SET_PMU_MODE | pwrMode));
+        break;
+
+        case ACC:
+            rtnVal = writeRegister(CMD, (ACC_SET_PMU_MODE | pwrMode));
+        break;
+
+        default:
+            rtnVal = -1;
+        break;
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::setSensorConfig(const AccConfig &config)
+{
+    uint8_t data[2];
+
+    data[0] = ((config.us << ACC_US_POS) | (config.bwp << ACC_BWP_POS) |
+               (config.odr << ACC_ODR_POS));
+    data[1] = config.range;
+
+    return writeBlock(ACC_CONF, ACC_RANGE, data);
+}
+
+
+//*****************************************************************************
+int32_t BMI160::setSensorConfig(const GyroConfig &config)
+{
+    uint8_t data[2];
+
+    data[0] = ((config.bwp << GYRO_BWP_POS) | (config.odr << GYRO_ODR_POS));
+    data[1] = config.range;
+
+    return writeBlock(GYR_CONF, GYR_RANGE, data);
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorConfig(AccConfig &config)
+{
+    uint8_t data[2];
+    int32_t rtnVal = readBlock(ACC_CONF, ACC_RANGE, data);
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        config.range = static_cast<BMI160::AccRange>(
+        (data[1] & ACC_RANGE_MASK));
+        config.us = static_cast<BMI160::AccUnderSampling>(
+        ((data[0] & ACC_US_MASK) >> ACC_US_POS));
+        config.bwp = static_cast<BMI160::AccBandWidthParam>(
+        ((data[0] & ACC_BWP_MASK) >> ACC_BWP_POS));
+        config.odr = static_cast<BMI160::AccOutputDataRate>(
+        ((data[0] & ACC_ODR_MASK) >> ACC_ODR_POS));
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorConfig(GyroConfig &config)
+{
+    uint8_t data[2];
+    int32_t rtnVal = readBlock(GYR_CONF, GYR_RANGE, data);
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        config.range = static_cast<BMI160::GyroRange>(
+        (data[1] & GYRO_RANGE_MASK));
+        config.bwp = static_cast<BMI160::GyroBandWidthParam>(
+        ((data[0] & GYRO_BWP_MASK) >> GYRO_BWP_POS));
+        config.odr = static_cast<BMI160::GyroOutputDataRate>(
+        ((data[0] & GYRO_ODR_MASK) >> GYRO_ODR_POS));
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorAxis(SensorAxis axis, AxisData &data, AccRange range)
+{
+    uint8_t localData[2];
+    int32_t rtnVal;
+
+    switch(axis)
+    {
+        case X_AXIS:
+            rtnVal = readBlock(DATA_14, DATA_15, localData);
+        break;
+
+        case Y_AXIS:
+            rtnVal = readBlock(DATA_16, DATA_17, localData);
+        break;
+
+        case Z_AXIS:
+            rtnVal = readBlock(DATA_18, DATA_19, localData);
+        break;
+
+        default:
+            rtnVal = -1;
+        break;
+    }
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.raw = ((localData[1] << 8) | localData[0]);
+        switch(range)
+        {
+            case SENS_2G:
+                data.scaled = (data.raw/SENS_2G_LSB_PER_G);
+            break;
+
+            case SENS_4G:
+                data.scaled = (data.raw/SENS_4G_LSB_PER_G);
+            break;
+
+            case SENS_8G:
+                data.scaled = (data.raw/SENS_8G_LSB_PER_G);
+            break;
+
+            case SENS_16G:
+                data.scaled = (data.raw/SENS_16G_LSB_PER_G);
+            break;
+        }
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorAxis(SensorAxis axis, AxisData &data, GyroRange range)
+{
+    uint8_t localData[2];
+    int32_t rtnVal;
+
+    switch(axis)
+    {
+        case X_AXIS:
+            rtnVal = readBlock(DATA_8, DATA_9, localData);
+        break;
+
+        case Y_AXIS:
+            rtnVal = readBlock(DATA_10, DATA_11, localData);
+        break;
+
+        case Z_AXIS:
+            rtnVal = readBlock(DATA_12, DATA_13, localData);
+        break;
+
+        default:
+            rtnVal = -1;
+        break;
+    }
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.raw = ((localData[1] << 8) | localData[0]);
+        switch(range)
+        {
+            case DPS_2000:
+                data.scaled = (data.raw/SENS_2000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_1000:
+                data.scaled = (data.raw/SENS_1000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_500:
+                data.scaled = (data.raw/SENS_500_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_250:
+                data.scaled = (data.raw/SENS_250_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_125:
+                data.scaled = (data.raw/SENS_125_DPS_LSB_PER_DPS);
+            break;
+        }
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorXYZ(SensorData &data, AccRange range)
+{
+    uint8_t localData[6];
+    int32_t rtnVal;
+
+	if (m_use_irq == true && bmi160_irq_asserted == false)
+		return -1;
+
+	rtnVal = readBlock(DATA_14, DATA_19, localData);
+	bmi160_irq_asserted = false;
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.xAxis.raw = ((localData[1] << 8) | localData[0]);
+        data.yAxis.raw = ((localData[3] << 8) | localData[2]);
+        data.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+        switch(range)
+        {
+            case SENS_2G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_2G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_2G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_2G_LSB_PER_G);
+            break;
+
+            case SENS_4G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_4G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_4G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_4G_LSB_PER_G);
+            break;
+
+            case SENS_8G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_8G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_8G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_8G_LSB_PER_G);
+            break;
+
+            case SENS_16G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_16G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_16G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_16G_LSB_PER_G);
+            break;
+        }
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorXYZ(SensorData &data, GyroRange range)
+{
+    uint8_t localData[6];
+    int32_t rtnVal = readBlock(DATA_8, DATA_13, localData);
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.xAxis.raw = ((localData[1] << 8) | localData[0]);
+        data.yAxis.raw = ((localData[3] << 8) | localData[2]);
+        data.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+        switch(range)
+        {
+            case DPS_2000:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_1000:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_500:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_250:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_125:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+            break;
+        }
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorXYZandSensorTime(SensorData &data,
+                                          SensorTime &sensorTime,
+                                          AccRange range)
+{
+    uint8_t localData[9];
+    int32_t rtnVal = readBlock(DATA_14, SENSORTIME_2, localData);
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.xAxis.raw = ((localData[1] << 8) | localData[0]);
+        data.yAxis.raw = ((localData[3] << 8) | localData[2]);
+        data.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+        switch(range)
+        {
+            case SENS_2G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_2G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_2G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_2G_LSB_PER_G);
+            break;
+
+            case SENS_4G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_4G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_4G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_4G_LSB_PER_G);
+            break;
+
+            case SENS_8G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_8G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_8G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_8G_LSB_PER_G);
+            break;
+
+            case SENS_16G:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_16G_LSB_PER_G);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_16G_LSB_PER_G);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_16G_LSB_PER_G);
+            break;
+        }
+
+        sensorTime.raw = ((localData[8] << 16) | (localData[7] << 8) |
+                           localData[6]);
+        sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorXYZandSensorTime(SensorData &data,
+                                          SensorTime &sensorTime,
+                                          GyroRange range)
+{
+    uint8_t localData[16];
+    int32_t rtnVal = readBlock(DATA_8, SENSORTIME_2, localData);
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        data.xAxis.raw = ((localData[1] << 8) | localData[0]);
+        data.yAxis.raw = ((localData[3] << 8) | localData[2]);
+        data.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+        switch(range)
+        {
+            case DPS_2000:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_1000:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_500:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_250:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_125:
+                data.xAxis.scaled = (data.xAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                data.yAxis.scaled = (data.yAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                data.zAxis.scaled = (data.zAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+            break;
+        }
+
+        sensorTime.raw = ((localData[14] << 16) | (localData[13] << 8) |
+                           localData[12]);
+        sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getGyroAccXYZandSensorTime(SensorData &accData,
+                                           SensorData &gyroData,
+                                           SensorTime &sensorTime,
+                                           AccRange accRange,
+                                           GyroRange gyroRange)
+{
+    uint8_t localData[16];
+    int32_t rtnVal = readBlock(DATA_8, SENSORTIME_2, localData);
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        gyroData.xAxis.raw = ((localData[1] << 8) | localData[0]);
+        gyroData.yAxis.raw = ((localData[3] << 8) | localData[2]);
+        gyroData.zAxis.raw = ((localData[5] << 8) | localData[4]);
+
+        accData.xAxis.raw = ((localData[7] << 8) | localData[6]);
+        accData.yAxis.raw = ((localData[9] << 8) | localData[8]);
+        accData.zAxis.raw = ((localData[11] << 8) | localData[10]);
+
+        switch(gyroRange)
+        {
+            case DPS_2000:
+                gyroData.xAxis.scaled = (gyroData.xAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                gyroData.yAxis.scaled = (gyroData.yAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+                gyroData.zAxis.scaled = (gyroData.zAxis.raw/SENS_2000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_1000:
+                gyroData.xAxis.scaled = (gyroData.xAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                gyroData.yAxis.scaled = (gyroData.yAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+                gyroData.zAxis.scaled = (gyroData.zAxis.raw/SENS_1000_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_500:
+                gyroData.xAxis.scaled = (gyroData.xAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                gyroData.yAxis.scaled = (gyroData.yAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+                gyroData.zAxis.scaled = (gyroData.zAxis.raw/SENS_500_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_250:
+                gyroData.xAxis.scaled = (gyroData.xAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                gyroData.yAxis.scaled = (gyroData.yAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+                gyroData.zAxis.scaled = (gyroData.zAxis.raw/SENS_250_DPS_LSB_PER_DPS);
+            break;
+
+            case DPS_125:
+                gyroData.xAxis.scaled = (gyroData.xAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                gyroData.yAxis.scaled = (gyroData.yAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+                gyroData.zAxis.scaled = (gyroData.zAxis.raw/SENS_125_DPS_LSB_PER_DPS);
+            break;
+        }
+
+        switch(accRange)
+        {
+            case SENS_2G:
+                accData.xAxis.scaled = (accData.xAxis.raw/SENS_2G_LSB_PER_G);
+                accData.yAxis.scaled = (accData.yAxis.raw/SENS_2G_LSB_PER_G);
+                accData.zAxis.scaled = (accData.zAxis.raw/SENS_2G_LSB_PER_G);
+            break;
+
+            case SENS_4G:
+                accData.xAxis.scaled = (accData.xAxis.raw/SENS_4G_LSB_PER_G);
+                accData.yAxis.scaled = (accData.yAxis.raw/SENS_4G_LSB_PER_G);
+                accData.zAxis.scaled = (accData.zAxis.raw/SENS_4G_LSB_PER_G);
+            break;
+
+            case SENS_8G:
+                accData.xAxis.scaled = (accData.xAxis.raw/SENS_8G_LSB_PER_G);
+                accData.yAxis.scaled = (accData.yAxis.raw/SENS_8G_LSB_PER_G);
+                accData.zAxis.scaled = (accData.zAxis.raw/SENS_8G_LSB_PER_G);
+            break;
+
+            case SENS_16G:
+                accData.xAxis.scaled = (accData.xAxis.raw/SENS_16G_LSB_PER_G);
+                accData.yAxis.scaled = (accData.yAxis.raw/SENS_16G_LSB_PER_G);
+                accData.zAxis.scaled = (accData.zAxis.raw/SENS_16G_LSB_PER_G);
+            break;
+        }
+
+        sensorTime.raw = ((localData[14] << 16) | (localData[13] << 8) |
+                           localData[12]);
+        sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
+    }
+
+    return rtnVal;
+}
+
+int32_t BMI160::setSampleRate(int sample_rate)
+{
+	int sr_reg_val = -1;
+	int i;
+	const uint16_t odr_table[][2] = {
+	    {25, GYRO_ODR_6}, ///<25Hz
+        {50, GYRO_ODR_7}, ///<50Hz
+        {100, GYRO_ODR_8}, ///<100Hz
+        {200, GYRO_ODR_9}, ///<200Hz
+        {400, GYRO_ODR_10}, ///<400Hz
+        {800, GYRO_ODR_11}, ///<800Hz
+        {1600, GYRO_ODR_12}, ///<1600Hz
+        {3200, GYRO_ODR_13}, ///<3200Hz
+	};
+
+	int num_sr = sizeof(odr_table)/sizeof(odr_table[0]);
+	for (i = 0; i < num_sr; i++) {
+		if (sample_rate == odr_table[i][0]) {
+			sr_reg_val = odr_table[i][1];
+			break;
+		}
+	}
+
+	if (sr_reg_val == -1)
+		return -2;
+
+	AccConfig accConfigRead;
+	if (getSensorConfig(accConfigRead) == BMI160::RTN_NO_ERROR) {
+	accConfigRead.odr = (AccOutputDataRate)sr_reg_val;
+		return setSensorConfig(accConfigRead) == BMI160::RTN_NO_ERROR ? 0 : -1;
+	} else
+		return -1;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getSensorTime(SensorTime &sensorTime)
+{
+    uint8_t localData[3];
+    int32_t rtnVal = readBlock(SENSORTIME_0, SENSORTIME_2, localData);
+
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        sensorTime.raw = ((localData[2] << 16) | (localData[1] << 8) |
+                           localData[0]);
+        sensorTime.seconds = (sensorTime.raw * SENSOR_TIME_LSB);
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160::getTemperature(float *temp)
+{
+    uint8_t data[2];
+    uint16_t rawTemp;
+
+    int32_t rtnVal = readBlock(TEMPERATURE_0, TEMPERATURE_1, data);
+    if(rtnVal == RTN_NO_ERROR)
+    {
+        rawTemp = ((data[1] << 8) | data[0]);
+        if(rawTemp & 0x8000)
+        {
+            *temp = (23.0F - ((0x10000 - rawTemp)/512.0F));
+        }
+        else
+        {
+            *temp = ((rawTemp/512.0F) + 23.0F);
+        }
+    }
+
+    return rtnVal;
+}
+
+//***********************************************************************************
+int32_t BMI160::BMI160_DefaultInitalize(){
+
+		//soft reset the accelerometer
+		writeRegister(CMD ,SOFT_RESET);
+		wait(0.1);
+
+	    //Power up sensors in normal mode
+	    if(setSensorPowerMode(BMI160::GYRO, BMI160::SUSPEND) != BMI160::RTN_NO_ERROR){
+	        printf("Failed to set gyroscope power mode\n");
+	    }
+
+	    wait(0.1);
+
+	    if(setSensorPowerMode(BMI160::ACC, BMI160::NORMAL) != BMI160::RTN_NO_ERROR){
+	        printf("Failed to set accelerometer power mode\n");
+	    }
+	    wait(0.1);
+
+	    BMI160::AccConfig accConfig;
+	    BMI160::AccConfig accConfigRead;
+	    accConfig.range = BMI160::SENS_2G;
+	    accConfig.us = BMI160::ACC_US_OFF;
+	    accConfig.bwp = BMI160::ACC_BWP_2;
+	    accConfig.odr = BMI160::ACC_ODR_6;
+	    if(setSensorConfig(accConfig) == BMI160::RTN_NO_ERROR)
+	    {
+	        if(getSensorConfig(accConfigRead) == BMI160::RTN_NO_ERROR)
+	        {
+	            if((accConfig.range != accConfigRead.range) ||
+	                    (accConfig.us != accConfigRead.us) ||
+	                    (accConfig.bwp != accConfigRead.bwp) ||
+	                    (accConfig.odr != accConfigRead.odr))
+	            {
+	                printf("ACC read data desn't equal set data\n\n");
+	                printf("ACC Set Range = %d\n", accConfig.range);
+	                printf("ACC Set UnderSampling = %d\n", accConfig.us);
+	                printf("ACC Set BandWidthParam = %d\n", accConfig.bwp);
+	                printf("ACC Set OutputDataRate = %d\n\n", accConfig.odr);
+	                printf("ACC Read Range = %d\n", accConfigRead.range);
+	                printf("ACC Read UnderSampling = %d\n", accConfigRead.us);
+	                printf("ACC Read BandWidthParam = %d\n", accConfigRead.bwp);
+	                printf("ACC Read OutputDataRate = %d\n\n", accConfigRead.odr);
+	            }
+
+	        }
+	        else
+	        {
+	             printf("Failed to read back accelerometer configuration\n");
+	        }
+	    }
+	    else
+	    {
+	        printf("Failed to set accelerometer configuration\n");
+	    }
+	    return 0;
+}
+
+//***********************************************************************************
+int32_t BMI160::enable_data_ready_interrupt() {
+	uint8_t data = 0;
+	uint8_t temp = 0;
+	int32_t result;
+
+	result = readRegister(INT_EN_1, &data);
+	temp = data & ~0x10;
+	data = temp | ((1 << 4) & 0x10);
+	/* Writing data to INT ENABLE 1 Address */
+	result |= writeRegister(INT_EN_1, data);
+
+	// configure in_out ctrl
+	//bmi160_get_regs(BMI160_INT_OUT_CTRL_ADDR, &data, 1, dev);
+	result |= readRegister(INT_OUT_CTRL, &data);
+	data = 0x09;
+	result |= writeRegister(INT_OUT_CTRL,data);
+
+	//config int latch
+	//bmi160_get_regs(BMI160_INT_LATCH_ADDR, &data, 1, dev);
+	result |= readRegister(INT_LATCH, &data);
+	data = 0x0F;
+	result |= writeRegister(INT_LATCH, data);
+
+	//bmi160_get_regs(BMI160_INT_MAP_1_ADDR, &data, 1, dev);
+	result |= readRegister(INT_MAP_1, &data);
+	data = 0x80;
+	result |= writeRegister(INT_MAP_1, data);
+
+	if(result != 0){
+		printf("BMI160::%s failed.\r\n", __func__);
+		return -1;
+	}
+
+	m_bmi160_irq->disable_irq();
+	m_bmi160_irq->mode(PullUp);
+	m_bmi160_irq->fall(this, &BMI160::irq_handler);
+	m_bmi160_irq->enable_irq();
+	return 0;
+}
+
+void BMI160::irq_handler() {
+	bmi160_irq_asserted = true;
+}
+
+int32_t BMI160::reset() {
+	if (m_use_irq)
+		m_bmi160_irq->disable_irq();
+	bmi160_irq_asserted = false;
+	writeRegister(CMD, SOFT_RESET);
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BMI160/bmi160.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,845 @@
+/**********************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+**********************************************************************/
+
+
+#ifndef BMI160_H
+#define BMI160_H
+
+#include "mbed.h"
+
+/**
+@brief The BMI160 is a small, low power, low noise 16-bit inertial measurement
+unit designed for use in mobile applications like augmented reality or indoor
+navigation which require highly accurate, real-time sensor data.
+
+In full operation mode, with both the accelerometer and gyroscope enabled, the
+current consumption is typically 950 μA, enabling always-on applications in
+battery driven devices. It is available in a compact 14-pin 2.5 x 3.0 x 0.8 mm³
+LGA package."
+
+This class is an abstract base class and can not be instaniated, use BMI160_I2C
+or BMI160_SPI.
+*/
+class BMI160
+{
+public:
+
+    ///Return value on success.
+    static const uint8_t RTN_NO_ERROR = 0;
+
+    ///Sensor types
+    enum Sensors
+    {
+        MAG = 0, ///<Optional external sensor
+        GYRO,    ///<Angular rate sensor
+        ACC      ///<g sensor
+    };
+
+    ///Sensor Axis
+    enum SensorAxis
+    {
+        X_AXIS = 0,
+        Y_AXIS,
+        Z_AXIS
+    };
+
+    ///Structure for axis data
+    struct AxisData
+    {
+        int16_t raw;  ///<Axis raw data
+        float scaled; ///<Axis scaled data
+    };
+
+    ///Structure for sensor time data
+    struct SensorTime
+    {
+        uint32_t raw;  ///<raw SensorTime
+        float seconds; ///<SensorTime as seconds
+    };
+
+    ///Period of internal counter
+    static const float SENSOR_TIME_LSB = 39e-6;
+
+    ///Structure for holding sensor data
+    struct SensorData
+    {
+        AxisData xAxis; ///<Sensor X axis data
+        AxisData yAxis; ///<Sensor Y axis data
+        AxisData zAxis; ///<Sensor Z axis data
+    };
+
+
+    ///BMI160 registers
+    enum Registers
+    {
+        CHIP_ID = 0x00,  ///<Chip Identification.
+        ERR_REG = 0x02,  ///<Reports sensor error flags.  Flags reset when read.
+        PMU_STATUS,      ///<Reports current power mode for sensors.
+        DATA_0,          ///<MAG_X axis bits7:0
+        DATA_1,          ///<MAG_X axis bits15:8
+        DATA_2,          ///<MAG_Y axis bits7:0
+        DATA_3,          ///<MAG_Y axis bits15:8
+        DATA_4,          ///<MAG_Z axis bits7:0
+        DATA_5,          ///<MAG_Z axis bits15:8
+        DATA_6,          ///<RHALL bits7:0
+        DATA_7,          ///<RHALL bits15:8
+        DATA_8,          ///<GYR_X axis bits7:0
+        DATA_9,          ///<GYR_X axis bits15:8
+        DATA_10,         ///<GYR_Y axis bits7:0
+        DATA_11,         ///<GYR_Y axis bits15:8
+        DATA_12,         ///<GYR_Z axis bits7:0
+        DATA_13,         ///<GYR_Z axis bits15:8
+        DATA_14,         ///<ACC_X axis bits7:0
+        DATA_15,         ///<ACC_X axis bits15:8
+        DATA_16,         ///<ACC_Y axis bits7:0
+        DATA_17,         ///<ACC_Y axis bits15:8
+        DATA_18,         ///<ACC_Z axis bits7:0
+        DATA_19,         ///<ACC_Z axis bits15:8
+        SENSORTIME_0,    ///<24bit counter synchronized with data, bits7:0
+        SENSORTIME_1,    ///<24bit counter synchronized with data, bits15:8
+        SENSORTIME_2,    ///<24bit counter synchronized with data, bits23:16
+        STATUS,          ///<Reports sensors status flags
+        INT_STATUS_0,    ///<Contains interrupt status flags
+        INT_STATUS_1,    ///<Contains interrupt status flags
+        INT_STATUS_2,    ///<Contains interrupt status flags
+        INT_STATUS_3,    ///<Contains interrupt status flags
+        TEMPERATURE_0,   ///<Contains temperature of sensor, bits7:0
+        TEMPERATURE_1,   ///<Contains temperature of sensor, bits15:8
+        FIFO_LENGTH_0,   ///<Current fill level of FIFO, bits7:0
+        FIFO_LENGTH_1,   ///<Current fill level of FIFO, bits10:8
+        FIFO_DATA,       ///<FIFO data read out register, burst read
+        ACC_CONF = 0x40, ///<Set ODR, bandwidth, and read mode of accelerometer
+        ACC_RANGE,       ///<Sets accelerometer g-range
+        GYR_CONF,        ///<Set ODR, bandwidth, and read mode of gyroscope
+        GYR_RANGE,       ///<Sets gyroscope angular rate measurement range
+        MAG_CONF,        ///<Sets ODR of magnetometer interface
+        FIFO_DOWNS,      ///<Sets down sampling ratios of accel and gyro data
+                         ///<for FIFO
+        FIFO_CONFIG_0,   ///<Sets FIFO Watermark
+        FIFO_CONFIG_1,   ///<Sets which sensor data is available in FIFO,
+                         ///<Header/Headerless mode, Ext Int tagging, Sensortime
+        MAG_IF_0 = 0x4B, ///<Magnetometer 7-bit I2C address, bits7:1
+        MAG_IF_1,        ///<Magnetometer interface configuration
+        MAG_IF_2,        ///<Magnetometer address to read
+        MAG_IF_3,        ///<Magnetometer address to write
+        MAG_IF_4,        ///<Magnetometer data to write
+        INT_EN_0,        ///<Interrupt enable bits
+        INT_EN_1,        ///<Interrupt enable bits
+        INT_EN_2,        ///<Interrupt enable bits
+        INT_OUT_CTRL,    ///<Contains the behavioral configuration of INT pins
+        INT_LATCH,       ///<Contains the interrupt rest bit and the interrupt
+                         ///<mode selection
+        INT_MAP_0,       ///<Controls which interrupt signals are mapped to the
+                         ///<INT1 and INT2 pins
+        INT_MAP_1,       ///<Controls which interrupt signals are mapped to the
+                         ///<INT1 and INT2 pins
+        INT_MAP_2,       ///<Controls which interrupt signals are mapped to the
+                         ///<INT1 and INT2 pins
+        INT_DATA_0,      ///<Contains the data source definition for the two
+                         ///<interrupt groups
+        INT_DATA_1,      ///<Contains the data source definition for the two
+                         ///<interrupt groups
+        INT_LOWHIGH_0,   ///<Contains the configuration for the low g interrupt
+        INT_LOWHIGH_1,   ///<Contains the configuration for the low g interrupt
+        INT_LOWHIGH_2,   ///<Contains the configuration for the low g interrupt
+        INT_LOWHIGH_3,   ///<Contains the configuration for the low g interrupt
+        INT_LOWHIGH_4,   ///<Contains the configuration for the low g interrupt
+        INT_MOTION_0,    ///<Contains the configuration for the any motion and
+                         ///<no motion interrupts
+        INT_MOTION_1,    ///<Contains the configuration for the any motion and
+                         ///<no motion interrupts
+        INT_MOTION_2,    ///<Contains the configuration for the any motion and
+                         ///<no motion interrupts
+        INT_MOTION_3,    ///<Contains the configuration for the any motion and
+                         ///<no motion interrupts
+        INT_TAP_0,       ///<Contains the configuration for the tap interrupts
+        INT_TAP_1,       ///<Contains the configuration for the tap interrupts
+        INT_ORIENT_0,    ///<Contains the configuration for the oeientation
+                         ///<interrupt
+        INT_ORIENT_1,    ///<Contains the configuration for the oeientation
+                         ///<interrupt
+        INT_FLAT_0,      ///<Contains the configuration for the flat interrupt
+        INT_FLAT_1,      ///<Contains the configuration for the flat interrupt
+        FOC_CONF,        ///<Contains configuration for the fast offset
+                         ///<compensation for the accelerometer and gyroscope
+        CONF,            ///<Configuration of sensor, nvm_prog_en bit
+        IF_CONF,         ///<Contains settings for the digital interface
+        PMU_TRIGGER,     ///<Sets trigger conditions to change gyro power modes
+        SELF_TEST,       ///<Self test configuration
+        NV_CONF = 0x70,  ///<Contains settings for the digital interface
+        OFFSET_0,        ///<Contains offset comp values for acc_off_x7:0
+        OFFSET_1,        ///<Contains offset comp values for acc_off_y7:0
+        OFFSET_2,        ///<Contains offset comp values for acc_off_z7:0
+        OFFSET_3,        ///<Contains offset comp values for gyr_off_x7:0
+        OFFSET_4,        ///<Contains offset comp values for gyr_off_y7:0
+        OFFSET_5,        ///<Contains offset comp values for gyr_off_z7:0
+        OFFSET_6,        ///<gyr/acc offset enable bit and gyr_off_(zyx) bits9:8
+        STEP_CNT_0,      ///<Step counter bits 15:8
+        STEP_CNT_1,      ///<Step counter bits 7:0
+        STEP_CONF_0,     ///<Contains configuration of the step detector
+        STEP_CONF_1,     ///<Contains configuration of the step detector
+        CMD = 0x7E       ///<Command register triggers operations like
+                         ///<softreset, NVM programming, etc.
+    };
+
+
+    ///@name ERR_REG(0x02)
+    ///Error register data
+    ///@{
+
+    static const uint8_t FATAL_ERR_MASK = 0x01;
+    static const uint8_t FATAL_ERR_POS = 0x00;
+    static const uint8_t ERR_CODE_MASK = 0x1E;
+    static const uint8_t ERR_CODE_POS = 0x01;
+    static const uint8_t I2C_FAIL_ERR_MASK = 0x20;
+    static const uint8_t I2C_FAIL_ERR_POS = 0x05;
+    static const uint8_t DROP_CMD_ERR_MASK = 0x40;
+    static const uint8_t DROP_CMD_ERR_POS = 0x06;
+    static const uint8_t MAG_DRDY_ERR_MASK = 0x80;
+    static const uint8_t MAG_DRDY_ERR_POS = 0x08;
+
+    ///Enumerated error codes
+    enum ErrorCodes
+    {
+        NO_ERROR = 0,        ///<No Error
+        ERROR_1,             ///<Listed as error
+        ERROR_2,             ///<Listed as error
+        LPM_INT_PFD,         ///<Low-power mode and interrupt uses pre-filtered
+                             ///<data
+        ODR_MISMATCH = 0x06, ///<ODRs of enabled sensors in headerless mode do
+                             ///<not match
+        PFD_USED_LPM         ///<Pre-filtered data are used in low power mode
+    };
+    ///@}
+
+
+    ///@name ACC_CONF(0x40) and ACC_RANGE(0x41)
+    ///Data for configuring accelerometer
+    ///@{
+
+    static const uint8_t ACC_ODR_MASK = 0x0F;
+    static const uint8_t ACC_ODR_POS = 0x00;
+    static const uint8_t ACC_BWP_MASK = 0x70;
+    static const uint8_t ACC_BWP_POS = 0x04;
+    static const uint8_t ACC_US_MASK = 0x80;
+    static const uint8_t ACC_US_POS = 0x07;
+    static const uint8_t ACC_RANGE_MASK = 0x0F;
+    static const uint8_t ACC_RANGE_POS = 0x00;
+
+    ///Accelerometer output data rates
+    enum AccOutputDataRate
+    {
+        ACC_ODR_1 = 1,  ///< 25/32Hz
+        ACC_ODR_2,      ///< 25/16Hz
+        ACC_ODR_3,      ///< 25/8Hz
+        ACC_ODR_4,      ///< 25/4Hz
+        ACC_ODR_5,      ///< 25/2Hz
+        ACC_ODR_6,      ///< 25Hz
+        ACC_ODR_7,      ///< 50Hz
+        ACC_ODR_8,      ///< 100Hz
+        ACC_ODR_9,      ///< 200Hz
+        ACC_ODR_10,     ///< 400Hz
+        ACC_ODR_11,     ///< 800Hz
+        ACC_ODR_12      ///< 1600Hz
+    };
+
+    ///Accelerometer bandwidth parameters
+    enum AccBandWidthParam
+    {
+        ACC_BWP_0 = 0, ///< Average 1 cycle;  when acc_us = 0 OSR4
+        ACC_BWP_1,     ///< Average 2 cycles; when acc_us = 0 OSR2
+        ACC_BWP_2,     ///< Average 4 cycles; when acc_us = 0 normal mode
+        ACC_BWP_3,     ///< Average 8 cycles
+        ACC_BWP_4,     ///< Average 16 cycles
+        ACC_BWP_5,     ///< Average 32 cycles
+        ACC_BWP_6,     ///< Average 64 cycles
+        ACC_BWP_7      ///< Average 128 cycles
+    };
+
+    ///Accelerometer undersampling
+    enum AccUnderSampling
+    {
+        ACC_US_OFF = 0,
+        ACC_US_ON
+    };
+
+    ///Accelerometer ranges
+    enum AccRange
+    {
+        SENS_2G = 0x03,  ///<Accelerometer range +-2G
+        SENS_4G = 0x05,  ///<Accelerometer range +-4G
+        SENS_8G = 0x08,  ///<Accelerometer range +-8G
+        SENS_16G = 0x0C ///<Accelerometer range +-16G
+    };
+
+    static const float SENS_2G_LSB_PER_G = 16384.0F;
+    static const float SENS_4G_LSB_PER_G = 8192.0F;
+    static const float SENS_8G_LSB_PER_G = 4096.0F;
+    static const float SENS_16G_LSB_PER_G = 2048.0F;
+
+    ///Accelerometer configuration data structure
+    struct AccConfig
+    {
+        AccRange range;        ///<Accelerometer range
+        AccUnderSampling us;   ///<Accelerometr undersampling mode
+        AccBandWidthParam bwp; ///<Accelerometer bandwidth param
+        AccOutputDataRate odr; ///<Accelerometr output data rate
+    };
+
+    ///Accelerometer default configuration
+    static const AccConfig DEFAULT_ACC_CONFIG;
+    ///@}
+
+
+    ///@name GYR_CONF(0x42) and GYR_RANGE(0x43)
+    ///Data for configuring gyroscope
+    ///@{
+
+    static const uint8_t GYRO_ODR_MASK = 0x0F;
+    static const uint8_t GYRO_ODR_POS = 0x00;
+    static const uint8_t GYRO_BWP_MASK = 0x30;
+    static const uint8_t GYRO_BWP_POS = 0x04;
+    static const uint8_t GYRO_RANGE_MASK = 0x07;
+    static const uint8_t GYRO_RANGE_POS = 0x00;
+
+    ///Gyroscope output data rates
+    enum GyroOutputDataRate
+    {
+        GYRO_ODR_6 = 0x06,  ///<25Hz
+        GYRO_ODR_7 = 0x07,  ///<50Hz
+        GYRO_ODR_8 = 0x08,  ///<100Hz
+        GYRO_ODR_9 = 0x09,  ///<200Hz
+        GYRO_ODR_10 = 0x0A, ///<400Hz
+        GYRO_ODR_11 = 0x0B, ///<800Hz
+        GYRO_ODR_12 = 0x0C, ///<1600Hz
+        GYRO_ODR_13 = 0x0D  ///<3200Hz
+    };
+
+    ///Gyroscope bandwidth paramaters
+    enum GyroBandWidthParam
+    {
+        GYRO_BWP_0 = 0, ///<OSR4 Over Sampling Rate of 4
+        GYRO_BWP_1,     ///<OSR2 Over Sampling Rate of 2
+        GYRO_BWP_2      ///<Normal Mode, Equidistant Sampling
+    };
+
+    ///Gyroscope ranges
+    enum GyroRange
+    {
+        DPS_2000 = 0, ///<+-2000dps, 16.4LSB/dps
+        DPS_1000,     ///<+-1000dps, 32.8LSB/dps
+        DPS_500,      ///<+-500dps, 65.6LSB/dps
+        DPS_250,      ///<+-250dps, 131.2LSB/dps
+        DPS_125       ///<+-125dps, 262.4LSB/dps,
+    };
+
+    static const float SENS_2000_DPS_LSB_PER_DPS = 16.4F;
+    static const float SENS_1000_DPS_LSB_PER_DPS = 32.8F;
+    static const float SENS_500_DPS_LSB_PER_DPS = 65.6F;
+    static const float SENS_250_DPS_LSB_PER_DPS = 131.2F;
+    static const float SENS_125_DPS_LSB_PER_DPS = 262.4F;
+
+    ///Gyroscope configuration data structure
+    struct GyroConfig
+    {
+        GyroRange range;        ///<Gyroscope range
+        GyroBandWidthParam bwp; ///<Gyroscope bandwidth param
+        GyroOutputDataRate odr; ///<Gyroscope output data rate
+    };
+
+    ///Gyroscope default configuration
+    static const GyroConfig DEFAULT_GYRO_CONFIG;
+    ///@}
+
+
+    ///Enumerated power modes
+    enum PowerModes
+    {
+        SUSPEND = 0,  ///<Acc and Gyro, No sampling, No FIFO data readout
+        NORMAL,       ///<Acc and Gyro, Full chip operation
+        LOW_POWER,    ///<Acc duty-cycling between suspend and normal
+        FAST_START_UP ///<Gyro start up delay time to normal mode <= 10 ms
+    };
+
+
+    ///Enumerated commands used with CMD register
+    enum Commands
+    {
+        START_FOC = 0x03,        ///<Starts Fast Offset Calibrartion
+        ACC_SET_PMU_MODE = 0x10, ///<Sets acc power mode
+        GYR_SET_PMU_MODE = 0x14, ///<Sets gyro power mode
+        MAG_SET_PMU_MODE = 0x18, ///<Sets mag power mode
+        PROG_NVM = 0xA0,         ///<Writes NVM backed registers into NVM
+        FIFO_FLUSH = 0xB0,       ///<Clears FIFO
+        INT_RESET,               ///<Clears interrupt engine, INT_STATUS, and
+                                 ///<the interrupt pin
+        STEP_CNT_CLR,            ///<Triggers reset of the step counter
+        SOFT_RESET = 0xB6        ///<Triggers a reset including a reboot.
+    };
+
+
+    ///@brief BMI160 Destructor.\n
+    ///
+    ///On Entry:
+    ///@param[in] none
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns none
+    virtual ~BMI160(){ }
+
+
+    ///@brief Reads a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read register on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readRegister(Registers reg, uint8_t *data) = 0;
+
+
+    ///@brief Writes a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - data to write to register
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeRegister(Registers reg, const uint8_t data) = 0;
+
+
+    ///@brief Reads a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are readable.  Function reads up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start reading from
+    ///@param[in] stopReg - register to stop reading from
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read registers on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readBlock(Registers startReg, Registers stopReg,
+    uint8_t *data) = 0;
+
+
+    ///@brief Writes a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are writeable.  Function writes up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start writing at
+    ///@param[in] stopReg - register to stop writing at
+    ///@param[in] data - pointer to data to write to registers
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg,
+    const uint8_t *data) = 0;
+
+
+    ///@brief Sets sensors power mode through CMD register.\n
+    ///@details Observe command execution times given in datasheet.\n
+    ///
+    ///On Entry:
+    ///@param[in] sensor - Sensor which power mode we are setting
+    ///@param[in] pwrMode - Desired powermode of the sensor
+    ///
+    ///On Exit:
+    ///@param[out]
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t setSensorPowerMode(Sensors sensor, PowerModes pwrMode);
+
+
+    ///@brief Configure sensor.\n
+    ///
+    ///On Entry:
+    ///@param[in] config - sSensor configuration data structure
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t setSensorConfig(const AccConfig &config);
+    int32_t setSensorConfig(const GyroConfig &config);
+
+
+    ///@brief Get sensor configuration.\n
+    ///
+    ///On Entry:
+    ///@param[in] config - Sensor configuration data structure
+    ///
+    ///On Exit:
+    ///@param[out] config - on success, holds sensor's current
+    ///configuration
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getSensorConfig(AccConfig &config);
+    int32_t getSensorConfig(GyroConfig &config);
+
+
+    ///@brief Get sensor axis.\n
+    ///
+    ///On Entry:
+    ///@param[in] axis - Sensor axis
+    ///@param[in] data - AxisData structure
+    ///@param[in] range - Sensor range
+    ///
+    ///On Exit:
+    ///@param[out] data - Structure holds raw and scaled axis data
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getSensorAxis(SensorAxis axis, AxisData &data, AccRange range);
+    int32_t getSensorAxis(SensorAxis axis, AxisData &data, GyroRange range);
+
+
+    ///@brief Get sensor xyz axis.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - SensorData structure
+    ///@param[in] range - Sensor range
+    ///
+    ///On Exit:
+    ///@param[out] data - Structure holds raw and scaled data for all three axis
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getSensorXYZ(SensorData &data, AccRange range);
+    int32_t getSensorXYZ(SensorData &data, GyroRange range);
+
+
+    ///@brief Get sensor xyz axis and sensor time.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - SensorData structure
+    ///@param[in] sensorTime - SensorTime structure for data
+    ///@param[in] range - Sensor range
+    ///
+    ///On Exit:
+    ///@param[out] data - Structure holds raw and scaled data for all three axis
+    ///@param[out] sensorTime - Holds sensor time on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getSensorXYZandSensorTime(SensorData &data, SensorTime &sensorTime,
+                                      AccRange range);
+    int32_t getSensorXYZandSensorTime(SensorData &data, SensorTime &sensorTime,
+                                      GyroRange range);
+
+
+    ///@brief Get Gyroscope/Accelerometer data and sensor time.\n
+    ///
+    ///On Entry:
+    ///@param[in] accData -  Sensor data structure for accelerometer
+    ///@param[in] gyroData - Sensor data structure for gyroscope
+    ///@param[in] sensorTime - SensorTime data structure
+    ///@param[in] accRange - Accelerometer range
+    ///@param[in] gyroRange - Gyroscope range
+    ///
+    ///On Exit:
+    ///@param[out] accData -  Synchronized accelerometer data
+    ///@param[out] gyroData - Synchronized gyroscope data
+    ///@param[out] sensorTime - Synchronized sensor time
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getGyroAccXYZandSensorTime(SensorData &accData,
+                                       SensorData &gyroData,
+                                       SensorTime &sensorTime,
+                                       AccRange accRange, GyroRange gyroRange);
+
+
+    ///@brief Get sensor time.\n
+    ///
+    ///On Entry:
+    ///@param[in] sensorTime - SensorTime structure for data
+    ///
+    ///On Exit:
+    ///@param[out] sensorTime - Holds sensor time on success
+    ///
+    ///@returns returns 0 on success, non 0 on failure
+    int32_t getSensorTime(SensorTime &sensorTime);
+
+
+    ///@brief Get die temperature.\n
+    ///
+    ///On Entry:
+    ///@param[in] temp - pointer to float for temperature
+    ///
+    ///On Exit:
+    ///@param[out] temp - on success, holds the die temperature
+    ///
+    ///@returns 0 on success, non 0 on failure
+    int32_t getTemperature(float *temp);
+
+    // Initialize BMI160 with default parameters:
+    // set GYRO: Suspended, Acc Normal Mode, ODR:25 Hz
+    int32_t BMI160_DefaultInitalize();
+
+    //
+    //
+    int32_t enable_data_ready_interrupt();
+
+	//
+	// Set sample rate
+	// This function can be alled after BMI160_DefaultInitalize
+	int32_t setSampleRate(int sample_rate);
+
+	/// @brief Soft reset
+	///
+	int32_t reset();
+
+private:
+	bool m_use_irq;
+	bool bmi160_irq_asserted;
+	InterruptIn *m_bmi160_irq;
+	void irq_handler();
+
+protected:
+	BMI160(InterruptIn *int_pin): m_bmi160_irq(int_pin), m_use_irq(true) {
+		bmi160_irq_asserted = false;
+	}
+
+	BMI160(): m_use_irq(false) { }
+};
+
+
+/**
+@brief BMI160_I2C - supports BMI160 object with I2C interface
+*/
+class BMI160_I2C: public BMI160
+{
+public:
+
+    ///BMI160 default I2C address.
+    static const uint8_t I2C_ADRS_SDO_LO = 0x68;
+    ///BMI160 optional I2C address.
+    static const uint8_t I2C_ADRS_SDO_HI = 0x69;
+
+
+    ///@brief BMI160_I2C Constructor.\n
+    ///
+    ///On Entry:
+    ///@param[in] i2cBus - reference to I2C bus for this device
+    ///@param[in] i2cAdrs - 7-bit I2C address
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns none
+    BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs);
+
+    ///@brief BMI160_I2C Constructor.\n
+    ///
+    ///On Entry:
+    ///@param[in] i2cBus - reference to I2C bus for this device
+    ///@param[in] i2cAdrs - 7-bit I2C address
+    ///@param[in] int_pin - Interrupt pin
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns none
+	BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs, InterruptIn *int_pin);
+
+    ///@brief Reads a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read register on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readRegister(Registers reg, uint8_t *data);
+
+
+    ///@brief Writes a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - data to write to register
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeRegister(Registers reg, const uint8_t data);
+
+
+    ///@brief Reads a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are readable.  Function reads up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start reading from
+    ///@param[in] stopReg - register to stop reading from
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read registers on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readBlock(Registers startReg, Registers stopReg,
+    uint8_t *data);
+
+
+    ///@brief Writes a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are writeable.  Function writes up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start writing at
+    ///@param[in] stopReg - register to stop writing at
+    ///@param[in] data - pointer to data to write to registers
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg,
+    const uint8_t *data);
+
+private:
+    I2C *m_i2cBus;
+    uint8_t m_Wadrs, m_Radrs;
+};
+
+
+/**
+@brief BMI160_SPI - supports BMI160 object with SPI interface
+*/
+class BMI160_SPI: public BMI160
+{
+public:
+
+    ///@brief BMI160_SPI Constructor.\n
+    ///
+    ///On Entry:
+    ///@param[in] spiBus - reference to SPI bus for this device
+    ///@param[in] cs - reference to DigitalOut used for chip select
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns none
+    BMI160_SPI(SPI *spiBus, DigitalOut &cs);
+
+
+    ///@brief Reads a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read register on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readRegister(Registers reg, uint8_t *data);
+
+
+    ///@brief Writes a single register.\n
+    ///
+    ///On Entry:
+    ///@param[in] data - data to write to register
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeRegister(Registers reg, const uint8_t data);
+
+
+    ///@brief Reads a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are readable.  Function reads up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start reading from
+    ///@param[in] stopReg - register to stop reading from
+    ///@param[in] data - pointer to memory for storing read data
+    ///
+    ///On Exit:
+    ///@param[out] data - holds contents of read registers on success
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t readBlock(Registers startReg, Registers stopReg,
+    uint8_t *data);
+
+
+    ///@brief Writes a block of registers.\n
+    ///@detail User must ensure that all registers between 'startReg' and
+    ///'stopReg' exist and are writeable.  Function writes up to, including,
+    ///'stopReg'.\n
+    ///
+    ///On Entry:
+    ///@param[in] startReg - register to start writing at
+    ///@param[in] stopReg - register to stop writing at
+    ///@param[in] data - pointer to data to write to registers
+    ///
+    ///On Exit:
+    ///@param[out] none
+    ///
+    ///@returns 0 on success, non 0 on failure
+    virtual int32_t writeBlock(Registers startReg, Registers stopReg,
+    const uint8_t *data);
+
+private:
+
+    SPI *m_spiBus;
+    DigitalOut m_cs;
+};
+
+#endif /* BMI160_H */
+
+
+///@brief fx documentation template.\n
+///
+///On Entry:
+///@param[in] none
+///
+///On Exit:
+///@param[out] none
+///
+///@returns none
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BMI160/bmi160_i2c.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,103 @@
+/**********************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+**********************************************************************/
+
+
+#include "bmi160.h"
+
+
+//*****************************************************************************
+BMI160_I2C::BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs)
+:m_i2cBus(i2cBus), m_Wadrs(i2cAdrs << 1), m_Radrs((i2cAdrs << 1) | 1)
+{
+
+}
+
+BMI160_I2C::BMI160_I2C(I2C *i2cBus, uint8_t i2cAdrs, InterruptIn *int_pin)
+:m_i2cBus(i2cBus), m_Wadrs(i2cAdrs << 1), m_Radrs((i2cAdrs << 1) | 1), BMI160(int_pin)
+{
+
+}
+
+//*****************************************************************************
+int32_t BMI160_I2C::readRegister(Registers reg, uint8_t *data)
+{
+    int32_t rtnVal = -1;
+    char packet[] = {static_cast<char>(reg)};
+
+    if(m_i2cBus->write(m_Wadrs, packet, 1) == 0)
+    {
+        rtnVal = m_i2cBus->read(m_Radrs, reinterpret_cast<char *>(data), 1);
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160_I2C::writeRegister(Registers reg, const uint8_t data)
+{
+    char packet[] = {static_cast<char>(reg), static_cast<char>(data)};
+
+    return m_i2cBus->write(m_Wadrs, packet, sizeof(packet));
+}
+
+
+//*****************************************************************************
+int32_t BMI160_I2C::readBlock(Registers startReg, Registers stopReg,
+uint8_t *data)
+{
+    int32_t rtnVal = -1;
+    int32_t numBytes = ((stopReg - startReg) + 1);
+    char packet[] = {static_cast<char>(startReg)};
+
+    if(m_i2cBus->write(m_Wadrs, packet, 1) == 0)
+    {
+        rtnVal = m_i2cBus->read(m_Radrs, reinterpret_cast<char *>(data), numBytes);
+    }
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160_I2C::writeBlock(Registers startReg, Registers stopReg,
+const uint8_t *data)
+{
+    int32_t numBytes = ((stopReg - startReg) + 1);
+    char packet[numBytes + 1];
+
+    packet[0] = static_cast<char>(startReg);
+
+    memcpy(packet + 1, data, numBytes);
+
+    return m_i2cBus->write(m_Wadrs, packet, sizeof(packet));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/BMI160/bmi160_spi.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,80 @@
+/**********************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+**********************************************************************/
+
+
+#include "bmi160.h"
+
+
+//*****************************************************************************
+BMI160_SPI::BMI160_SPI(SPI *spiBus, DigitalOut &cs)
+:m_spiBus(spiBus), m_cs(cs)
+{
+
+}
+
+
+//*****************************************************************************
+int32_t BMI160_SPI::readRegister(Registers reg, uint8_t *data)
+{
+    int32_t rtnVal = -1;
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160_SPI::writeRegister(Registers reg, const uint8_t data)
+{
+    int32_t rtnVal = -1;
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160_SPI::readBlock(Registers startReg, Registers stopReg,
+uint8_t *data)
+{
+    int32_t rtnVal = -1;
+
+    return rtnVal;
+}
+
+
+//*****************************************************************************
+int32_t BMI160_SPI::writeBlock(Registers startReg, Registers stopReg,
+const uint8_t *data)
+{
+    int32_t rtnVal = -1;
+
+    return rtnVal;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/Arial10x10.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,104 @@
+//GLCD FontName : Arial
+//GLCD FontSize : 10 x 10
+
+const unsigned char Arial10x10[] = {
+		21,10,10,2,
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char
+        0x01, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
+        0x03, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char "
+        0x05, 0xE4, 0x00, 0x3C, 0x00, 0xE7, 0x00, 0x3C, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char #
+        0x05, 0x46, 0x00, 0x89, 0x00, 0xFF, 0x01, 0x89, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char $
+        0x09, 0x06, 0x00, 0x09, 0x00, 0x89, 0x00, 0x66, 0x00, 0x18, 0x00, 0x66, 0x00, 0x91, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00, 0x00,  // Code for char %
+        0x06, 0x60, 0x00, 0x96, 0x00, 0x89, 0x00, 0x99, 0x00, 0x66, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char &
+        0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char '
+        0x03, 0xFC, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
+        0x03, 0x01, 0x02, 0x02, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
+        0x03, 0x0A, 0x00, 0x07, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
+        0x05, 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char +
+        0x02, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
+        0x03, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char -
+        0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
+        0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
+        0x05, 0x7E, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 0
+        0x03, 0x04, 0x00, 0x02, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
+        0x05, 0x82, 0x00, 0xC1, 0x00, 0xA1, 0x00, 0x91, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 2
+        0x05, 0x42, 0x00, 0x81, 0x00, 0x89, 0x00, 0x89, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 3
+        0x05, 0x30, 0x00, 0x2C, 0x00, 0x22, 0x00, 0xFF, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 4
+        0x05, 0x4C, 0x00, 0x8B, 0x00, 0x89, 0x00, 0x89, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 5
+        0x05, 0x7E, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 6
+        0x05, 0x01, 0x00, 0xE1, 0x00, 0x19, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 7
+        0x05, 0x76, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 8
+        0x05, 0x4E, 0x00, 0x91, 0x00, 0x91, 0x00, 0x91, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 9
+        0x01, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char :
+        0x01, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
+        0x05, 0x10, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char <
+        0x05, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char =
+        0x05, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char >
+        0x05, 0x02, 0x00, 0x01, 0x00, 0xB1, 0x00, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ?
+        0x0A, 0xF8, 0x00, 0x06, 0x01, 0x72, 0x02, 0x89, 0x02, 0x85, 0x02, 0x45, 0x02, 0xF9, 0x02, 0x8D, 0x02, 0x42, 0x02, 0x3C, 0x01,  // Code for char @
+        0x07, 0xC0, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x21, 0x00, 0x2E, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char A
+        0x06, 0xFF, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char B
+        0x06, 0x3C, 0x00, 0x42, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char C
+        0x06, 0xFF, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char D
+        0x05, 0xFF, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char E
+        0x05, 0xFF, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char F
+        0x07, 0x3C, 0x00, 0x42, 0x00, 0x81, 0x00, 0x81, 0x00, 0x91, 0x00, 0x52, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char G
+        0x06, 0xFF, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char H
+        0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char I
+        0x04, 0x60, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char J
+        0x06, 0xFF, 0x00, 0x10, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x62, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char K
+        0x05, 0xFF, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char L
+        0x07, 0xFF, 0x00, 0x06, 0x00, 0x38, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x06, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char M
+        0x06, 0xFF, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x40, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char N
+        0x07, 0x3C, 0x00, 0x42, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char O
+        0x05, 0xFF, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char P
+        0x07, 0x3C, 0x00, 0x42, 0x00, 0x81, 0x00, 0xA1, 0x00, 0xA1, 0x00, 0x42, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Q
+        0x06, 0xFF, 0x00, 0x09, 0x00, 0x09, 0x00, 0x19, 0x00, 0x69, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char R
+        0x06, 0x46, 0x00, 0x89, 0x00, 0x89, 0x00, 0x91, 0x00, 0x91, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char S
+        0x05, 0x01, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char T
+        0x06, 0x7F, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char U
+        0x07, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char V
+        0x0A, 0x3C, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x00,  // Code for char W
+        0x06, 0x81, 0x00, 0x66, 0x00, 0x18, 0x00, 0x18, 0x00, 0x66, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char X
+        0x07, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x08, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Y
+        0x06, 0x80, 0x00, 0xC1, 0x00, 0xB1, 0x00, 0x8D, 0x00, 0x83, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Z
+        0x02, 0xFF, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char [
+        0x03, 0x03, 0x00, 0x3C, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
+        0x02, 0x01, 0x02, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ]
+        0x05, 0x08, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ^
+        0x06, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char _
+        0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char `
+        0x05, 0x68, 0x00, 0x94, 0x00, 0x94, 0x00, 0x54, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char a
+        0x05, 0xFF, 0x00, 0x48, 0x00, 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char b
+        0x05, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char c
+        0x05, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x48, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char d
+        0x05, 0x78, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char e
+        0x03, 0x04, 0x00, 0xFE, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char f
+        0x05, 0x78, 0x02, 0x84, 0x02, 0x84, 0x02, 0x48, 0x02, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char g
+        0x05, 0xFF, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char h
+        0x01, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char i
+        0x01, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char j
+        0x04, 0xFF, 0x00, 0x10, 0x00, 0x68, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char k
+        0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char l
+        0x07, 0xFC, 0x00, 0x08, 0x00, 0x04, 0x00, 0xFC, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char m
+        0x05, 0xFC, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char n
+        0x05, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char o
+        0x05, 0xFC, 0x03, 0x48, 0x00, 0x84, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char p
+        0x05, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x48, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char q
+        0x03, 0xFC, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
+        0x05, 0x48, 0x00, 0x94, 0x00, 0x94, 0x00, 0xA4, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char s
+        0x02, 0xFF, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
+        0x05, 0x7C, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char u
+        0x05, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char v
+        0x09, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x04, 0x00, 0x38, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x00,  // Code for char w
+        0x05, 0x84, 0x00, 0x48, 0x00, 0x30, 0x00, 0x48, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char x
+        0x05, 0x0C, 0x00, 0x30, 0x02, 0xC0, 0x01, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char y
+        0x05, 0x84, 0x00, 0xC4, 0x00, 0xB4, 0x00, 0x8C, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char z
+        0x03, 0x10, 0x00, 0xEE, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char {
+        0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char |
+        0x04, 0x00, 0x00, 0x01, 0x02, 0xEE, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char }
+        0x05, 0x18, 0x00, 0x08, 0x00, 0x18, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ~
+        0x03, 0xFF, 0x00, 0x81, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   // Code for char 
+        };
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/Arial28x28.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,489 @@
+//GLCD FontName : @Arial_Unicode_MS28x28
+//GLCD FontSize : 28 x 28
+
+/** Arial Font italic with 27*28 pixel matrix for use with SPI_TFT lib
+*/
+const unsigned char Arial28x28[] = {
+113,28,28,4,
+0x0F, 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,  // Code for char
+  
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x38, 0x00, 0xFE, 0x7F, 0x38, 0x00, 0xFE, 0x3F, 0x38, 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,  // Code for char !
+
+0x09, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 
+0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 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,  // Code for char "
+
+0x0F, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x38, 0x00, 0x80, 0xC1, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0xFE, 0xC1, 0x00, 0x00, 0x8E, 0xC1, 0x00, 
+0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x38, 0x00, 0x80, 0xC1, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0xFE, 0xC1, 0x00, 0x00, 0x8E, 0xC1, 0x00, 0x00, 
+0x80, 0xC1, 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,  // Code for char #
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x81, 0x03, 0x00, 0xF8, 0x83, 0x0F, 0x00, 0xFC, 0x87, 0x1F, 0x00, 0x0C, 0x07, 0x1E, 0x00, 0x06, 0x0E, 0x38, 0x00, 0x06, 0x0E, 0x30, 
+0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0x06, 0x1C, 0x30, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x1C, 0x38, 0x1C, 0x00, 0x7C, 0xF8, 0x1F, 0x00, 0x78, 0xF0, 0x0F, 0x00, 
+0x60, 0xC0, 0x03, 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,  // Code for char $
+
+0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x06, 0x0C, 0x40, 
+0x00, 0x06, 0x0C, 0x70, 0x00, 0x0E, 0x06, 0x3C, 0x00, 0xFC, 0x07, 0x0F, 0x00, 0xF0, 0x81, 0x03, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 
+0x80, 0x07, 0x00, 0x00, 0xC0, 0x81, 0x0F, 0x00, 0xF0, 0xE0, 0x3F, 0x00, 0x3C, 0x70, 0x70, 0x00, 0x0E, 0x30, 0x60, 0x00, 0x02, 0x30, 0x60, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, 
+0x70, 0x70, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char %
+
+0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x70, 0xF8, 0x1F, 0x00, 0xFC, 0x39, 0x1C, 0x00, 0xFC, 0x0F, 0x38, 0x00, 0x0E, 0x0F, 0x30, 
+0x00, 0x06, 0x0E, 0x30, 0x00, 0x06, 0x1E, 0x30, 0x00, 0x0E, 0x3B, 0x38, 0x00, 0xFE, 0x73, 0x18, 0x00, 0xFC, 0xE1, 0x1C, 0x00, 0x78, 0xC0, 0x0F, 0x00, 0x00, 0xC0, 0x07, 0x00, 
+0x00, 0xF0, 0x07, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 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,  // Code for char &
+
+0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7E, 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,  // Code for char '
+
+0x14, 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, 0xFC, 0x03, 0x00, 
+0x80, 0xFF, 0x1F, 0x00, 0xE0, 0x03, 0x7C, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x1C, 0x00, 0x80, 0x03, 0x0E, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x02, 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,  // Code for char (
+
+0x05, 0x1C, 0x00, 0x80, 0x03, 0x78, 0x00, 0xE0, 0x01, 0xE0, 0x03, 0x7C, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0x03, 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,  // Code for char )
+
+0x0A, 0x10, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 
+0x00, 0xB0, 0x03, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 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, 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,  // Code for char *
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 
+0x00, 0xE0, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 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,  // Code for char +
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, 0xF8, 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,  // Code for char ,
+
+0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 
+0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char -
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 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,  // Code for char .
+
+0x08, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xFC, 0x01, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x3E, 0x00, 0x00, 
+0x00, 0x06, 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,  // Code for char /
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x38, 
+0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 0
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 
+0x00, 0xFC, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char 1
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x30, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1C, 0x00, 0x3F, 0x00, 0x0E, 0x80, 0x3B, 0x00, 0x0E, 0xC0, 0x39, 
+0x00, 0x0E, 0xE0, 0x38, 0x00, 0x0E, 0x70, 0x38, 0x00, 0x0E, 0x3C, 0x38, 0x00, 0x1E, 0x1E, 0x38, 0x00, 0xFC, 0x0F, 0x38, 0x00, 0xF8, 0x03, 0x38, 0x00, 0xF0, 0x01, 0x38, 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,  // Code for char 2
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x03, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x3C, 0x00, 0x0E, 0x1C, 0x38, 
+0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x1E, 0x1E, 0x3C, 0x00, 0xFC, 0x3F, 0x1C, 0x00, 0xF8, 0xF3, 0x1F, 0x00, 0xF0, 0xF1, 0x0F, 0x00, 0x00, 0xC0, 0x03, 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,  // Code for char 3
+
+0x0F, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x00, 0xC7, 0x01, 0x00, 0xC0, 0xC3, 0x01, 0x00, 0xE0, 0xC0, 0x01, 
+0x00, 0x70, 0xC0, 0x01, 0x00, 0x1C, 0xC0, 0x01, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 
+0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 4
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x03, 0x00, 0xF0, 0x1F, 0x0F, 0x00, 0xFE, 0x1F, 0x1F, 0x00, 0xFE, 0x0E, 0x1E, 0x00, 0x0E, 0x06, 0x38, 0x00, 0x0E, 0x07, 0x38, 
+0x00, 0x0E, 0x07, 0x38, 0x00, 0x0E, 0x07, 0x38, 0x00, 0x0E, 0x0F, 0x3C, 0x00, 0x0E, 0x1E, 0x1E, 0x00, 0x0E, 0xFE, 0x1F, 0x00, 0x0E, 0xFC, 0x07, 0x00, 0x00, 0xF0, 0x03, 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,  // Code for char 5
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x7C, 0x38, 0x1E, 0x00, 0x1C, 0x1C, 0x3C, 0x00, 0x0E, 0x0E, 0x38, 
+0x00, 0x0E, 0x0E, 0x38, 0x00, 0x0E, 0x0E, 0x38, 0x00, 0x0E, 0x1E, 0x3C, 0x00, 0x1E, 0x3E, 0x1E, 0x00, 0x3C, 0xFC, 0x1F, 0x00, 0x38, 0xF8, 0x0F, 0x00, 0x30, 0xE0, 0x03, 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,  // Code for char 6
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x3C, 0x00, 0x0E, 0xC0, 0x3F, 0x00, 0x0E, 0xF8, 0x3F, 
+0x00, 0x0E, 0xFE, 0x03, 0x00, 0x8E, 0x3F, 0x00, 0x00, 0xCE, 0x07, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0E, 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,  // Code for char 7
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0xF0, 0xE1, 0x0F, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0xFC, 0x37, 0x1C, 0x00, 0x1E, 0x1E, 0x3C, 0x00, 0x0E, 0x1C, 0x38, 
+0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x1E, 0x3E, 0x38, 0x00, 0xFC, 0x37, 0x1C, 0x00, 0xF8, 0xF7, 0x1F, 0x00, 0xF0, 0xE1, 0x0F, 0x00, 0x00, 0xC0, 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,  // Code for char 8
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x06, 0x00, 0xF8, 0x0F, 0x0E, 0x00, 0xFC, 0x1F, 0x1E, 0x00, 0x3C, 0x3E, 0x3C, 0x00, 0x1E, 0x3C, 0x38, 0x00, 0x0E, 0x38, 0x38, 
+0x00, 0x0E, 0x38, 0x38, 0x00, 0x0E, 0x38, 0x38, 0x00, 0x1E, 0x1C, 0x1C, 0x00, 0x3C, 0x0E, 0x1F, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 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,  // Code for char 9
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x03, 0x38, 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,  // Code for char :
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x38, 0x02, 0x80, 0x03, 0x38, 0x03, 0x80, 0x03, 0xF8, 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,  // Code for char ;
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x63, 0x00, 
+0x00, 0x00, 0x63, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0xC0, 0x80, 0x01, 0x00, 0xC0, 0x80, 0x01, 0x00, 0x60, 0x00, 0x03, 0x00, 0x60, 0x00, 0x03, 0x00, 
+0x30, 0x00, 0x06, 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,  // Code for char <
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 
+0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 
+0x80, 0xC1, 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,  // Code for char =
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x03, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0xC0, 0x80, 0x01, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC1, 0x00, 
+0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 
+0x00, 0x18, 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,  // Code for char >
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x06, 0xC0, 0x39, 
+0x00, 0x06, 0xF0, 0x39, 0x00, 0x06, 0x78, 0x38, 0x00, 0x0E, 0x3C, 0x00, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ?
+
+0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x80, 0x07, 0x78, 0x00, 0xE0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0xC0, 
+0x01, 0x38, 0xE0, 0x87, 0x03, 0x18, 0xF8, 0x0F, 0x07, 0x1C, 0xFE, 0x1F, 0x06, 0x0C, 0x1F, 0x3C, 0x06, 0x0E, 0x07, 0x30, 0x0E, 0x86, 0x03, 0x30, 0x0C, 0x86, 0x01, 0x30, 0x0C, 
+0x86, 0x01, 0x18, 0x0C, 0x86, 0x01, 0x0C, 0x0C, 0x06, 0x03, 0x1F, 0x0C, 0x06, 0xFF, 0x3F, 0x0C, 0x86, 0xFF, 0x3F, 0x0C, 0x8C, 0xFF, 0x31, 0x0C, 0x8C, 0x07, 0x30, 0x04, 0x1C, 
+0x00, 0x18, 0x06, 0x38, 0x00, 0x18, 0x06, 0x70, 0x00, 0x0E, 0x03, 0xE0, 0x81, 0x07, 0x03, 0xC0, 0xFF, 0x81, 0x01, 0x00, 0x7E, 0xC0, 0x00, 0x00, 0x00, 0x40, 0x00,  // Code for char @
+
+0x13, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x00, 
+0x00, 0xF8, 0xE3, 0x00, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0xF8, 0xE3, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 
+0x00, 0xFC, 0x03, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char A
+
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 
+0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x1E, 0x1E, 0x38, 0x00, 0xFC, 0x3F, 0x1C, 0x00, 
+0xF8, 0xF3, 0x1F, 0x00, 0xF0, 0xE1, 0x0F, 0x00, 0x00, 0xC0, 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,  // Code for char B
+
+0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x1C, 
+0x00, 0x1E, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x3C, 0x00, 
+0x1C, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0xF8, 0xC0, 0x0F, 0x00, 0xF0, 0xC0, 0x03, 0x00, 0x40, 0x80, 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,  // Code for char C
+
+0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 
+0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x1C, 0x00, 
+0x3C, 0x00, 0x1E, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x80, 0x7F, 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,  // Code for char D
+
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 
+0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 
+0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x00, 0x38, 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,  // Code for char E
+
+0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 
+0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 
+0x0E, 0x00, 0x00, 0x00, 0x0E, 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,  // Code for char F
+
+0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x3C, 0x00, 0x1E, 
+0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x38, 0x38, 0x00, 0x0E, 0x38, 0x38, 0x00, 
+0x0E, 0x38, 0x38, 0x00, 0x1E, 0x38, 0x3C, 0x00, 0x1C, 0x38, 0x1C, 0x00, 0x7C, 0x38, 0x1C, 0x00, 0xF8, 0xF8, 0x0F, 0x00, 0xF0, 0xF8, 0x0F, 0x00, 0x40, 0xF8, 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,  // Code for char G
+
+0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 
+0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 
+0x00, 0x1C, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char H
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char I
+
+0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xFE, 0xFF, 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,  // Code for char J
+
+0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00, 
+0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xC0, 0x79, 0x00, 0x00, 0xE0, 0xF0, 0x00, 0x00, 0x70, 0xC0, 0x01, 0x00, 0x38, 0x80, 0x07, 0x00, 
+0x1C, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x38, 0x00, 0x02, 0x00, 0x30, 0x00, 0x02, 0x00, 0x20, 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,  // Code for char K
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 
+0x00, 0x00, 0x38, 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,  // Code for char L
+
+0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 
+0x00, 0xF0, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 
+0x00, 0xFF, 0x03, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char M
+
+0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 
+0x00, 0xE0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 
+0x00, 0x00, 0x1E, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char N
+
+0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x1C, 0x00, 0x1C, 
+0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 
+0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x7F, 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,  // Code for char O
+
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 
+0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1E, 0x00, 0x00, 0x1E, 0x0E, 0x00, 0x00, 
+0xFC, 0x0F, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xF0, 0x03, 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,  // Code for char P
+
+0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xF8, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x1C, 
+0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x3A, 0x00, 0x0E, 0x00, 0x3B, 0x00, 0x0E, 0x00, 0x3E, 0x00, 
+0x1C, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0xF8, 0x80, 0x3F, 0x00, 0xF0, 0xFF, 0x77, 0x00, 0xC0, 0xFF, 0x71, 0x00, 0x00, 0x7F, 0x20, 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,  // Code for char Q
+
+0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 
+0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x0E, 0x3C, 0x00, 0x00, 0x0E, 0x7C, 0x00, 0x00, 0x0E, 0xFC, 0x00, 0x00, 
+0x1E, 0xDE, 0x01, 0x00, 0x1E, 0xCE, 0x03, 0x00, 0xFC, 0x8F, 0x0F, 0x00, 0xF8, 0x07, 0x1E, 0x00, 0xF0, 0x03, 0x3C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char R
+
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xF0, 0x81, 0x07, 0x00, 0xF8, 0x83, 0x0F, 0x00, 0xFC, 0x07, 0x1E, 0x00, 0x1C, 0x07, 0x1C, 0x00, 0x0E, 0x0E, 0x3C, 
+0x00, 0x0E, 0x0E, 0x38, 0x00, 0x0E, 0x0E, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x0E, 0x1C, 0x38, 0x00, 0x1E, 0x1C, 0x38, 0x00, 0x1C, 0x38, 0x3C, 0x00, 0x7C, 0x78, 0x1C, 0x00, 
+0x78, 0xF8, 0x1F, 0x00, 0x60, 0xF0, 0x0F, 0x00, 0x00, 0xC0, 0x03, 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,  // Code for char S
+
+0x11, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 
+0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 
+0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 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,  // Code for char T
+
+0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3C, 
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00, 
+0x00, 0x00, 0x1E, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char U
+
+0x13, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x0F, 
+0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, 0x01, 0x00, 
+0xE0, 0x3F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x02, 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,  // Code for char V
+
+0x1B, 0x0E, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x38, 
+0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 
+0xFE, 0x01, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 
+0xF8, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+
+0x13, 0x00, 0x00, 0x20, 0x00, 0x02, 0x00, 0x30, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x78, 0xC0, 0x07, 0x00, 0xF0, 0xE1, 0x01, 
+0x00, 0xC0, 0xFB, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xC0, 0xFB, 0x00, 0x00, 0xF0, 0xE1, 0x01, 0x00, 0x78, 0xC0, 0x07, 0x00, 
+0x3C, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char X
+
+0x13, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xC0, 0x07, 0x00, 
+0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 
+0xF0, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x02, 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,  // Code for char Y
+
+0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x0E, 0x80, 0x3B, 0x00, 0x0E, 0xC0, 0x39, 0x00, 0x0E, 0xF0, 0x38, 
+0x00, 0x0E, 0x78, 0x38, 0x00, 0x0E, 0x3C, 0x38, 0x00, 0x0E, 0x1E, 0x38, 0x00, 0x0E, 0x07, 0x38, 0x00, 0x8E, 0x03, 0x38, 0x00, 0xCE, 0x01, 0x38, 0x00, 0xEE, 0x00, 0x38, 0x00, 
+0x7E, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x38, 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,  // Code for char Z
+
+0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0F, 0x0E, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 
+0x0E, 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,  // Code for char [
+
+0x08, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x3E, 
+0x00, 0x00, 0x00, 0x30, 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,  // Code for char BackSlash
+
+0x06, 0x0E, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x0E, 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0F, 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,  // Code for char ]
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 
+0x00, 0x0E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char ^
+
+0x18, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 
+0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 
+0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 
+0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char _
+
+0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char `
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0F, 0x00, 0x00, 0x8E, 0x1F, 0x00, 0x00, 0x8F, 0x3F, 0x00, 0x00, 0xC3, 0x39, 0x00, 0x80, 0xC1, 0x30, 0x00, 0x80, 0xC1, 0x30, 
+0x00, 0x80, 0xC1, 0x30, 0x00, 0x80, 0xC1, 0x10, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x63, 0x0C, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 
+0x00, 0x00, 0x20, 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,  // Code for char a
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x07, 0x0C, 0x00, 0x00, 0x03, 0x18, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x03, 0x38, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char b
+
+0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x03, 0x38, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x0C, 0x06, 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,  // Code for char c
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x07, 0x0C, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char d
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x67, 0x1C, 0x00, 0x80, 0x63, 0x38, 0x00, 0x80, 0x61, 0x30, 
+0x00, 0x80, 0x61, 0x30, 0x00, 0x80, 0x61, 0x30, 0x00, 0x80, 0x63, 0x38, 0x00, 0x00, 0x67, 0x3C, 0x00, 0x00, 0x7F, 0x1E, 0x00, 0x00, 0x7E, 0x0E, 0x00, 0x00, 0x78, 0x06, 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,  // Code for char e
+
+0x09, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x86, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 
+0x00, 0x86, 0x01, 0x00, 0x00, 0x06, 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,  // Code for char f
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x83, 0x01, 0x00, 0xFE, 0x8F, 0x07, 0x00, 0xFF, 0x9F, 0x07, 0x00, 0x07, 0x1C, 0x0E, 0x80, 0x03, 0x38, 0x0C, 0x80, 0x01, 0x30, 
+0x0C, 0x80, 0x01, 0x30, 0x0C, 0x80, 0x01, 0x30, 0x0C, 0x00, 0x03, 0x18, 0x0E, 0x00, 0x06, 0x1C, 0x07, 0x80, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 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,  // Code for char g
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 
+0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 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,  // Code for char h
+
+0x04, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xFF, 0x3F, 0x00, 0x8E, 0xFF, 0x3F, 0x00, 0x8E, 0xFF, 0x3F, 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,  // Code for char i
+
+0x04, 0x00, 0x00, 0x00, 0x0C, 0x8E, 0xFF, 0xFF, 0x0F, 0x8E, 0xFF, 0xFF, 0x07, 0x8E, 0xFF, 0xFF, 0x03, 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,  // Code for char j
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x78, 0x00, 
+0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xCE, 0x03, 0x00, 0x00, 0x8F, 0x07, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x80, 0x03, 0x1E, 0x00, 0x80, 0x01, 0x38, 0x00, 0x80, 0x00, 0x30, 0x00, 
+0x00, 0x00, 0x20, 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,  // Code for char k
+
+0x04, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char l
+
+0x16, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 
+0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x06, 0x00, 0x00, 
+0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 
+0xFE, 0x3F, 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,  // Code for char m
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 
+0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 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,  // Code for char n
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x03, 0x38, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char o
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x0E, 0x1C, 0x00, 0x00, 0x03, 0x18, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x03, 0x38, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char p
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x01, 0x30, 
+0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x0E, 0x1C, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x0F, 
+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,  // Code for char q
+
+0x0A, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 
+0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char r
+
+0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x06, 0x00, 0x00, 0x3F, 0x1E, 0x00, 0x00, 0x7F, 0x1E, 0x00, 0x80, 0x73, 0x38, 0x00, 0x80, 0xF1, 0x30, 0x00, 0x80, 0xE1, 0x30, 
+0x00, 0x80, 0xE1, 0x31, 0x00, 0x80, 0xC3, 0x31, 0x00, 0x00, 0xCF, 0x39, 0x00, 0x00, 0xCF, 0x1F, 0x00, 0x00, 0x8C, 0x1F, 0x00, 0x00, 0x00, 0x0F, 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,  // Code for char s
+
+0x07, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x01, 0x30, 
+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,  // Code for char t
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 
+0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0x3F, 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,  // Code for char u
+
+0x0F, 0x80, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x3F, 
+0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 
+0x80, 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,  // Code for char v
+
+0x14, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x38, 
+0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xC0, 0x3F, 0x00, 
+0x00, 0x00, 0x38, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x80, 0x03, 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,  // Code for char w
+
+0x0E, 0x80, 0x00, 0x20, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x03, 0x38, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xF0, 0x01, 
+0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x80, 0x03, 0x38, 0x00, 0x80, 0x01, 0x30, 0x00, 0x80, 0x00, 0x20, 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,  // Code for char x
+
+0x0F, 0x80, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0x0C, 0x80, 0x1F, 0x00, 0x0C, 0x00, 0xFE, 0x00, 0x0C, 0x00, 0xF8, 0x03, 0x0E, 0x00, 0xE0, 0x8F, 0x07, 0x00, 0x80, 0xFF, 
+0x03, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 
+0x80, 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,  // Code for char y
+
+0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x80, 0x01, 0x3C, 0x00, 0x80, 0x01, 0x3E, 0x00, 0x80, 0x01, 0x3F, 0x00, 0x80, 0x81, 0x33, 0x00, 0x80, 0xC1, 0x31, 
+0x00, 0x80, 0xE1, 0x30, 0x00, 0x80, 0x79, 0x30, 0x00, 0x80, 0x3D, 0x30, 0x00, 0x80, 0x1F, 0x30, 0x00, 0x80, 0x07, 0x30, 0x00, 0x80, 0x03, 0x30, 0x00, 0x80, 0x01, 0x30, 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,  // Code for char z
+
+0x14, 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, 0x60, 0x00, 0x00, 
+0x00, 0xF8, 0x00, 0x00, 0xF0, 0x9F, 0xFF, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0x0C, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x04, 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,  // Code for char {
+
+0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x0F, 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,  // Code for char |
+
+0x05, 0x0C, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xFE, 0x01, 0xF0, 0x9F, 0xFF, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char }
+
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 
+0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 
+0x00, 0x1C, 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,  // Code for char ~
+
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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   // Code for char };
+
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/BufferedDisplay.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,139 @@
+/***************************************************************************//**
+ * @file BufferedDisplay.cpp
+ * @brief Buffered version of GraphicsDisplay
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#include "BufferedDisplay.h"
+
+#define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7))
+
+namespace silabs {
+
+	BufferedDisplay::BufferedDisplay(const char *name) : GraphicsDisplay(name) {
+		memset((uint8_t*)_pixelBuffer, White, sizeof(_pixelBuffer));	// init full frame buffer
+		memset((uint8_t*)_dirtyRows, 0xFF, sizeof(_dirtyRows)); 		// init dirty status
+	}
+
+	/**
+	 * Override of GraphicsDisplay's pixel()
+	 */
+
+	void BufferedDisplay::pixel(int x, int y, int colour) {
+	    /* Apply constraint to x and y */
+	    if(x < 0 || y < 0) return;
+	    if(x >= DISPLAY_WIDTH || y >= DISPLAY_HEIGHT) return;
+	    
+	    /***************************************************************************************************************** 
+	     * The display expects LSB input, while the SPI is configured for 8bit MSB transfers. Therefore, we should  
+	     * construct the framebuffer accordingly, so that an MSB transmission will put pixel 0 first on the wire.
+	     *
+	     * So the actual pixel layout in framebuffer (for 128x128) is as follows:
+	     * {                                                    //Framebuffer
+	     *	{                                                   //Line 0
+	     *	 {p0, p1, p2, p3, p4, p5, p6, p7},                  //Line 0 byte 0 (byte 0)
+	     *   {p8, p9,p10,p11,p12,p13,p14,p15},                  //Line 0 byte 1 (byte 1)
+	     *   ...
+	     *   {p120,p121,p122,p123,p124,p125,p126,p127}          //Line 0 byte 15 (byte 15)
+	     *  },        
+	     *  {													//Line 1
+	     *	 {p128,p129,p130,p131,p132,p133,p134,p135},         //Line 1 byte 0 (byte 16)
+	     *   ...
+	     *  },
+	     *  ...
+	     *  {													//Line 127
+	     *	 {...},              								//Line 127 byte 0 (byte 2032)
+	     *   ...
+	     *   {...}												//Line 127 byte 15 (byte 2047) = 128*128 bits
+	     *	}
+	     * }
+	     *
+	     * This means that to calculate the actual bit position in the framebuffer byte, we need to swap the bit 
+	     * order of the lower three bits. So pixel 7 becomes bit offset 0, 6 -> 1, 5 -> 2, 4->3, 3->4, 2->5, 1->6 and 0->7.
+	     *****************************************************************************************************************/
+	    uint8_t swapx = 7 - ((unsigned int)x & 0x07);
+	    x = ((unsigned int)x & 0xFFFFFFF8) | swapx;
+
+	    /* Since we are dealing with 1-bit pixels, we can avoid having to do bitshift and comparison operations twice.
+	     * Basically, do the comparison with the requested state and current state, and if it changed, do an XOR on the framebuffer pixel and set the line to dirty.
+	     */
+	    bool change = ((_pixelBuffer[((y * DISPLAY_WIDTH) + x) / DISPLAY_BUFFER_TYPE_SIZE] & (1 << (x & DISPLAY_BUFFER_TYPE_MASK))) != ((colour & 0x01) << (x & DISPLAY_BUFFER_TYPE_MASK)));
+		if(change) {
+			/* Pixel's value and requested value are different, so since it's binary, we can simply do an XOR */
+            _pixelBuffer[((y * DISPLAY_WIDTH) + x) / DISPLAY_BUFFER_TYPE_SIZE] ^= (1 << (x & DISPLAY_BUFFER_TYPE_MASK));
+
+            /* notify dirty status of this line */
+            _dirtyRows[y / DISPLAY_BUFFER_TYPE_SIZE] |= (1 << (y & DISPLAY_BUFFER_TYPE_MASK));
+		}
+	}
+
+	int BufferedDisplay::width() {
+		return DISPLAY_WIDTH;
+	}
+	int BufferedDisplay::height() {
+		return DISPLAY_HEIGHT;
+	}
+
+	/**
+	 * Function to move bitmap into frame buffer
+	 * arguments:
+	 * 	* bitmap: pointer to uint8 array containing horizontal pixel data
+	 * 	* bmpWidth: width of the bitmap in pixels (must be multiple of 8)
+	 * 	* bmpHeight: height of the bitmap in pixels
+	 * 	* startX: starting position to apply bitmap in horizontal direction (0 = leftmost) (must be multiple of 8)
+	 * 	* startY: starting position to apply bitmap in vertical direction (0 = topmost)
+	 */
+	void BufferedDisplay::showBMP(const uint8_t* bitmap, const uint32_t bmpWidth, const uint32_t bmpHeight, const uint32_t startX, const uint32_t startY) {
+		uint32_t bmpLine = 0, y = startY, bytesPerLine = ((bmpWidth >= (DISPLAY_WIDTH - startX)) ? (DISPLAY_WIDTH - startX) : bmpWidth) / 8;
+
+		/* Apply constraints */
+		if((bmpWidth & 0x07) != 0) return;
+		if((startX & 0x07) != 0) return;
+		if(startX >= DISPLAY_WIDTH) return;
+		
+		//Superflouous due to for-loop check
+		//if((startY >= DISPLAY_HEIGHT) return;
+
+		/* Copy over bytes to the framebuffer, do not write outside framebuffer boundary */
+		for(; y < DISPLAY_HEIGHT; y++) {
+			/* Check that we are not writing more than the BMP height */
+			if(bmpLine >= bmpHeight) break;
+			
+			/* Copy over one line (bmpLine) from the BMP file to the corresponding line (y) in the pixel buffer */
+			memcpy( (void*) &(((uint8_t*)_pixelBuffer)[((y * DISPLAY_WIDTH) + startX) / 8]),
+					(const void*) &(bitmap[bmpLine * (bmpWidth / 8)]),
+					bytesPerLine);
+
+			/* Set dirty status for the line we just overwrote */
+			_dirtyRows[y / DISPLAY_BUFFER_TYPE_SIZE] |= (1 << (y % DISPLAY_BUFFER_TYPE_SIZE));
+			bmpLine++;
+		}
+
+		return;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/BufferedDisplay.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,81 @@
+/***************************************************************************//**
+ * @file BufferedDisplay.h
+ * @brief Framebuffered version of GraphicsDisplay
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#ifndef SILABS_BUFFEREDDISPLAY_H
+#define SILABS_BUFFEREDDISPLAY_H
+
+#include "GraphicsDisplay.h"
+#include "LCDSettings.h"
+
+namespace silabs {
+/** Framebuffered version of GraphicsDisplay
+ * 
+ * This has been implemented as part of the MemoryLCD library.
+ */
+class BufferedDisplay : public GraphicsDisplay {
+
+public:
+
+	BufferedDisplay(const char *name=NULL);
+
+	/**
+	 * Override of GraphicsDisplay pixel() function to set a pixel in the buffer
+     *
+     * @param x      Zero-based x-axis index of pixel to set. 0 = leftmost.
+     * @param y      Zero-based y-axis index of pixel to set. 0 = topmost.
+     * @param colour Colour value to set pixel to. In this implementation, only LSB is taken into account.
+	 */
+	virtual void pixel(int x, int y, int colour);
+	virtual int width();
+	virtual int height();
+
+	/**
+	 * Function to move bitmap into frame buffer
+	 * 
+	 * @param bitmap      pointer to uint8 array containing horizontal pixel data
+	 * @param bmpWidth    width of the bitmap in pixels (must be multiple of 8)
+	 * @param bmpHeight   height of the bitmap in pixels
+	 * @param startX      starting position to apply bitmap in horizontal direction (0 = leftmost) (must be multiple of 8)
+	 * @param startY      starting position to apply bitmap in vertical direction (0 = topmost)
+	 */
+	void showBMP(const uint8_t* bitmap, const uint32_t bmpWidth, const uint32_t bmpHeight, const uint32_t startX, const uint32_t startY);
+
+protected:
+	volatile DISPLAY_BUFFER_TYPE _pixelBuffer[DISPLAY_BUFFER_ELEMENTS]; // one full frame buffer
+	volatile DISPLAY_BUFFER_TYPE _dirtyRows[DISPLAY_HEIGHT/DISPLAY_BUFFER_TYPE_SIZE]; // 1 bit per row to indicate dirty status
+};
+
+} // namespace silabs
+
+
+
+
+#endif //SILABS_BUFFEREDDISPLAY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/GraphicsDisplay.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,456 @@
+/* mbed GraphicsDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+#include "GraphicsDisplay.h"
+
+#define incx() x++, dxt += d2xt, t += dxt
+#define incy() y--, dyt += d2yt, t += dyt
+
+const unsigned char FONT8x8[97][8] = {
+{0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
+{0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
+{0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
+{0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
+{0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
+{0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
+{0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
+{0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
+{0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
+{0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
+{0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
+{0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
+{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
+{0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
+{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
+{0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
+{0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
+{0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
+{0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
+{0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
+{0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
+{0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
+{0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
+{0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
+{0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
+{0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
+{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
+{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
+{0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
+{0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
+{0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
+{0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
+{0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
+{0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
+{0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
+{0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
+{0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
+{0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
+{0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
+{0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
+{0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
+{0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
+{0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
+{0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
+{0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
+{0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
+{0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
+{0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
+{0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
+{0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
+{0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
+{0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
+{0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
+{0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
+{0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
+{0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
+{0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
+{0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
+{0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
+{0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
+{0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
+{0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
+{0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
+{0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
+{0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
+{0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
+{0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
+{0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
+{0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
+{0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
+{0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
+{0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
+{0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
+{0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
+{0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
+{0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
+{0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
+{0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
+{0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
+{0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
+{0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
+{0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
+{0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
+{0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
+{0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
+{0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
+{0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
+{0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
+{0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
+{0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
+{0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
+{0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
+{0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
+{0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
+{0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}}; // DEL
+    
+GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
+    foreground((uint16_t)Black);
+    background((uint16_t)White);
+    // current pixel location
+	_x = 0;
+	_y = 0;
+	// window settings
+	_x1 = 0;
+	_x2 = 0;
+	_y1 = 0;
+	_y2 = 0;
+}
+    
+void GraphicsDisplay::character(int column, int row, int value) { 
+    if(externalfont){ // send external font
+        unsigned int hor,vert,offset,bpl,j,i,b;
+        const unsigned char* sign;
+        unsigned char z,w;
+        if ((value < 31) || (value > 127)) return;   // test char range
+        // read font parameter from start of array
+        offset = font[0];                    // bytes / char
+        hor = font[1];                       // get hor size of font
+        vert = font[2];                      // get vert size of font
+        bpl = font[3];                       // bytes per line
+        if (char_x + hor > width()) {
+            char_x = 0;
+            char_y = char_y + vert;
+            if (char_y >= height() - font[2]) {
+                char_y = 0;
+            }
+        }     
+        window(char_x, char_y,hor,vert); // char box
+        sign = &font[((value -32) * offset) + 4]; // start of char bitmap
+        w = sign[0];                          // width of actual char
+        for (j=0; j<vert; j++) {  //  vert line
+            for (i=0; i<hor; i++) {   //  horz line
+                z =  sign[bpl * i + ((j & 0xF8) >> 3)+1];
+                b = 1 << (j & 0x07);
+                if (( z & b ) == 0x00) {               
+                    putp(_foreground);              
+                } 
+                else {                     
+                    putp(_background);                                
+                }
+            }
+        }
+        if ((w + 2) < hor) {                   // x offset to next char
+            char_x += w + 2;
+            }
+            else char_x += hor;
+    }   
+    // send default font            
+    else {
+        blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+    }
+}
+
+void GraphicsDisplay::window(int x, int y, int w, int h) {
+    // current pixel location
+    _x = x;
+    _y = y;
+    // window settings
+    _x1 = x;
+    _x2 = x + w - 1;
+    _y1 = y;
+    _y2 = y + h - 1;
+}
+    
+void GraphicsDisplay::putp(int colour) {
+    // put pixel at current pixel location
+    pixel(_x, _y, colour);
+    // update pixel location based on window settings
+    _x++;
+    if(_x > _x2) {
+        _x = _x1;
+        _y++;
+        if(_y > _y2) {
+            _y = _y1;
+        }
+    }
+}
+
+void GraphicsDisplay::rect(int x0, int y0, int x1, int y1, int color) {
+    if (x1 > x0) hline(x0,x1,y0,color);
+    else  hline(x1,x0,y0,color);
+    if (y1 > y0) vline(x0,y0,y1,color);
+    else vline(x0,y1,y0,color);
+    if (x1 > x0) hline(x0,x1,y1,color);
+    else  hline(x1,x0,y1,color);
+    if (y1 > y0) vline(x1,y0,y1,color);
+    else vline(x1,y1,y0,color);
+    return;
+}
+ 
+void GraphicsDisplay::fillrect(int x0, int y0, int w, int h, int colour) {
+    unsigned long int index=0;
+    if (w < 0) {
+        x0 = x0 + w;
+        w = -w;
+    }
+    if (h < 0) {
+        y0 = y0 + h;
+        h = -h;
+    }
+    window(x0,y0,w,h);
+    int num = h*w;
+    for( index = 0; index<num; index++ ) {
+       putp(colour); 
+    }
+    return;
+}
+
+void GraphicsDisplay::fill(int x, int y, int w, int h, int colour) { 
+    fillrect(x, y, w, h, colour);
+}
+
+void GraphicsDisplay::circle(int x, int y, int r,int colour){
+	int ce = -r;
+	int cx = r;
+	int cy = 0;
+	while(cx >= cy){
+		pixel(x+cx,y+cy,colour);
+		pixel(x-cx,y-cy,colour);
+		pixel(x-cx,y+cy,colour);
+		pixel(x+cx,y-cy,colour);
+		pixel(x+cy,y+cx,colour);
+		pixel(x-cy,y+cx,colour);
+		pixel(x-cy,y-cx,colour);
+		pixel(x+cy,y-cx,colour);
+		ce += 2*cy++ + 1;
+		if(ce >= 0){
+			ce -= 2*cx---1;	
+		}
+		
+	}
+
+}
+
+// To draw circle set a and b to the same values
+void GraphicsDisplay::ellipse(int xc, int yc, int a, int b, unsigned int colour)
+{
+    /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
+    int x = 0, y = b;
+    long a2 = (long)a*a, b2 = (long)b*b;
+    long crit1 = -(a2/4 + a%2 + b2);
+    long crit2 = -(b2/4 + b%2 + a2);
+    long crit3 = -(b2/4 + b%2);
+    long t = -a2*y;                         // e(x+1/2,y-1/2) - (a^2+b^2)/4
+    long dxt = 2*b2*x, dyt = -2*a2*y;
+    long d2xt = 2*b2, d2yt = 2*a2;
+ 
+    while (y>=0 && x<=a) {
+        pixel(xc+x, yc+y, colour);
+        if (x!=0 || y!=0)
+            pixel(xc-x, yc-y, colour);
+        if (x!=0 && y!=0) {
+            pixel(xc+x, yc-y, colour);
+            pixel(xc-x, yc+y, colour);
+        }
+        if (t + b2*x <= crit1 ||            // e(x+1,y-1/2) <= 0
+                t + a2*y <= crit3)          // e(x+1/2,y) <= 0
+            incx();
+        else if (t - a2*y > crit2)          // e(x+1/2,y-1) > 0
+            incy();
+        else {
+            incx();
+            incy();
+        }
+    }
+}
+// To draw circle set a and b to the same values
+void GraphicsDisplay::fillellipse(int xc, int yc, int a, int b, unsigned int colour)
+{
+    /* e(x,y) = b^2*x^2 + a^2*y^2 - a^2*b^2 */
+    int x = 0, y = b;
+    int rx = x, ry = y;
+    unsigned int width = 1;
+    unsigned int height = 1;
+    long a2 = (long)a*a, b2 = (long)b*b;
+    long crit1 = -(a2/4 + a%2 + b2);
+    long crit2 = -(b2/4 + b%2 + a2);
+    long crit3 = -(b2/4 + b%2);
+    long t = -a2*y;                         // e(x+1/2,y-1/2) - (a^2+b^2)/4
+    long dxt = 2*b2*x, dyt = -2*a2*y;
+    long d2xt = 2*b2, d2yt = 2*a2;
+    if (b == 0) {
+        fillrect(xc-a, yc, 2*a+1, 1, colour);
+        return;
+    }
+    while (y>=0 && x<=a) {
+        if (t + b2*x <= crit1 ||            // e(x+1,y-1/2) <= 0
+                t + a2*y <= crit3) {        // e(x+1/2,y) <= 0
+            if (height == 1)
+                ;                           // draw nothing
+            else if (ry*2+1 > (height-1)*2) {
+                fillrect(xc-rx, yc-ry, width, height-1, colour);
+                fillrect(xc-rx, yc+ry+1, width, 1-height, colour);
+                ry -= height-1;
+                height = 1;
+            } else {
+                fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
+                ry -= ry;
+                height = 1;
+            }
+            incx();
+            rx++;
+            width += 2;
+        } else if (t - a2*y > crit2) {      // e(x+1/2,y-1) > 0
+            incy();
+            height++;
+        } else {
+            if (ry*2+1 > height*2) {
+                fillrect(xc-rx, yc-ry, width, height, colour);
+                fillrect(xc-rx, yc+ry+1, width, -height, colour);
+            } else {
+                fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
+            }
+            incx();
+            incy();
+            rx++;
+            width += 2;
+            ry -= height;
+            height = 1;
+        }
+    }
+    if (ry > height) {
+        fillrect(xc-rx, yc-ry, width, height, colour);
+        fillrect(xc-rx, yc+ry+1, width, -height, colour);
+    } else {
+        fillrect(xc-rx, yc-ry, width, ry*2+1, colour);
+    }
+}
+ 
+ 
+void GraphicsDisplay::line(int x0, int y0, int x1, int y1, int colour) {
+    //window(x0, y, w, h);
+    int   dx = 0, dy = 0;
+    int   dx_sym = 0, dy_sym = 0;
+    int   dx_x2 = 0, dy_x2 = 0;
+    int   di = 0;
+    dx = x1-x0;
+    dy = y1-y0;
+ 
+    if (dx == 0) {        /* vertical line */
+        if (y1 > y0) vline(x0,y0,y1,colour);
+        else vline(x0,y1,y0,colour);
+        return;
+    }
+    if (dx > 0) {
+        dx_sym = 1;
+    } else {
+        dx_sym = -1;
+    }
+    if (dy == 0) {        /* horizontal line */
+        if (x1 > x0) hline(x0,x1,y0,colour);
+        else  hline(x1,x0,y0,colour);
+        return;
+    }
+    if (dy > 0) {
+        dy_sym = 1;
+    } else {
+        dy_sym = -1;
+    }
+    dx = dx_sym*dx;
+    dy = dy_sym*dy;
+    dx_x2 = dx*2;
+    dy_x2 = dy*2;
+    if (dx >= dy) {
+        di = dy_x2 - dx;
+        while (x0 != x1) {
+ 
+            pixel(x0, y0, colour);
+            x0 += dx_sym;
+            if (di<0) {
+                di += dy_x2;
+            } else {
+                di += dy_x2 - dx_x2;
+                y0 += dy_sym;
+            }
+        }
+        pixel(x0, y0, colour);
+    } else {
+        di = dx_x2 - dy;
+        while (y0 != y1) {
+            pixel(x0, y0, colour);
+            y0 += dy_sym;
+            if (di < 0) {
+                di += dx_x2;
+            } else {
+                di += dx_x2 - dy_x2;
+                x0 += dx_sym;
+            }
+        }
+        pixel(x0, y0, colour);
+    }
+    return;
+}
+ 
+void GraphicsDisplay::hline(int x0, int x1, int y, int colour) {
+    int w;
+    w = x1 - x0 + 1;
+    window(x0,y,w,1);
+    for (int x=0; x<w; x++) {
+        putp(colour);
+    }
+    return;
+}
+ 
+void GraphicsDisplay::vline(int x, int y0, int y1, int colour) {
+    int h;
+    h = y1 - y0 + 1;
+    window(x,y0,1,h);
+    for (int y=0; y<h; y++) {
+        putp(colour);
+    }
+    return;
+}
+
+void GraphicsDisplay::cls() {
+    fill(0, 0, width(), height(), _background);
+}
+    
+void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour) { 
+    window(x, y, w, h);
+    for(int i=0; i<w*h; i++) {
+        putp(colour[i]);
+    }
+}
+    
+void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour) {
+    window(x, y, w, h);
+    for(int i = 0; i < w*h; i++) {
+        char byte = colour[i >> 3];
+        int offset = i & 0x7;
+        int c = ((byte << (offset)) & 0x80) ? _foreground : _background;
+        putp(c);
+    }
+}
+    
+int GraphicsDisplay::columns() { 
+    return width() / 8; 
+}
+
+int GraphicsDisplay::rows() { 
+    return height() / 8; 
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/GraphicsDisplay.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,68 @@
+/* mbed GraphicsDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * A library for providing a common base class for Graphics displays
+ * To port a new display, derive from this class and implement
+ * the constructor (setup the display), pixel (put a pixel
+ * at a location), width and height functions. Everything else
+ * (locate, printf, putc, cls, window, putp, fill, blit, blitbit) 
+ * will come for free. You can also provide a specialised implementation
+ * of window and putp to speed up the results
+ */
+
+#ifndef MBED_GRAPHICSDISPLAY_H
+#define MBED_GRAPHICSDISPLAY_H
+
+#include "TextDisplay.h"
+
+class GraphicsDisplay : public TextDisplay {
+
+public:         
+          
+    GraphicsDisplay(const char* name);
+     
+    virtual void pixel(int x, int y, int colour) = 0;
+    virtual int width() = 0;
+    virtual int height() = 0;
+        
+    virtual void window(int x, int y, int w, int h);
+    virtual void putp(int colour);
+    
+    virtual void cls();
+    virtual void rect(int x0, int y0, int x1, int y1, int colour);
+    virtual void fillrect(int x0, int y0, int w, int h, int colour);
+    // fill equals fillrect, name has been kept to not break compatibility
+    virtual void fill(int x, int y, int w, int h, int colour);
+    
+    // To draw circle using ellipse, set a and b to the same values
+    virtual void ellipse(int xc, int yc, int a, int b, unsigned int colour);
+    virtual void fillellipse(int xc, int yc, int a, int b, unsigned int colour);
+    virtual void circle(int x, int y, int r, int colour);
+    
+    virtual void hline(int x0, int x1, int y, int colour);
+    virtual void vline(int x0, int y0, int y1, int colour);
+    virtual void line(int x0, int y0, int x1, int y1, int colour);
+    
+    virtual void blit(int x, int y, int w, int h, const int *colour);    
+    virtual void blitbit(int x, int y, int w, int h, const char* colour);
+    
+    virtual void character(int column, int row, int value);
+    virtual int columns();
+    virtual int rows();
+    
+protected:
+
+    // pixel location
+    short _x;
+    short _y;
+    
+    // window location
+    short _x1;
+    short _x2;
+    short _y1;
+    short _y2;
+
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/LCDSettings.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,29 @@
+#ifndef LCDSETTINGS_H
+#define LCDSETTINGS_H
+
+/** MemoryLCD width in pixels */ 
+#define DISPLAY_WIDTH				(128)
+
+/** MemoryLCD height in pixels */
+#define DISPLAY_HEIGHT				(128)
+
+/** Data type for storing buffer the pixel buffer */
+#if	((DISPLAY_WIDTH % 32) == 0)
+#define	DISPLAY_BUFFER_TYPE			uint32_t
+#define DISPLAY_BUFFER_TYPE_MASK    (0x1F)
+#else
+#define DISPLAY_BUFFER_TYPE			uint8_t
+#define DISPLAY_BUFFER_TYPE_MASK    (0x07)
+#endif
+
+#define DISPLAY_BUFFER_TYPE_SIZE	(sizeof(DISPLAY_BUFFER_TYPE) * 8)
+#define DISPLAY_BUFFER_ELEMENTS 	((DISPLAY_WIDTH*DISPLAY_HEIGHT)/DISPLAY_BUFFER_TYPE_SIZE)
+
+/** Maximum length of a printf to the display */
+#define MAX_PRINTF_CHARS			40
+
+/** Color definitions */
+#define White						0xFFFFFFFF
+#define Black						0x00000000
+
+#endif
Binary file Drivers/LS013B7DH03/LS013B7DH03.ZIP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/LS013B7DH03.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,254 @@
+/***************************************************************************//**
+ * @file LS013B7DH03.cpp
+ * @brief Driver class for the Sharp LS013B7DH03 memory LCD on some kits.
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#include <mbed.h>
+#include "LS013B7DH03.h"
+#include "SPI.h"
+#include "Peripherals.h"
+
+/* LS013B7DH03 SPI commands */
+#define LS013B7DH03_CMD_UPDATE     (0x01)
+#define LS013B7DH03_CMD_ALL_CLEAR  (0x04)
+
+/* Macro to switch endianness on char value */
+#define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7))
+
+namespace silabs {
+
+
+LS013B7DH03::LS013B7DH03(mbed::SPI * spi, DigitalOut * CS, const char *name) : BufferedDisplay( name )  {
+	//Save pointer to ChipSelect pin
+	_CS = CS;
+	_CS->write(0);
+	DigitalOut DISP(P6_6);
+
+//Save pointer to ExtCom pin
+///	_EXTCOM = ExtCom;
+///	_EXTCOM->write(0);
+
+	DISP  = 0;
+	wait_ms(1);
+	DISP = 1;
+
+	//Save pointer to spi peripheral
+	_spi = spi;
+	//_spi->frequency(600000);
+	_spi->format( 8, 0 );
+
+	_internalEventCallback.attach(this, &LS013B7DH03::_cbHandler);
+
+	//Initialize
+	//_spi->set_dma_usage((DMAUsage)DMA_USAGE_NEVER);
+	_refreshCount = 0;
+	_lcdPolarity = 0;
+	_state = IDLE;
+	_completionCallbackPtr = NULL;
+	_rowCount = 0;
+
+	//Start toggling the EXTCOM pin
+	//_displayToggler.attach(this, &LS013B7DH03::toggle, 0.008f);
+}
+
+/**
+ * Call this function at 55 ~ 65 Hz to keep the display up-to-date.
+ */
+void LS013B7DH03::toggle() {
+//	_EXTCOM->write(!_EXTCOM->read());
+//	_refreshCount++;
+}
+
+/**
+ * Function to get internal refresh counter
+ */
+uint32_t LS013B7DH03::getRefreshTicks() {
+	return _refreshCount;
+}
+
+/**
+ * Call this function to push all changes to the display
+ */
+int LS013B7DH03::update( cbptr_t callback ) {
+	uint32_t rowCount = 0;
+	bool update = false;
+
+	// Check if something actually changed in the pixelbuffer
+	for(rowCount = 0; rowCount < DISPLAY_HEIGHT/DISPLAY_BUFFER_TYPE_SIZE; rowCount++) {
+		if(_dirtyRows[rowCount] != 0) update = true;
+	}
+
+	if(update == false) return LS013B7DH03_NO_ACTION;
+
+	// Watch out to not mess up a transfer
+	if(_state != IDLE) return LS013B7DH03_ERROR_BUSY;
+
+	_completionCallbackPtr = callback;
+
+	// Take control
+	_state = WAIT_WRITE;
+	_rowCount = 0;
+
+	//Initialize the command vector
+	_cmd[0] = (uint8_t)SWAP8(LS013B7DH03_CMD_UPDATE);
+	_cmd[1] = SWAP8(1);
+
+	// Activate LCD
+	_CS->write(1);
+	_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
+
+	return LS013B7DH03_OK;
+}
+
+/**
+ * Function to test display buffer
+ */
+int LS013B7DH03::showDemo() {
+	for(uint32_t i = 0; i < DISPLAY_BUFFER_ELEMENTS; i+=2) {
+		_pixelBuffer[i] = 0x00FFF000;
+	}
+	memset((void*)_dirtyRows, 0xFF, sizeof(_dirtyRows));
+
+	return LS013B7DH03_OK;
+}
+
+/**
+ * Function to get internal refresh counter
+ */
+int LS013B7DH03::executeOnceLCD() {
+	if(interrupt_received)
+		_cbHandler(0);
+}
+
+/**
+ * Call this function to immediately clear the display
+ */
+int LS013B7DH03::clearImmediate( cbptr_t callback ) {
+	// Watch out to not mess up a transfer
+	if(_state != IDLE) return LS013B7DH03_ERROR_BUSY;
+
+	_state = WAIT_CLEAR;
+	_completionCallbackPtr = callback;
+
+	// Clear out the pixel buffer
+	memset((void*)_pixelBuffer, White, sizeof(_pixelBuffer));
+	memset((void*)_dirtyRows, 0, sizeof(_dirtyRows));
+
+	_cmd[0] = (uint8_t)(SWAP8(LS013B7DH03_CMD_ALL_CLEAR | _lcdPolarity));
+	_cmd[1] = 0;
+
+	// Wait for the ChipSelect line
+	_CS->write(1);
+	_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
+
+	return LS013B7DH03_OK;
+}
+
+void LS013B7DH03::_cbHandlerTimeout( void ) {
+	interrupt_received = true;
+	//this->_cbHandler(0);
+}
+
+void LS013B7DH03::_cbHandler( int event ) {
+	interrupt_received = false;
+	if((_state == WAIT_WRITE) || (_state == WRITING))
+	{
+		_state = WRITING;
+		while(_rowCount < DISPLAY_HEIGHT) {
+			// Determine the next line to send
+			if((_dirtyRows[_rowCount / DISPLAY_BUFFER_TYPE_SIZE] & (1 << (_rowCount % DISPLAY_BUFFER_TYPE_SIZE))) != 0) {
+
+				// Row is dirty, send an update to the display
+				_cmd[1] = (uint8_t)SWAP8(_rowCount + 1);
+				memcpy((void*)&(_cmd[2]), (const void*)&(_pixelBuffer[_rowCount*(DISPLAY_WIDTH/DISPLAY_BUFFER_TYPE_SIZE)]), DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE));
+
+				if(_spi->write((const char*)_cmd, (2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE))) , (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != (2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE)))) {
+					// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
+					_state = DONE;
+					//printf("Failed at _cbHandler\n");
+					// Make sure the handler is called again
+					_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
+				}else{	//sc...
+					_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
+				}
+
+				// Transaction is in progress, so update row state
+				_dirtyRows[_rowCount / DISPLAY_BUFFER_TYPE_SIZE] &= ~(1 << (_rowCount % DISPLAY_BUFFER_TYPE_SIZE));
+				_rowCount++;
+				return;
+			}
+
+			// Row wasn't touched, so check the next row
+			_rowCount++;
+		}
+
+		// Done sending!
+		_cmd[1] = 0xFF;
+		_state = TRANSFERS_DONE;
+		if(_spi->write((const char*)_cmd, 2, (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != 2) {
+			// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
+			_state = DONE;
+
+			// Make sure the handler is called again
+			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
+		}else{	//sc...
+			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
+		}
+		return;
+	}
+	else if (_state == WAIT_CLEAR)
+	{
+		_state = TRANSFERS_DONE;
+		if(_spi->write((const char*)_cmd, 2, (char*)NULL, 0/*, _internalEventCallback, SPI_EVENT_COMPLETE*/) != 2) {
+			// SPI is busy, with another transaction. This means the data to the LCD has been corrupted, so fail here.
+			_state = DONE;
+
+			// Make sure the handler is called again
+			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.1f);
+		}else{	//sc...
+			_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.001f);
+		}
+		return;
+	}
+	else if (_state == TRANSFERS_DONE)
+	{
+		_state = DONE;
+		_csTimeout.attach(this, &LS013B7DH03::_cbHandlerTimeout, 0.01f);
+		return;
+	}
+	else if (_state == DONE)
+	{
+		_CS->write(0);
+		_state = IDLE;
+		if(_completionCallbackPtr != 0) _completionCallbackPtr();
+		return;
+	}
+}
+
+} // namespace silabs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/LS013B7DH03.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,133 @@
+/***************************************************************************//**
+ * @file LS013B7DH03.h
+ * @brief Driver class for the Sharp LS013B7DH03 memory LCD on some kits.
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#ifndef SILABS_LS013B7DH03_H
+#define SILABS_LS013B7DH03_H
+
+#include "platform.h"
+#include <mbed.h>
+#include "LCDSettings.h"
+#include "BufferedDisplay.h"
+#include "Peripherals.h"
+
+typedef void (*cbptr_t)(void);
+
+#define LS013B7DH03_ERROR_BUSY		-1
+#define LS013B7DH03_ERROR_SPI_BUSY	-2
+#define LS013B7DH03_NO_ACTION		-3
+#define LS013B7DH03_ERROR_ARGUMENT	-4
+#define	LS013B7DH03_OK				0
+
+typedef enum {
+	IDLE,			// No operation currently ongoing
+	CLEARING,		// In the process of clearing the display
+	WRITING,		// In the process of sending a display update
+	WAIT_CLEAR,		// Going to clear after CS pin timeout
+	WAIT_WRITE,		// Going to write after CS pin timeout
+	TRANSFERS_DONE, // Last transfer in progress
+	DONE			// Done with transmission, waiting for CS pin to become high
+} LS013B7DH03_state_t;
+
+namespace silabs {
+class LS013B7DH03 : public BufferedDisplay {
+
+public:
+
+	LS013B7DH03(SPI * spi, DigitalOut * CS,  const char *name=NULL);
+
+	/**
+	 * Call this function to push all changes to the display
+	 */
+	int update( cbptr_t callback = NULL );
+
+	/**
+	 * Immediately clear the display: set pixel buffer to zero and clear out the display.
+	 */
+	int clearImmediate( cbptr_t callback = NULL );
+
+	/**
+	 * Function to test display buffer
+	 */
+	int showDemo();
+
+
+
+	/**
+	 * Function to get internal refresh counter
+	 */
+	uint32_t getRefreshTicks();
+
+	/**
+	 * Function to get internal refresh counter
+	 */
+	int executeOnceLCD();
+
+
+protected:
+	mbed::SPI *_spi;
+	//mbed::DigitalOut *_EXTCOM;
+	mbed::DigitalOut *_CS;
+
+	mbed::Ticker _displayToggler;
+	mbed::Timeout _csTimeout;
+
+	event_callback_t _internalEventCallback;
+	volatile uint32_t _refreshCount;
+	uint8_t _lcdPolarity;
+	LS013B7DH03_state_t _state;
+	cbptr_t _completionCallbackPtr;
+	volatile uint32_t _rowCount;
+	uint8_t _cmd[2 + (DISPLAY_WIDTH / DISPLAY_BUFFER_TYPE_SIZE * sizeof(DISPLAY_BUFFER_TYPE))];
+
+	/**
+	 * Callback handler for internal SPI transfers.
+	 */
+	void _cbHandler( int event );
+
+	/**
+	 * Callback handler for internal SPI transfers triggered by timeout.
+	 */
+	void _cbHandlerTimeout( void );
+
+	/**
+	 * Call this function at 55 ~ 65 Hz to keep the display from losing contrast.
+	 */
+	void toggle();
+
+	/**
+	 *
+	 */
+	bool interrupt_received;
+};
+
+} // namespace silabs
+
+#endif //SILABS_LS013B7DH03_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/Neu44x36.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,103 @@
+//GLCD FontName : Neuropolitical_Rg44x36
+//GLCD FontSize : 44 x 36
+
+const unsigned char Neu44x36[] = {
+        221,44,36,5,
+        0x17, 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, 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,  // Code for char  
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x1F, 0x00, 0xC0, 0xFF, 0x3F, 0x1F, 0x00, 0xC0, 0xFF, 0x3F, 0x1F, 0x00, 0xC0, 0xFF, 0x3F, 0x1F, 0x00, 0xC0, 0xFF, 0x3F, 0x1F, 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, 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,  // Code for char !
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 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, 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,  // Code for char "
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0xE0, 0x00, 0x00, 0xC0, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x1F, 0x00, 0x00, 0x70, 0xFE, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0xE3, 0x00, 0x00, 0xC0, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x70, 0x20, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char #
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x1E, 0x00, 0x80, 0xFF, 0x07, 0x1E, 0x00, 0x80, 0xFF, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0x0F, 0x1E, 0x00, 0xC0, 0x87, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0xBF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char $
+        0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xC1, 0x01, 0x00, 0x00, 0xC0, 0xC1, 0x01, 0x00, 0x00, 0xC0, 0xC1, 0x01, 0x00, 0x00, 0xC0, 0xC1, 0x01, 0x10, 0x00, 0xC0, 0xC1, 0x01, 0x18, 0x00, 0xC0, 0xC1, 0x01, 0x1C, 0x00, 0xC0, 0xC1, 0x01, 0x1F, 0x00, 0xC0, 0xFF, 0x81, 0x1F, 0x00, 0xC0, 0xFF, 0xC1, 0x07, 0x00, 0x80, 0xFF, 0xF0, 0x03, 0x00, 0x00, 0x3E, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0xF8, 0xF1, 0x07, 0x00, 0x00, 0xFC, 0xF8, 0x0F, 0x00, 0x00, 0x3F, 0xFC, 0x1F, 0x00, 0x80, 0x1F, 0x1C, 0x1E, 0x00, 0xC0, 0x07, 0x1C, 0x1C, 0x00, 0xC0, 0x03, 0x1C, 0x1C, 0x00, 0xC0, 0x00, 0x1C, 0x1C, 0x00, 0x40, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x03, 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,  // Code for char %
+        0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x7F, 0xFE, 0x0F, 0x00, 0x80, 0xFF, 0xFE, 0x1F, 0x00, 0xC0, 0xFF, 0x1F, 0x1F, 0x00, 0xC0, 0xFF, 0x0F, 0x1E, 0x00, 0xC0, 0xC3, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x03, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x0F, 0x1E, 0x00, 0xC0, 0x83, 0x1F, 0x1E, 0x00, 0xC0, 0x83, 0x1F, 0x1E, 0x00, 0xC0, 0x83, 0x3F, 0x1E, 0x00, 0xC0, 0x83, 0x7B, 0x1E, 0x00, 0xC0, 0xC3, 0x7B, 0x1E, 0x00, 0xC0, 0xC3, 0xF1, 0x1E, 0x00, 0xC0, 0xFF, 0xE1, 0x1E, 0x00, 0xC0, 0xFF, 0xE1, 0x1F, 0x00, 0x80, 0xFF, 0xC0, 0x1F, 0x00, 0x80, 0xFF, 0x80, 0x0F, 0x00, 0x00, 0x3E, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char &
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 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, 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,  // Code for char '
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 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, 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,  // Code for char (
+        0x08, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x1E, 0x00, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, 0xFF, 0x03, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x0F, 0x00, 0x00, 0x00, 0xDC, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0xDC, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00,  // Code for char +
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 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, 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,  // Code for char -
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 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, 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,  // Code for char .
+        0x11, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 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,  // Code for char 0
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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, 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,  // Code for char 1
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x87, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0x0F, 0x1E, 0x00, 0x80, 0xFF, 0x0F, 0x1E, 0x00, 0x80, 0xFF, 0x07, 0x1E, 0x00, 0x00, 0xFF, 0x03, 0x1E, 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,  // Code for char 2
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0x1F, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFD, 0x0F, 0x00, 0x00, 0xFE, 0xF8, 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,  // Code for char 3
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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,  // Code for char 4
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x0F, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 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,  // Code for char 5
+        0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x87, 0x07, 0x1F, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0xC0, 0x83, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x1E, 0x00, 0x00, 0x80, 0x9F, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF0, 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,  // Code for char 6
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x10, 0x00, 0xC0, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x80, 0x1F, 0x00, 0xC0, 0x03, 0xC0, 0x1F, 0x00, 0xC0, 0x03, 0xF0, 0x0F, 0x00, 0xC0, 0x03, 0xF8, 0x07, 0x00, 0xC0, 0x03, 0xFC, 0x03, 0x00, 0xC0, 0x03, 0xFE, 0x01, 0x00, 0xC0, 0x03, 0x7F, 0x00, 0x00, 0xC0, 0xC3, 0x3F, 0x00, 0x00, 0xC0, 0xE3, 0x1F, 0x00, 0x00, 0xC0, 0xF3, 0x0F, 0x00, 0x00, 0xC0, 0xFB, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 7
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xF8, 0x07, 0x00, 0x80, 0xFF, 0xFD, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x1F, 0x1F, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x07, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFD, 0x0F, 0x00, 0x00, 0xFE, 0xF8, 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,  // Code for char 8
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xCF, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x07, 0x0F, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0x03, 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,  // Code for char 9
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 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, 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,  // Code for char :
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xF8, 0x81, 0x7F, 0x00, 0x00, 0xF8, 0x81, 0x7F, 0x00, 0x00, 0xF8, 0x81, 0x7F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x78, 0xE0, 0x01, 0x00, 0x00, 0x78, 0xC0, 0x01, 0x00, 0x00, 0x3C, 0xC0, 0x03, 0x00, 0x00, 0x3C, 0x80, 0x03, 0x00, 0x00, 0x1E, 0x80, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x0F, 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, 0x00, 0x00, 0x00,  // Code for char <
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x00, 0x70, 0x70, 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, 0x00, 0x00, 0x00, 0x00,  // Code for char =
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x00, 0x1C, 0x80, 0x07, 0x00, 0x00, 0x3C, 0xC0, 0x03, 0x00, 0x00, 0x38, 0xC0, 0x03, 0x00, 0x00, 0x78, 0xE0, 0x01, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0xE0, 0x71, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xC0, 0x3B, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x04, 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, 0x00, 0x00, 0x00, 0x00,  // Code for char >
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x0E, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x87, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 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,  // Code for char ?
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x07, 0x7C, 0x80, 0x03, 0x00, 0x87, 0xFF, 0x83, 0x03, 0x00, 0x87, 0xFF, 0x83, 0x03, 0x00, 0xC7, 0xFF, 0x87, 0x03, 0x00, 0xC7, 0x83, 0x07, 0x00, 0x00, 0xC7, 0x01, 0x07, 0x00, 0x00, 0xC7, 0x01, 0x07, 0x00, 0x00, 0xC7, 0x01, 0x07, 0x00, 0x00, 0xC7, 0x01, 0x07, 0x00, 0x00, 0xC7, 0x01, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 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,  // Code for char @
+        0x22, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xF3, 0x00, 0x00, 0x00, 0xFF, 0xF1, 0x00, 0x00, 0x80, 0x7F, 0xF0, 0x00, 0x00, 0xC0, 0x3F, 0xF0, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x00, 0x00, 0xC0, 0x0F, 0xF0, 0x00, 0x00, 0xC0, 0x1F, 0xF0, 0x00, 0x00, 0x80, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xF1, 0x00, 0x00, 0x00, 0xFE, 0xF3, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00,  // Code for char A
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x07, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0x1F, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFD, 0x0F, 0x00, 0x00, 0xFE, 0xF8, 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,  // Code for char B
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 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,  // Code for char C
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0x03, 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,  // Code for char D
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x0F, 0x1F, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 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,  // Code for char E
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x0F, 0x00, 0x00, 0xC0, 0x07, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 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,  // Code for char F
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char G
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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,  // Code for char H
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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, 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,  // Code for char I
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char J
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFD, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x01, 0x00, 0x00, 0x7E, 0xF8, 0x01, 0x00, 0x00, 0x3F, 0xF0, 0x03, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0x00, 0x80, 0x0F, 0xC0, 0x0F, 0x00, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x01, 0x00, 0x1C, 0x00, 0xC0, 0x00, 0x00, 0x1C, 0x00, 0x40, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x00, 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, 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,  // Code for char K
+        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 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,  // Code for char L
+        0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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,  // Code for char M
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 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,  // Code for char N
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0x3F, 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,  // Code for char O
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x03, 0x3C, 0x00, 0x00, 0xC0, 0x07, 0x3E, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 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,  // Code for char P
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x3E, 0x00, 0xC0, 0x07, 0x00, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xF7, 0x01, 0x00, 0xFE, 0xFF, 0xC3, 0x01, 0x00, 0xE0, 0x3F, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char Q
+        0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0xC0, 0x03, 0x1E, 0x00, 0x00, 0xC0, 0x03, 0x3E, 0x00, 0x00, 0xC0, 0x03, 0x7E, 0x00, 0x00, 0xC0, 0x03, 0x7E, 0x00, 0x00, 0xC0, 0x03, 0xFE, 0x00, 0x00, 0xC0, 0x03, 0xFE, 0x01, 0x00, 0xC0, 0x03, 0xFE, 0x01, 0x00, 0xC0, 0x03, 0xFE, 0x03, 0x00, 0xC0, 0x03, 0xDE, 0x07, 0x00, 0xC0, 0x03, 0xDE, 0x07, 0x00, 0xC0, 0x03, 0x9E, 0x0F, 0x00, 0xC0, 0x03, 0x9E, 0x1F, 0x00, 0xC0, 0x03, 0x1E, 0x1F, 0x00, 0xC0, 0x03, 0x1E, 0x1E, 0x00, 0xC0, 0x07, 0x1F, 0x1E, 0x00, 0xC0, 0xFF, 0x1F, 0x1C, 0x00, 0x80, 0xFF, 0x0F, 0x1C, 0x00, 0x80, 0xFF, 0x0F, 0x18, 0x00, 0x80, 0xFF, 0x07, 0x10, 0x00, 0x00, 0xFE, 0x03, 0x10, 0x00, 0x00, 0x00, 0x00, 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, 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,  // Code for char R
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x1E, 0x00, 0x00, 0xFF, 0x03, 0x1E, 0x00, 0x80, 0xFF, 0x07, 0x1E, 0x00, 0xC0, 0xFF, 0x0F, 0x1E, 0x00, 0xC0, 0xFF, 0x0F, 0x1E, 0x00, 0xC0, 0x87, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char S
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x03, 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,  // Code for char T
+        0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 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,  // Code for char U
+        0x22, 0x40, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x40, 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,  // Code for char V
+        0x2C, 0x40, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+        0x21, 0x00, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x18, 0x00, 0xC0, 0x00, 0x00, 0x1C, 0x00, 0xC0, 0x01, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0x1F, 0x00, 0xC0, 0x07, 0x80, 0x1F, 0x00, 0xC0, 0x0F, 0xC0, 0x1F, 0x00, 0xC0, 0x1F, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0xE0, 0x07, 0x00, 0x00, 0x7F, 0xF0, 0x03, 0x00, 0x00, 0xFE, 0xF8, 0x01, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x01, 0x00, 0x00, 0x7E, 0xF8, 0x03, 0x00, 0x00, 0x3F, 0xF0, 0x07, 0x00, 0x80, 0x1F, 0xE0, 0x0F, 0x00, 0xC0, 0x0F, 0xC0, 0x1F, 0x00, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x00, 0x1E, 0x00, 0xC0, 0x01, 0x00, 0x1C, 0x00, 0xC0, 0x00, 0x00, 0x18, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char X
+        0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 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,  // Code for char Y
+        0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xC0, 0x03, 0x00, 0x1F, 0x00, 0xC0, 0x03, 0x80, 0x1F, 0x00, 0xC0, 0x03, 0xC0, 0x1F, 0x00, 0xC0, 0x03, 0xC0, 0x1F, 0x00, 0xC0, 0x03, 0xE0, 0x1F, 0x00, 0xC0, 0x03, 0xF0, 0x1F, 0x00, 0xC0, 0x03, 0xF8, 0x1F, 0x00, 0xC0, 0x03, 0xFC, 0x1F, 0x00, 0xC0, 0x03, 0xFE, 0x1E, 0x00, 0xC0, 0x03, 0x7F, 0x1E, 0x00, 0xC0, 0x83, 0x3F, 0x1E, 0x00, 0xC0, 0xC3, 0x1F, 0x1E, 0x00, 0xC0, 0xC3, 0x0F, 0x1E, 0x00, 0xC0, 0xE3, 0x07, 0x1E, 0x00, 0xC0, 0xF3, 0x03, 0x1E, 0x00, 0xC0, 0xFB, 0x01, 0x1E, 0x00, 0xC0, 0xFF, 0x00, 0x1E, 0x00, 0xC0, 0xFF, 0x00, 0x1E, 0x00, 0xC0, 0x7F, 0x00, 0x1E, 0x00, 0xC0, 0x3F, 0x00, 0x1E, 0x00, 0xC0, 0x1F, 0x00, 0x1E, 0x00, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x80, 0x03, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 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,  // Code for char Z
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 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, 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,  // Code for char [
+        0x11, 0x20, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
+        0x08, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 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, 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,  // Code for char ]
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char ^
+        0x16, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 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,  // Code for char _
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00,  // Code for char `
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0x78, 0x1C, 0x1C, 0x00, 0x00, 0xF8, 0x1C, 0x1E, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char a
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x03, 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,  // Code for char b
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 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,  // Code for char c
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 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,  // Code for char d
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x1E, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x3F, 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,  // Code for char e
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 0x00, 0x00, 0x00, 0xE0, 0x79, 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, 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,  // Code for char f
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x80, 0x07, 0x00, 0x00, 0x78, 0x80, 0x07, 0x00, 0x00, 0x78, 0x80, 0x07, 0x00, 0x00, 0x78, 0x80, 0x07, 0x00, 0x00, 0x78, 0x80, 0x07, 0x00, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0x78, 0x80, 0xC7, 0x03, 0x00, 0xF8, 0x80, 0xC7, 0x03, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 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,  // Code for char g
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 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,  // Code for char h
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFB, 0xFF, 0x1F, 0x00, 0xE0, 0xFB, 0xFF, 0x1F, 0x00, 0xE0, 0xFB, 0xFF, 0x1F, 0x00, 0xE0, 0xFB, 0xFF, 0x1F, 0x00, 0xE0, 0xFB, 0xFF, 0x1F, 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, 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,  // Code for char i
+        0x07, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x03, 0xC0, 0x01, 0x00, 0xF0, 0x03, 0xE0, 0xFB, 0xFF, 0xFF, 0x01, 0xE0, 0xFB, 0xFF, 0xFF, 0x01, 0xE0, 0xFB, 0xFF, 0xFF, 0x00, 0xE0, 0xFB, 0xFF, 0x7F, 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, 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,  // Code for char j
+        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xE7, 0x03, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0x00, 0x00, 0xF0, 0xC1, 0x0F, 0x00, 0x00, 0xF0, 0x81, 0x0F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 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, 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,  // Code for char k
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 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, 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,  // Code for char l
+        0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 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,  // Code for char m
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0x1F, 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,  // Code for char n
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char o
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x03, 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,  // Code for char p
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x03, 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,  // Code for char q
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 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, 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,  // Code for char r
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x1E, 0x00, 0x00, 0xF8, 0x1F, 0x1E, 0x00, 0x00, 0xF8, 0x1F, 0x1E, 0x00, 0x00, 0xF8, 0x1F, 0x1E, 0x00, 0x00, 0xF8, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x78, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xF0, 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,  // Code for char s
+        0x0E, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 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, 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,  // Code for char t
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char u
+        0x1F, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char v
+        0x24, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char w
+        0x19, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF0, 0xC3, 0x0F, 0x00, 0x00, 0xE0, 0xE7, 0x07, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xE7, 0x07, 0x00, 0x00, 0xF0, 0xC3, 0x0F, 0x00, 0x00, 0xF8, 0x81, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 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, 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,  // Code for char x
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xC7, 0x03, 0x00, 0x00, 0x80, 0xE7, 0x03, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0xFF, 0xFF, 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,  // Code for char y
+        0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x80, 0x1F, 0x00, 0x00, 0x78, 0xC0, 0x1F, 0x00, 0x00, 0x78, 0xE0, 0x1F, 0x00, 0x00, 0x78, 0xF0, 0x1F, 0x00, 0x00, 0x78, 0xF8, 0x1E, 0x00, 0x00, 0x78, 0x78, 0x1E, 0x00, 0x00, 0x78, 0x3C, 0x1E, 0x00, 0x00, 0x78, 0x1E, 0x1E, 0x00, 0x00, 0x78, 0x0F, 0x1E, 0x00, 0x00, 0xF8, 0x0F, 0x1E, 0x00, 0x00, 0xF8, 0x07, 0x1E, 0x00, 0x00, 0xF8, 0x03, 0x1E, 0x00, 0x00, 0xF8, 0x01, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x1E, 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,  // Code for char z
+        0x0B, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFB, 0xFF, 0x0F, 0xFF, 0xFF, 0xFB, 0xFF, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 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, 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,  // Code for char {
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 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, 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,  // Code for char |
+        0x0B, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x0E, 0xFF, 0xFF, 0xFB, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x04, 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, 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,  // Code for char }
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 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, 0x00, 0x00, 0x00, 0x00,  // Code for char ~
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x00, 0x0C, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0x0F, 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, 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   // Code for char 
+        };
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/TextDisplay.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,92 @@
+/* mbed TextDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+#include "TextDisplay.h"
+#include <cstdarg>
+
+TextDisplay::TextDisplay(const char *name){
+    _row = 0;
+    _column = 0;
+
+    if (name == NULL) {
+        _path = NULL;
+    } else {
+        _path = new char[strlen(name) + 2];
+        sprintf(_path, "/%s", name);
+    }
+}
+    
+int TextDisplay::_putc(int value) {
+    if(value == '\n') {
+        _column = 0;
+        _row++;
+        if(_row >= rows()) {
+            _row = 0;
+        }
+    } else {
+        character(_column, _row, value);
+        _column++;
+        if(_column >= columns()) {
+            _column = 0;
+            _row++;
+            if(_row >= rows()) {
+                _row = 0;
+            }
+        }
+    }
+    return value;
+}
+
+// crude cls implementation, should generally be overwritten in derived class
+void TextDisplay::cls() {
+    locate(0, 0);
+    for(int i=0; i<columns()*rows(); i++) {
+        _putc(' ');
+    }
+}
+
+void TextDisplay::set_font(const unsigned char * f) {
+    font = f;
+    if(font==NULL) {
+    	externalfont = 0;  // set display.font
+    	locate(0, 0);
+    }    
+    else{
+    	externalfont = 1;
+    	locate(0, 0);
+    }
+}
+
+void TextDisplay::locate(int column, int row) {
+    _column = column;
+    _row = row;
+    char_x = column;
+    char_y = row;
+}
+
+int TextDisplay::_getc() {
+    return -1;
+}
+        
+void TextDisplay::foreground(uint16_t colour) {
+    _foreground = colour;
+}
+
+void TextDisplay::background(uint16_t colour) {
+    _background = colour;
+}
+
+void TextDisplay::printf(const char* format, ...) {
+	char buffer[MAX_PRINTF_CHARS + 1] = { 0 };
+	uint32_t iterator = 0;
+	va_list args;
+	va_start(args, format);
+	vsprintf(buffer, format, args);
+	va_end(args);
+
+	while((buffer[iterator] != 0) && (iterator < MAX_PRINTF_CHARS)) {
+		_putc(buffer[iterator++]);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/TextDisplay.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,92 @@
+/* mbed TextDisplay Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * A common base class for Text displays
+ * To port a new display, derive from this class and implement
+ * the constructor (setup the display), character (put a character
+ * at a location), rows and columns (number of rows/cols) functions.
+ * Everything else (locate, printf, putc, cls) will come for free
+ *
+ * The model is the display will wrap at the right and bottom, so you can
+ * keep writing and will always get valid characters. The location is 
+ * maintained internally to the class to make this easy
+ */
+
+#ifndef MBED_TEXTDISPLAY_H
+#define MBED_TEXTDISPLAY_H
+
+#include "mbed.h"
+#include "LCDSettings.h"
+
+class TextDisplay {
+public:
+
+  // functions needing implementation in derived implementation class
+  /** Create a TextDisplay interface
+     *
+     * @param name The name used in the path to access the strean through the filesystem
+     */
+    TextDisplay(const char *name = NULL);
+
+    /** output a character at the given position
+     *
+     * @param column column where charater must be written
+     * @param  row where character must be written
+     * @param c the character to be written to the TextDisplay
+     */
+    virtual void character(int column, int row, int c) = 0;
+
+    /** return number if rows on TextDisplay
+     * @result number of rows
+     */
+    virtual int rows() = 0;
+
+    /** return number if columns on TextDisplay
+    * @result number of rows
+    */
+    virtual int columns() = 0;
+    
+    // Sets external font usage, eg. dispaly.set_font(Arial12x12);
+    // This uses pixel positioning.
+    // display.set_font(NULL); returns to internal default font.
+    void set_font(const unsigned char * f);
+    
+    // set position of the next character or string print.
+    // External font, set pixel x(column),y(row) position.
+    // internal(default) font, set character column and row position 
+    virtual void locate(int column, int row);
+    
+    // functions that come for free, but can be overwritten
+
+    /** clear screen
+    */
+    virtual void cls();
+    virtual void foreground(uint16_t colour);
+    virtual void background(uint16_t colour);
+    // putc (from Stream)
+    // printf (from Stream)
+    virtual void printf(const char* format, ...);
+    
+protected:
+
+    virtual int _putc(int value);
+    virtual int _getc();
+    
+    // external font functions
+    const unsigned char* font;
+    int externalfont;
+ 
+    // character location
+    uint16_t _column;
+    uint16_t _row;
+    unsigned int char_x;
+    unsigned int char_y;
+
+    // colours
+    uint16_t _foreground;
+    uint16_t _background;
+    char *_path;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/UbuntuCondensed38x47.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,152 @@
+/*
+ * UbuntuCondensed38x47.h
+ *
+ *  Created on: Aug 15, 2018
+ *      Author: Gokhan.Bektas
+ */
+
+#ifndef DRIVERS_LS013B7DH03_UBUNTUCONDENSED38X47_H_
+#define DRIVERS_LS013B7DH03_UBUNTUCONDENSED38X47_H_
+
+
+
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektrnika 2011
+//http://www.mikroe.com
+
+//GLCD FontName : Ubuntu_Condensed38x47
+//GLCD FontSize : 38 x 47
+
+const unsigned char UbuntuCondensed38x47[] = {
+
+		229, 38,47,6,
+        0x14, 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, 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,  // Code for char
+        0x0B, 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, 0x3C, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x7E, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x7E, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x7E, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x7E, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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, 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,  // Code for char !
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char "
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x38, 0x00, 0x00, 0xC0, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0xE1, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x1C, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x1C, 0x00, 0x00, 0xE0, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x38, 0x00, 0x00, 0xC0, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0xE1, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x1C, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x1C, 0x00, 0x00, 0xE0, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 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,  // Code for char #
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x06, 0x00, 0x00, 0xFE, 0x07, 0x80, 0x0F, 0x00, 0x00, 0xFF, 0x0F, 0x80, 0x0F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x1F, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x1F, 0x00, 0xC0, 0x0F, 0x7F, 0x00, 0x1E, 0x00, 0xFE, 0x07, 0x7E, 0x00, 0xFE, 0x07, 0xFE, 0x03, 0xFC, 0x00, 0xFE, 0x07, 0xFE, 0x03, 0xF8, 0x01, 0xFE, 0x07, 0xFE, 0x03, 0xF8, 0x01, 0xFF, 0x07, 0xFE, 0x03, 0xF0, 0x87, 0xFF, 0x07, 0xC0, 0x07, 0xE0, 0xFF, 0x1F, 0x00, 0xC0, 0x07, 0xE0, 0xFF, 0x0F, 0x00, 0x80, 0x07, 0xC0, 0xFF, 0x07, 0x00, 0x80, 0x01, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 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,  // Code for char $
+        0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x20, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x3F, 0x00, 0xF0, 0xFF, 0x3F, 0xC0, 0x3F, 0x00, 0xF0, 0xFF, 0x3F, 0xF8, 0x3F, 0x00, 0xE0, 0xFF, 0x1F, 0xFE, 0x1F, 0x00, 0xC0, 0xFF, 0x8F, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xF3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x07, 0x00, 0xC0, 0xFF, 0x83, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xC0, 0xFF, 0x3F, 0x00, 0xE0, 0x1F, 0xE0, 0xFF, 0x7F, 0x00, 0xE0, 0x07, 0xE0, 0xFF, 0x7F, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0x78, 0x00, 0x20, 0x00, 0xE0, 0x01, 0x78, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 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,  // Code for char %
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x3F, 0xC0, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xF3, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0x83, 0x1F, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x3E, 0x00, 0xF0, 0xC1, 0x7F, 0x00, 0x3E, 0x00, 0xF0, 0x00, 0x7F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xFF, 0x01, 0x3C, 0x00, 0xF0, 0x80, 0xFF, 0x03, 0x3C, 0x00, 0xF0, 0xC1, 0xF7, 0x0F, 0x3E, 0x00, 0xF0, 0xFF, 0xE7, 0x1F, 0x3E, 0x00, 0xE0, 0xFF, 0xC3, 0x3F, 0x1F, 0x00, 0xE0, 0xFF, 0x01, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x3F, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x3E, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char &
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 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, 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,  // Code for char '
+        0x0F, 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, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0x01, 0xC0, 0xFF, 0x1F, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x3F, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 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, 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,  // Code for char (
+        0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0x7F, 0xFE, 0x0F, 0x00, 0x00, 0xF8, 0x3F, 0xFC, 0xFF, 0x01, 0xC0, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x3F, 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, 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,  // Code for char )
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x80, 0x8F, 0x03, 0x00, 0x00, 0x00, 0x80, 0xCF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF0, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xCF, 0x03, 0x00, 0x00, 0x00, 0x80, 0x8F, 0x03, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 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,  // Code for char *
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 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,  // Code for char +
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x7E, 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, 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,  // Code for char ,
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 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, 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,  // Code for char -
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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, 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,  // Code for char .
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x7F, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x0F, 0x00, 0x80, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 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,  // Code for char 0
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0xF8, 0x3F, 0x00, 0xF0, 0x01, 0x00, 0xFE, 0x3F, 0x00, 0xF0, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0xF0, 0x00, 0x80, 0x7F, 0x3C, 0x00, 0xF0, 0x00, 0xE0, 0x1F, 0x3C, 0x00, 0xF0, 0x00, 0xF0, 0x07, 0x3C, 0x00, 0xF0, 0x01, 0xFC, 0x03, 0x3C, 0x00, 0xF0, 0x03, 0xFF, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x3C, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x3C, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x3C, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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,  // Code for char 2
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x78, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0xF0, 0x03, 0xFF, 0x01, 0x7C, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x3F, 0x00, 0xE0, 0xFF, 0xEF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xEF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xC3, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 3
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x3C, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x3C, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x3C, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x3C, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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,  // Code for char 4
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x7C, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x7C, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x78, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x78, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x7C, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x7C, 0x00, 0x78, 0x00, 0xE0, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0xE0, 0x01, 0xF8, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0xF8, 0x03, 0x3F, 0x00, 0xE0, 0x01, 0xF0, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xF0, 0xFF, 0x1F, 0x00, 0xE0, 0x01, 0xE0, 0xFF, 0x0F, 0x00, 0xE0, 0x01, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 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,  // Code for char 5
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x7F, 0x80, 0x7F, 0x00, 0x80, 0x3F, 0x3C, 0x00, 0x7C, 0x00, 0x80, 0x1F, 0x3C, 0x00, 0x78, 0x00, 0xC0, 0x0F, 0x3C, 0x00, 0x78, 0x00, 0xC0, 0x07, 0x3C, 0x00, 0x78, 0x00, 0xE0, 0x03, 0x7C, 0x00, 0x7C, 0x00, 0xE0, 0x03, 0xFC, 0x01, 0x7F, 0x00, 0xE0, 0x01, 0xF8, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xF8, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 6
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0x00, 0xF0, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xF0, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xFE, 0xFF, 0x3F, 0x00, 0xE0, 0x81, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xF1, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFD, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 7
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x80, 0xFF, 0x03, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x87, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xCF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x7F, 0x00, 0xF0, 0x03, 0xFF, 0x01, 0x7C, 0x00, 0xF0, 0x01, 0xFE, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xFE, 0x03, 0x7C, 0x00, 0xF0, 0x03, 0xFF, 0x07, 0x3F, 0x00, 0xE0, 0xFF, 0xDF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xCF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x07, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x01, 0xFE, 0x07, 0x00, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 8
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x3C, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x3E, 0x00, 0xF0, 0x03, 0xFC, 0x01, 0x3E, 0x00, 0xF0, 0x01, 0xF0, 0x01, 0x1F, 0x00, 0xF0, 0x00, 0xE0, 0x81, 0x1F, 0x00, 0xF0, 0x00, 0xE0, 0xC1, 0x0F, 0x00, 0xF0, 0x01, 0xE0, 0xF1, 0x0F, 0x00, 0xF0, 0x07, 0xF0, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char 9
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x3C, 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, 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,  // Code for char :
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0xE0, 0x01, 0x00, 0xFE, 0x3F, 0x00, 0xF0, 0x03, 0x00, 0xFE, 0x3F, 0x00, 0xF0, 0x03, 0x00, 0xFE, 0x1F, 0x00, 0xF0, 0x03, 0x00, 0xFE, 0x07, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x00, 0x80, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x07, 0xF0, 0x01, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x01, 0xC0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x80, 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,  // Code for char <
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x78, 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,  // Code for char =
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0xC0, 0x01, 0xC0, 0x01, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0xF0, 0x01, 0x00, 0x00, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x80, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char >
+        0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0x80, 0x0F, 0x7E, 0x00, 0xF0, 0x00, 0xE0, 0x0F, 0x7E, 0x00, 0xF0, 0x00, 0xF0, 0x0F, 0x7E, 0x00, 0xF0, 0x00, 0xF8, 0x0F, 0x7E, 0x00, 0xF0, 0x00, 0xFC, 0x0F, 0x7E, 0x00, 0xF0, 0x01, 0xFF, 0x00, 0x3C, 0x00, 0xF0, 0x83, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7E, 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, 0x00, 0x00,  // Code for char ?
+        0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0x07, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x03, 0x80, 0x3F, 0x00, 0x00, 0xF8, 0x03, 0xC0, 0x1F, 0x00, 0x00, 0xE0, 0x07, 0xC0, 0x07, 0xF0, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xFC, 0x7F, 0x80, 0x0F, 0xE0, 0x03, 0xFE, 0xFF, 0x81, 0x0F, 0xE0, 0x01, 0xFF, 0xFF, 0x03, 0x1F, 0xF0, 0x81, 0xFF, 0xFF, 0x03, 0x1F, 0xF0, 0x81, 0x1F, 0xF0, 0x07, 0x1E, 0xF0, 0xC0, 0x07, 0xC0, 0x07, 0x1E, 0xF0, 0xC0, 0x07, 0x80, 0x07, 0x1E, 0xF0, 0xC0, 0x03, 0x80, 0x07, 0x1E, 0xF0, 0xC0, 0x03, 0x80, 0x07, 0x1E, 0xF0, 0xC0, 0x03, 0x80, 0x07, 0x1E, 0xF0, 0xC0, 0xFF, 0xFF, 0x07, 0x1E, 0xF0, 0xC0, 0xFF, 0xFF, 0x03, 0x1F, 0xF0, 0xC1, 0xFF, 0xFF, 0x03, 0x0F, 0xE0, 0x81, 0xFF, 0xFF, 0x07, 0x0F, 0xE0, 0x83, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0x03, 0x00, 0x80, 0x07, 0x00, 0xC0, 0x07, 0x00, 0x80, 0x07, 0x00, 0xC0, 0x1F, 0x00, 0x80, 0x07, 0x00, 0x80, 0x3F, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xFF, 0x01, 0xF0, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00,  // Code for char @
+        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x1C, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x1C, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x1C, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x1C, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char A
+        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x03, 0x7C, 0x00, 0x3E, 0x00, 0xE0, 0x03, 0x7C, 0x00, 0x3E, 0x00, 0xC0, 0x0F, 0xFF, 0x00, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0x81, 0x1F, 0x00, 0x80, 0xFF, 0xEF, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0xE7, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xC3, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFE, 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,  // Code for char B
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0x7F, 0x00, 0xF8, 0x1F, 0x00, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3F, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7E, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char C
+        0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x1E, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0x80, 0x1F, 0x00, 0x80, 0x1F, 0x00, 0xC0, 0x0F, 0x00, 0x80, 0xFF, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 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,  // Code for char D
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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,  // Code for char E
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x38, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char F
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0x7F, 0x00, 0xF8, 0x1F, 0x00, 0xE0, 0x0F, 0x00, 0xC0, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3F, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7E, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xC0, 0xFF, 0x7F, 0x00, 0xF0, 0x01, 0xC0, 0xFF, 0x7F, 0x00, 0xE0, 0x03, 0xC0, 0xFF, 0x3F, 0x00, 0xE0, 0x03, 0xC0, 0xFF, 0x3F, 0x00, 0x40, 0x00, 0xC0, 0xFF, 0x3F, 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,  // Code for char G
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 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,  // Code for char H
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 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, 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,  // Code for char I
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x03, 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, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char J
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xCF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0x87, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x01, 0x00, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0x00, 0xE0, 0x1F, 0x00, 0xF0, 0x0F, 0x00, 0xE0, 0x0F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0xC0, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char K
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 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,  // Code for char L
+        0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 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,  // Code for char M
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 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,  // Code for char N
+        0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x00, 0xF8, 0x1F, 0x00, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x3E, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x78, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x00, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x00, 0xC0, 0x7F, 0x00, 0xF0, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 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,  // Code for char O
+        0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x00, 0x00, 0xC0, 0x07, 0xF0, 0x01, 0x00, 0x00, 0xC0, 0x0F, 0xF8, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 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,  // Code for char P
+        0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x00, 0xF8, 0x1F, 0x00, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x3E, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0xFC, 0x1F, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x3F, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x3E, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x3C, 0xC0, 0x7F, 0x00, 0xF0, 0x1F, 0x7C, 0x80, 0xFF, 0xFF, 0xFF, 0x0F, 0x7C, 0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x78, 0x00, 0xFE, 0xFF, 0xFF, 0x03, 0x18, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 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,  // Code for char Q
+        0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x1F, 0x00, 0x00, 0xC0, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0xC0, 0x0F, 0xFC, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0xFE, 0x07, 0x00, 0x80, 0xFF, 0xFF, 0xFC, 0x3F, 0x00, 0x00, 0xFF, 0x7F, 0xF0, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0xC0, 0x3F, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char R
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x3E, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x7C, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x7C, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x78, 0x00, 0xE0, 0x83, 0x3F, 0x00, 0x78, 0x00, 0xF0, 0x01, 0x7E, 0x00, 0x78, 0x00, 0xF0, 0x01, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x7C, 0x00, 0xF0, 0x00, 0xF0, 0x03, 0x7C, 0x00, 0xF0, 0x00, 0xF0, 0x07, 0x3F, 0x00, 0xF0, 0x01, 0xE0, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xC0, 0xFF, 0x1F, 0x00, 0xE0, 0x01, 0x80, 0xFF, 0x0F, 0x00, 0x60, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char S
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char T
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char U
+        0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char V
+        0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+        0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3F, 0x00, 0xE0, 0x0F, 0x00, 0xC0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xF0, 0x3F, 0x00, 0xE0, 0xFF, 0x00, 0xFC, 0x3F, 0x00, 0x80, 0xFF, 0x83, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0xEF, 0xFF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x8F, 0xFF, 0x01, 0x00, 0x80, 0xFF, 0x03, 0xFE, 0x0F, 0x00, 0xE0, 0xFF, 0x00, 0xF8, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x0F, 0x00, 0x80, 0x3F, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3E, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char X
+        0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char Y
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0xF8, 0x3F, 0x00, 0xE0, 0x01, 0x00, 0xFE, 0x3F, 0x00, 0xE0, 0x01, 0x80, 0xFF, 0x3F, 0x00, 0xE0, 0x01, 0xE0, 0xFF, 0x3D, 0x00, 0xE0, 0x01, 0xF0, 0x3F, 0x3C, 0x00, 0xE0, 0x01, 0xFC, 0x0F, 0x3C, 0x00, 0xE0, 0x01, 0xFF, 0x03, 0x3C, 0x00, 0xE0, 0xC1, 0xFF, 0x00, 0x3C, 0x00, 0xE0, 0xF1, 0x3F, 0x00, 0x3C, 0x00, 0xE0, 0xF9, 0x0F, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x3C, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x3C, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x3C, 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,  // Code for char Z
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char [
+        0x0F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
+        0x0A, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 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, 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,  // Code for char ]
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char ^
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 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,  // Code for char _
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char `
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x60, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xE0, 0x01, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x01, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x80, 0x0F, 0x7C, 0x00, 0x00, 0xF0, 0x80, 0x07, 0x78, 0x00, 0x00, 0xF0, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF0, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF0, 0x80, 0x03, 0x70, 0x00, 0x00, 0xF0, 0x81, 0x03, 0x70, 0x00, 0x00, 0xF0, 0x83, 0x03, 0x70, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 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,  // Code for char a
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x7F, 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,  // Code for char b
+        0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x3C, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 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,  // Code for char c
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x78, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 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,  // Code for char d
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x8F, 0x87, 0x3F, 0x00, 0x00, 0xF0, 0x81, 0x07, 0x3E, 0x00, 0x00, 0xF0, 0x80, 0x07, 0x7C, 0x00, 0x00, 0x70, 0x80, 0x07, 0x7C, 0x00, 0x00, 0x70, 0x80, 0x07, 0x78, 0x00, 0x00, 0x70, 0x80, 0x07, 0x78, 0x00, 0x00, 0xF0, 0x80, 0x07, 0x78, 0x00, 0x00, 0xF0, 0x83, 0x07, 0x78, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x78, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x7C, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x3C, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x38, 0x00, 0x00, 0x00, 0xF8, 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,  // Code for char e
+        0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x3E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x1E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x04, 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, 0x00, 0x00, 0x00,  // Code for char f
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x30, 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x38, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x78, 0x00, 0xE0, 0x0F, 0xC0, 0x3F, 0x70, 0x00, 0xF0, 0x03, 0x00, 0x3F, 0x70, 0x00, 0xF0, 0x01, 0x00, 0x3E, 0x70, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x70, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x70, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x78, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0x7C, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,  // Code for char g
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 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,  // Code for char h
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE1, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xE1, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xE1, 0xFF, 0xFF, 0x3F, 0x00, 0xF0, 0xE1, 0xFF, 0xFF, 0x3F, 0x00, 0xE0, 0xE0, 0xFF, 0xFF, 0x3F, 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, 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,  // Code for char i
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xF0, 0xE1, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xE1, 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0xE1, 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0xE1, 0xFF, 0xFF, 0xFF, 0x1F, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 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, 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,  // Code for char j
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFE, 0x03, 0x00, 0x00, 0xE0, 0x3F, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0x1F, 0xF0, 0x3F, 0x00, 0x00, 0xE0, 0x07, 0xC0, 0x3F, 0x00, 0x00, 0xE0, 0x01, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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,  // Code for char k
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 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, 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,  // Code for char l
+        0x20, 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, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFD, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 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,  // Code for char m
+        0x15, 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, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x3F, 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,  // Code for char n
+        0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x7F, 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,  // Code for char o
+        0x15, 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, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0x7F, 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,  // Code for char p
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x7F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x7E, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x7F, 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,  // Code for char q
+        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, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x30, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x38, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x78, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x78, 0x00, 0x00, 0xF0, 0xFF, 0x03, 0x70, 0x00, 0x00, 0xF0, 0xE1, 0x07, 0x70, 0x00, 0x00, 0xF0, 0xC0, 0x07, 0x70, 0x00, 0x00, 0x70, 0x80, 0x0F, 0x78, 0x00, 0x00, 0x70, 0x00, 0x3F, 0x7C, 0x00, 0x00, 0x70, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x60, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, 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, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char s
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x7C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x78, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x78, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x78, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 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,  // Code for char u
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char v
+        0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char w
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xF8, 0x3F, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0xFF, 0xF8, 0x3F, 0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x3F, 0x00, 0x00, 0xE0, 0x0F, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x3E, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 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,  // Code for char x
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x70, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x70, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x70, 0x00, 0xE0, 0xFF, 0xFF, 0x00, 0x78, 0x00, 0x80, 0xFF, 0xFF, 0x07, 0x7E, 0x00, 0x00, 0xE0, 0xFF, 0xBF, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char y
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xE0, 0x01, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x01, 0xE0, 0x3F, 0x00, 0x00, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0xE0, 0x01, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xC1, 0xFF, 0x3F, 0x00, 0x00, 0xE0, 0xF1, 0xFF, 0x3C, 0x00, 0x00, 0xE0, 0xF9, 0x3F, 0x3C, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x3C, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x3C, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x3C, 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, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char z
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0x7F, 0xFE, 0xFF, 0x3F, 0xFE, 0xFF, 0x3F, 0xFC, 0xFF, 0x3F, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char {
+        0x0A, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 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, 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,  // Code for char |
+        0x0C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0x7F, 0xFE, 0xFF, 0x3F, 0xFC, 0xFF, 0x3F, 0xFE, 0xFF, 0x7F, 0xFE, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 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, 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,  // Code for char }
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char ~
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   // Code for char 
+        };
+
+
+/*
+0x14, 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, 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,  // Code for char
+*/
+
+#endif /* DRIVERS_LS013B7DH03_UBUNTUCONDENSED38X47_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/mbed_logo.c	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,396 @@
+#include "mbed_logo.h"
+
+#if 0
+const unsigned char mbed_enabled_logo[] = {
+	    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,
+	    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,
+	    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, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x08, 0x1f, 0x00, 0xf8, 0x01, 0xe3, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00,
+	    0x00, 0x0c, 0x7f, 0x81, 0xfc, 0x01, 0xef, 0xe0, 0x00, 0x07, 0xf0, 0x00, 0x07, 0xfb, 0x80, 0x00,
+	    0x00, 0x0e, 0xff, 0xe7, 0xfe, 0x01, 0xff, 0xf8, 0x00, 0x1f, 0xfc, 0x00, 0x1f, 0xff, 0x80, 0x00,
+	    0x00, 0x0f, 0xc0, 0xfe, 0x1f, 0x01, 0xf0, 0x3c, 0x00, 0x3c, 0x0c, 0x00, 0x1f, 0xff, 0x80, 0x00,
+	    0x00, 0x0f, 0x80, 0xf8, 0x0f, 0x01, 0xe0, 0x0c, 0x00, 0x30, 0x0f, 0x00, 0x78, 0x07, 0x80, 0x00,
+	    0x00, 0x0f, 0x00, 0x70, 0x0f, 0x81, 0xe0, 0x07, 0x00, 0x70, 0x07, 0x80, 0x70, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x07, 0x81, 0xe0, 0x03, 0x80, 0xe0, 0x03, 0x80, 0xf0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x07, 0x81, 0xe0, 0x03, 0xc0, 0xc0, 0x01, 0xc1, 0xf0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xc1, 0xc0, 0x01, 0xc1, 0xe0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xe1, 0xc0, 0x01, 0xc1, 0xc0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xe1, 0xff, 0xff, 0xc3, 0xc0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xe1, 0xff, 0xff, 0x83, 0xc0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xc1, 0x80, 0x00, 0x03, 0xc0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0xc1, 0xc0, 0x00, 0x01, 0xc0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x01, 0x80, 0xc0, 0x00, 0x01, 0xe0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x03, 0x80, 0xc0, 0x00, 0x01, 0xe0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x03, 0x00, 0x60, 0x00, 0x00, 0xf0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0x07, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xe0, 0xfe, 0x00, 0x38, 0x00, 0x00, 0xf8, 0x03, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xff, 0xfe, 0x00, 0x1f, 0xfe, 0x00, 0x7f, 0xff, 0x80, 0x00,
+	    0x00, 0x0e, 0x00, 0x70, 0x03, 0x81, 0xff, 0xf8, 0x00, 0x07, 0xfe, 0x00, 0x3f, 0xff, 0x80, 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, 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, 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,
+	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
+	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff,
+	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
+	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff,
+	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x07, 0xe0, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x1f, 0x80, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x3f, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x7e, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x01, 0xf8, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x03, 0xf0, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x87, 0xe0, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xcf, 0xc0, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
+	    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 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, 0xc0, 0x00,
+	    0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x04, 0x3c, 0x01, 0xf0, 0x0c, 0x78, 0x03, 0x00, 0x38, 0x00, 0x7e, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0xfe, 0x03, 0xfc, 0x0d, 0x8c, 0x03, 0x00, 0xfe, 0x00, 0xff, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x07, 0x81, 0x00, 0x06, 0x0d, 0x06, 0x03, 0x01, 0x01, 0x01, 0x80, 0xc0, 0x00,
+	    0x00, 0x07, 0xf8, 0x06, 0x01, 0x00, 0x02, 0x0e, 0x03, 0x03, 0x02, 0x00, 0x83, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x00, 0x02, 0x0c, 0x01, 0x83, 0x06, 0x00, 0x83, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x00, 0x3e, 0x0c, 0x01, 0x83, 0x06, 0x00, 0x82, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x00, 0xfe, 0x0c, 0x01, 0x83, 0x07, 0xff, 0x86, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x03, 0x82, 0x0c, 0x01, 0x83, 0x06, 0x00, 0x06, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x04, 0x02, 0x0c, 0x01, 0x83, 0x06, 0x00, 0x06, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x04, 0x02, 0x0c, 0x01, 0x83, 0x06, 0x00, 0x06, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x04, 0x02, 0x0c, 0x03, 0x03, 0x02, 0x00, 0x02, 0x00, 0xc0, 0x00,
+	    0x00, 0x06, 0x00, 0x06, 0x01, 0x06, 0x06, 0x0c, 0x07, 0x03, 0x03, 0x00, 0x03, 0x80, 0xc0, 0x00,
+	    0x00, 0x06, 0x06, 0x06, 0x01, 0x02, 0x0f, 0x0c, 0x04, 0x03, 0x01, 0xff, 0x01, 0xff, 0xc0, 0x00,
+	    0x00, 0x0f, 0xfe, 0x06, 0x01, 0x03, 0xf9, 0x8f, 0xf8, 0x03, 0x80, 0xfe, 0x00, 0xff, 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, 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, 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
+
+const unsigned char maxim_integrated_logo[] =
+{
+		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
+		,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,0x03,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00
+		,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00
+		,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00
+		,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00
+		,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00
+		,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00
+		,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00
+		,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00
+		,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00
+		,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00
+		,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00
+		,0x00,0x00,0x3f,0xff,0xe0,0x00,0x03,0xff,0xff,0xc0,0x00,0x03,0xff,0xfc,0x00,0x00
+		,0x00,0x00,0x7f,0xff,0x80,0x00,0x01,0xff,0xff,0x80,0x00,0x01,0xff,0xfe,0x00,0x00
+		,0x00,0x00,0x7f,0xff,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xff,0xfe,0x00,0x00
+		,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x7f,0xfe,0x00,0x00,0x00,0xff,0xff,0x00,0x00
+		,0x00,0x00,0xff,0xfe,0x00,0x00,0x00,0x7f,0xfe,0x00,0x00,0x00,0x7f,0xff,0x00,0x00
+		,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x3f,0xfc,0x00,0x00,0x00,0x7f,0xff,0x80,0x00
+		,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x3f,0xfc,0x00,0x00,0x00,0x7f,0xff,0x80,0x00
+		,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x1f,0x80,0x07,0xe0,0x01,0xf8,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0x80,0x07,0xe0,0x01,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xc0,0x07,0xc0,0x03,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xe0,0x07,0xc0,0x03,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xe0,0x0f,0x80,0x07,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xf0,0x1f,0x80,0x0f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xf0,0x1f,0x00,0x0f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xf8,0x3f,0x00,0x1f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xf8,0x3e,0x00,0x1f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfc,0x7e,0x00,0x3f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfc,0x7c,0x00,0x3f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfe,0xf8,0x00,0x7f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xf8,0x00,0x7f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xf0,0x00,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xf0,0x01,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xe0,0x01,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xe0,0x03,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xc0,0x03,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0xc0,0x01,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0x80,0x01,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0x00,0x00,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xff,0x00,0x00,0xff,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfe,0x00,0x00,0x7f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfe,0x00,0x00,0x7f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x0f,0xff,0xfe,0x00,0x1f,0xfc,0x00,0x00,0x3f,0xf8,0x00,0x7f,0xff,0xf0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xfc,0x00,0x00,0x3f,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xf8,0x00,0x00,0x1f,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xf8,0x00,0x00,0x0f,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x07,0xff,0xfe,0x00,0x1f,0xf0,0x00,0x00,0x0f,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x1f,0xe0,0x01,0x80,0x07,0xf8,0x00,0x7f,0xff,0xe0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x1f,0xe0,0x01,0x80,0x07,0xf8,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x1f,0xc0,0x03,0xc0,0x03,0xf8,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x03,0xff,0xfe,0x00,0x1f,0xc0,0x03,0xe0,0x03,0xf8,0x00,0x7f,0xff,0xc0,0x00
+		,0x00,0x01,0xff,0xfe,0x00,0x1f,0x80,0x07,0xe0,0x01,0xf8,0x00,0x7f,0xff,0x80,0x00
+		,0x00,0x01,0xff,0xfe,0x00,0x1f,0x80,0x0f,0xf0,0x01,0xf8,0x00,0x7f,0xff,0x80,0x00
+		,0x00,0x00,0xff,0xfe,0x00,0x1f,0x00,0x0f,0xf0,0x00,0xf8,0x00,0x7f,0xff,0x00,0x00
+		,0x00,0x00,0xff,0xfe,0x00,0x1f,0x00,0x1f,0xf8,0x00,0x78,0x00,0x7f,0xff,0x00,0x00
+		,0x00,0x00,0x7f,0xfe,0x00,0x1e,0x00,0x1f,0xf8,0x00,0x78,0x00,0x7f,0xff,0x00,0x00
+		,0x00,0x00,0x7f,0xfe,0x00,0x1c,0x00,0x3f,0xfc,0x00,0x38,0x00,0x7f,0xfe,0x00,0x00
+		,0x00,0x00,0x3f,0xfe,0x00,0x1c,0x00,0x3f,0xfc,0x00,0x38,0x00,0x7f,0xfe,0x00,0x00
+		,0x00,0x00,0x3f,0xfe,0x00,0x3c,0x00,0x7f,0xfe,0x00,0x3c,0x00,0x7f,0xfc,0x00,0x00
+		,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00
+		,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00
+		,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00
+		,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00
+		,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00
+		,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00
+		,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00
+		,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00
+		,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00
+		,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,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,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
+};
+
+
+const unsigned char maxim128Bitmaps[] =
+{
+		0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //              #########
+		0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //            ##############
+		0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //          ##################                                               ##
+		0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //        #####################                                              ##
+		0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //       ########################
+		0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //      ##########################
+		0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x2F, 0xB8, 0x7C, 0xE3, 0x32, 0x7B, 0xC0, 0x00, 0x00, 0x00, //     ###########################           # ##### ###    #####  ###   ##  ##  #  #### ####
+		0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFC, 0x7E, 0x77, 0x33, 0xFF, 0xE0, 0x00, 0x00, 0x00, //    #############################          ############   ######  ### ###  ##  #############
+		0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x31, 0x8C, 0x02, 0x3E, 0x33, 0x1C, 0x60, 0x00, 0x00, 0x00, //    ##############################         ##   ##   ##        #   #####   ##  ##   ###   ##
+		0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x31, 0x8C, 0x1E, 0x1C, 0x33, 0x18, 0x60, 0x00, 0x00, 0x00, //   ###############################         ##   ##   ##     ####    ###    ##  ##   ##    ##
+		0x3E, 0x01, 0xF8, 0x0F, 0xC0, 0x31, 0x8C, 0xFA, 0x1C, 0x33, 0x18, 0x60, 0x00, 0x00, 0x00, //   #####        ######       ######        ##   ##   ##  ##### #    ###    ##  ##   ##    ##
+		0x7E, 0x00, 0xF0, 0x07, 0xE0, 0x31, 0x8C, 0xC2, 0x1E, 0x33, 0x18, 0x60, 0x00, 0x00, 0x00, //  ######         ####         ######       ##   ##   ##  ##    #    ####   ##  ##   ##    ##
+		0x7E, 0x18, 0xE1, 0x87, 0xE0, 0x31, 0x8C, 0xC6, 0x37, 0x33, 0x18, 0x60, 0x00, 0x00, 0x00, //  ######    ##   ###    ##    ######       ##   ##   ##  ##   ##   ## ###  ##  ##   ##    ##
+		0xFE, 0x18, 0xE3, 0x87, 0xE0, 0x31, 0x8C, 0xEE, 0x63, 0xB3, 0x18, 0x60, 0x00, 0x00, 0x00, // #######    ##   ###   ###    ######       ##   ##   ##  ### ###  ##   ### ##  ##   ##    ##
+		0xFE, 0x1C, 0xC3, 0x87, 0xE0, 0x31, 0x8C, 0x7A, 0xE1, 0xB3, 0x18, 0x60, 0x00, 0x00, 0x00, // #######    ###  ##    ###    ######       ##   ##   ##   #### # ###    ## ##  ##   ##    ##
+		0xFE, 0x1C, 0xC7, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #######    ###  ##   ####    ######
+		0xFE, 0x1F, 0x87, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // #######    ######    ####    ######
+		0xFE, 0x1F, 0x8F, 0x87, 0xE0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, // #######    ######   #####    ######       ##                                                                      ##
+		0xFE, 0x1F, 0x0F, 0x87, 0xE0, 0x30, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x30, // #######    #####    #####    ######       ##            ##                                    ##                  ##
+		0xFE, 0x1E, 0x0F, 0x87, 0xE0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x30, // #######    ####     #####    ######                     ##                                    ##                  ##
+		0xFE, 0x1E, 0x07, 0x87, 0xE0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x30, // #######    ####      ####    ######                     ##                                    ##                  ##
+		0xFE, 0x1E, 0x07, 0x87, 0xE0, 0x33, 0xF1, 0xF3, 0xF1, 0xFD, 0xBB, 0xE7, 0xE7, 0xC3, 0xF0, // #######    ####      ####    ######       ##  ######   #####  ######   ####### ## ### #####  ######  #####    ######
+		0x7E, 0x1C, 0x43, 0x87, 0xE0, 0x33, 0x98, 0xC2, 0x31, 0x19, 0xE4, 0x33, 0x0C, 0x66, 0x30, //  ######    ###   #    ###    ######       ##  ###  ##   ##    #   ##   #   ##  ####  #    ##  ##    ##   ##  ##   ##
+		0x7E, 0x18, 0x63, 0x87, 0xE0, 0x33, 0x18, 0xC6, 0x1B, 0x19, 0xC0, 0x33, 0x0C, 0x66, 0x30, //  ######    ##    ##   ###    ######       ##  ##   ##   ##   ##    ## ##   ##  ###        ##  ##    ##   ##  ##   ##
+		0x7E, 0x18, 0xE1, 0x87, 0xC0, 0x33, 0x18, 0xC7, 0xFB, 0x19, 0x81, 0xF3, 0x1F, 0xEE, 0x30, //  ######    ##   ###    ##    #####        ##  ##   ##   ##   ######## ##   ##  ##      #####  ##   ######## ###   ##
+		0x3E, 0x10, 0xF1, 0x87, 0xC0, 0x33, 0x18, 0xC7, 0xF1, 0xF1, 0x87, 0xB3, 0x1F, 0xCC, 0x30, //   #####    #    ####   ##    #####        ##  ##   ##   ##   #######   #####   ##    #### ##  ##   #######  ##    ##
+		0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x33, 0x18, 0xC6, 0x01, 0xE1, 0x86, 0x33, 0x0C, 0x0E, 0x30, //   ###############################         ##  ##   ##   ##   ##        ####    ##    ##   ##  ##    ##      ###   ##
+		0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x33, 0x18, 0xC6, 0x09, 0x81, 0x84, 0x33, 0x8C, 0x26, 0x30, //    ##############################         ##  ##   ##   ##   ##     #  ##      ##    #    ##  ###   ##    #  ##   ##
+		0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x33, 0x18, 0xF3, 0xF1, 0xF9, 0x87, 0xF1, 0xEF, 0xE7, 0xF0, //     ############################          ##  ##   ##   ####  ######   ######  ##    #######   #### #######  #######
+		0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x33, 0x18, 0x71, 0xE3, 0x1D, 0x83, 0xD0, 0xE3, 0x83, 0x90, //      ##########################           ##  ##   ##    ###   ####   ##   ### ##     #### #    ###   ###     ###  #
+		0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, //       ########################                                       ##     ##
+		0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, //        ######################                                         ### ####
+		0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, //         ####################                                           #####
+		0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //           ################
+		0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //             ###########
+		0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //                 ####
+
+};
+
+// Bitmap sizes for maxim128
+const unsigned char maxim128WidthPages   = 16;
+const unsigned char maxim128HeightPixels = 36;
+
+
+const unsigned char BLELogoBitmap[] =
+{
+		0x18, 0x00, //    ##
+		0x1C, 0x00, //    ###
+		0x1E, 0x00, //    ####
+		0x1B, 0x00, //    ## ##
+		0x19, 0x80, //    ##  ##
+		0xDB, 0x00, // ## ## ##
+		0x7E, 0x00, //  ######
+		0x1C, 0x00, //    ###
+		0x7E, 0x00, //  ######
+		0xDB, 0x00, // ## ## ##
+		0x19, 0x80, //    ##  ##
+		0x1B, 0x00, //    ## ##
+		0x1E, 0x00, //    ####
+		0x1C, 0x00, //    ###
+		0x18, 0x00, //    ##
+};
+
+// Bitmap sizes for bLLOGO9x11
+const unsigned char BLELogoWidthPages = 2;
+const unsigned char BLELogoHeightPixels = 15;
+
+
+const unsigned char USBLogoBitmap[] =
+{
+	0x08, 0x00, //     #
+	0x1C, 0x00, //    ###
+	0x3E, 0x00, //   #####
+	0x08, 0x00, //     #
+	0x09, 0x80, //     #  ##
+	0x09, 0x80, //     #  ##
+	0xC9, 0x00, // ##  #  #
+	0x4B, 0x00, //  #  # ##
+	0x4C, 0x00, //  #  ##
+	0x28, 0x00, //   # #
+	0x18, 0x00, //    ##
+	0x08, 0x00, //     #
+	0x1C, 0x00, //    ###
+	0x1C, 0x00, //    ###
+	0x08, 0x00, //     #
+};
+
+// Bitmap sizes for uSBLOGO9x15
+const unsigned char uSBLOGO9x15WidthPages = 2;
+const unsigned char uSBLOGO9x15HeightPixels = 15;
+
+//
+//  Font data for Microsoft Sans Serif 8pt
+//
+
+// Character bitmaps for Microsoft Sans Serif 8pt
+const unsigned char AM_Bitmap[] =
+{
+    // @0 'A' (7 pixels wide)
+    0x10, 0x82,//    #
+    0x10, 0x82,//    #
+    0x28, 0xC6,//   # #
+    0x28, 0xC6,//   # #
+    0x44, 0xAA,//  #   #
+    0x44, 0xAA,//  #   #
+    0x7C, 0x92,//  #####
+    0x82, 0x92,// #     #
+    0x82, 0x82,// #     #
+};
+
+// Character bitmaps for Microsoft Sans Serif 8pt
+const unsigned char PM_Bitmap[] =
+{
+    // @9 'P' (6 pixels wide)
+    0xF8, 0x82,// #####
+    0x84, 0x82,// #    #
+    0x84, 0xC6,// #    #
+    0x84, 0xC6,// #    #
+    0xF8, 0xAA,// #####
+    0x80, 0xAA,// #
+    0x80, 0x92,// #
+    0x80, 0x92,// #
+    0x80, 0x82,// #
+};
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/mbed_logo.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,45 @@
+/** 128*128 1bpp version of the mbed-enabled logo */
+#if 0
+extern const unsigned char mbed_enabled_logo[];
+#endif
+extern const unsigned char maxim_integrated_logo[];
+extern const unsigned char maxim128Bitmaps[];
+extern const unsigned char BLELogoBitmap[];
+extern const unsigned char USBLogoBitmap[];
+
+#ifndef MBED_LOGO_H
+#define MBED_LOGO_H
+
+typedef struct
+{
+	const unsigned char width;
+	const unsigned char height;
+	const unsigned short offset;
+
+} FONT_CHAR_INFO;
+
+typedef struct
+{
+	const unsigned char height;
+	const char startCh;
+	const char endCh;
+	const FONT_CHAR_INFO*	charDesc;
+	const unsigned char* bitmap;
+
+} FONT_INFO;
+
+// Font data for Ubuntu Condensed 28pt
+extern const unsigned char ubuntuCondensed_28ptBitmaps[];
+extern const FONT_INFO ubuntuCondensed_28ptFontInfo;
+extern const FONT_CHAR_INFO ubuntuCondensed_28ptDescriptors[];
+// Bitmap info for maxim128
+
+//extern const unsigned char maxim128WidthPages;
+//extern const unsigned char maxim128HeightPixels;
+
+// Font data for Microsoft Sans Serif 8pt
+extern const unsigned char AM_Bitmap[];
+extern const unsigned char PM_Bitmap[];
+
+
+#endif // MBED_LOGO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/ubuntucondensed16x21.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,111 @@
+
+//WARNING: This Font Require X-GLCD Lib.
+//         You can not use it with MikroE GLCD Lib.
+
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektronika 2011
+//http://www.mikroe.com
+
+//GLCD FontName : Ubuntu_Condensed16x21
+//GLCD FontSize : 16 x 21
+
+const unsigned char UbuntuCondensed16x21[] = {
+		49, 16,21,3,
+        0x09, 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,  // Code for char
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xCF, 0x01, 0xFC, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 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,  // Code for char "
+        0x0B, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x40, 0xFE, 0x01, 0xFC, 0x1F, 0x00, 0x7C, 0x10, 0x00, 0x40, 0x10, 0x00, 0x40, 0xF0, 0x01, 0xC0, 0xFF, 0x01, 0xFC, 0x1F, 0x00, 0x7C, 0x10, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char #
+        0x08, 0x00, 0x00, 0x00, 0xE0, 0x60, 0x00, 0xF0, 0xC1, 0x00, 0x18, 0xC3, 0x00, 0x1E, 0xC7, 0x07, 0x1E, 0xC6, 0x07, 0x18, 0xFE, 0x00, 0x18, 0x78, 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,  // Code for char $
+        0x0D, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0xFC, 0x03, 0x00, 0x04, 0x02, 0x01, 0xFC, 0xE3, 0x01, 0xF8, 0x79, 0x00, 0x00, 0x1E, 0x00, 0xC0, 0x03, 0x00, 0xF0, 0xFC, 0x00, 0x3C, 0xFE, 0x01, 0x04, 0x02, 0x01, 0x00, 0xFE, 0x01, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char %
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x78, 0xFE, 0x00, 0xFC, 0xC7, 0x01, 0x8C, 0x83, 0x01, 0x8C, 0x8F, 0x01, 0xFC, 0x9C, 0x01, 0x78, 0xF0, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x8E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char &
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 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,  // Code for char '
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0xF0, 0xFF, 0x03, 0x3C, 0x00, 0x0F, 0x06, 0x00, 0x18, 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,  // Code for char (
+        0x04, 0x06, 0x00, 0x18, 0x3C, 0x00, 0x0F, 0xF0, 0xFF, 0x03, 0x80, 0x7F, 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,  // Code for char )
+        0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x58, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x58, 0x00, 0x00, 0x18, 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,  // Code for char *
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x80, 0x7F, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char +
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x80, 0x0F, 0x00, 0x80, 0x03, 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,  // Code for char ,
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 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,  // Code for char -
+        0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
+        0x06, 0x00, 0x80, 0x1F, 0x00, 0xF8, 0x07, 0x80, 0x7F, 0x00, 0xF8, 0x07, 0x00, 0x7E, 0x00, 0x00, 0x06, 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,  // Code for char /
+        0x08, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0xF8, 0xFF, 0x00, 0x1C, 0xC0, 0x01, 0x0C, 0x80, 0x01, 0x1C, 0xC0, 0x01, 0xF8, 0xFF, 0x00, 0xF0, 0x7F, 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,  // Code for char 0
+        0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
+        0x07, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x01, 0x0C, 0xF8, 0x01, 0x0C, 0x9C, 0x01, 0x0C, 0x87, 0x01, 0xFC, 0x83, 0x01, 0xF8, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 2
+        0x08, 0x00, 0x00, 0x00, 0x08, 0xC0, 0x00, 0x0C, 0x80, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x9C, 0xC7, 0x01, 0xF8, 0xFF, 0x00, 0xF0, 0x7C, 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,  // Code for char 3
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x80, 0x1F, 0x00, 0xF0, 0x19, 0x00, 0x3C, 0x18, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x18, 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,  // Code for char 4
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xFC, 0x83, 0x01, 0xFC, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0xC7, 0x01, 0x0C, 0xFE, 0x00, 0x0C, 0x7C, 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,  // Code for char 5
+        0x08, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0xF0, 0xFF, 0x00, 0x78, 0xC3, 0x01, 0x18, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0xFF, 0x00, 0x00, 0x7C, 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,  // Code for char 6
+        0x08, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0xC0, 0x01, 0x0C, 0xFC, 0x01, 0x8C, 0x1F, 0x00, 0xEC, 0x01, 0x00, 0x7C, 0x00, 0x00, 0x1C, 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,  // Code for char 7
+        0x08, 0x00, 0x00, 0x00, 0xF0, 0x78, 0x00, 0xF8, 0xFD, 0x00, 0x0C, 0x87, 0x01, 0x0C, 0x82, 0x01, 0x0C, 0x87, 0x01, 0xF8, 0xFD, 0x00, 0x78, 0x78, 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,  // Code for char 8
+        0x08, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0xF8, 0x83, 0x01, 0x0C, 0x87, 0x01, 0x0C, 0xC6, 0x00, 0x1C, 0xF6, 0x00, 0xF8, 0x7F, 0x00, 0xF0, 0x0F, 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,  // Code for char 9
+        0x03, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x01, 0xE0, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char :
+        0x04, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x18, 0xE0, 0x80, 0x0F, 0x00, 0x80, 0x03, 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,  // Code for char ;
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x11, 0x00, 0x80, 0x31, 0x00, 0xC0, 0x60, 0x00, 0xC0, 0x60, 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,  // Code for char <
+        0x08, 0x00, 0x00, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 0x00, 0x80, 0x31, 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,  // Code for char =
+        0x08, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x00, 0xC0, 0x60, 0x00, 0x80, 0x31, 0x00, 0x00, 0x11, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x04, 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,  // Code for char >
+        0x07, 0x08, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0xCE, 0x01, 0x0C, 0xCF, 0x01, 0x8C, 0x03, 0x00, 0xF8, 0x00, 0x00, 0x78, 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,  // Code for char ?
+        0x10, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0xE0, 0xFF, 0x01, 0xF0, 0xC0, 0x03, 0x38, 0x00, 0x07, 0x18, 0x3E, 0x0E, 0x0C, 0x7F, 0x0C, 0x8C, 0x61, 0x0C, 0x8C, 0x61, 0x0C, 0x8C, 0x3F, 0x0C, 0x8C, 0x7F, 0x0C, 0x1C, 0x60, 0x00, 0x18, 0x60, 0x00, 0x70, 0x70, 0x00, 0xE0, 0x3F, 0x00, 0xC0, 0x1F, 0x00,  // Code for char @
+        0x0B, 0x00, 0x80, 0x01, 0x00, 0xF8, 0x01, 0x00, 0x7F, 0x00, 0xE0, 0x3F, 0x00, 0xFC, 0x30, 0x00, 0x0C, 0x30, 0x00, 0xFC, 0x30, 0x00, 0xE0, 0x37, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char A
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x9C, 0xC7, 0x01, 0xF8, 0xFF, 0x00, 0xF0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char B
+        0x09, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x38, 0xE0, 0x00, 0x0C, 0xC0, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x18, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char C
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x1C, 0xC0, 0x01, 0x38, 0xE0, 0x00, 0xF0, 0x7F, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char D
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x83, 0x01, 0x0C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char E
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x0C, 0x03, 0x00, 0x0C, 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,  // Code for char F
+        0x0A, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x38, 0xE0, 0x00, 0x1C, 0xC0, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0xFE, 0x01, 0x08, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char G
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char H
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char I
+        0x06, 0x00, 0xC0, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0xFC, 0xFF, 0x01, 0xFC, 0x7F, 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,  // Code for char J
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x80, 0x03, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x1C, 0x00, 0x1C, 0xF8, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char K
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char L
+        0x0E, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x1C, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x70, 0x00, 0x00, 0x7E, 0x00, 0xE0, 0x0F, 0x00, 0xFC, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xE0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char M
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x7C, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char N
+        0x0C, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x38, 0xE0, 0x00, 0x1C, 0xC0, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x01, 0x1C, 0xC0, 0x01, 0x38, 0xE0, 0x00, 0xF0, 0x7F, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char O
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x0C, 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x0E, 0x00, 0xF8, 0x07, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char P
+        0x0C, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x7F, 0x00, 0x38, 0xE0, 0x00, 0x1C, 0xC0, 0x01, 0x0C, 0x80, 0x01, 0x0C, 0x80, 0x07, 0x0C, 0x80, 0x0F, 0x1C, 0xC0, 0x0D, 0x38, 0xE0, 0x18, 0xF0, 0x7F, 0x18, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Q
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x0C, 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x3E, 0x00, 0xF8, 0xF7, 0x00, 0xF0, 0xC3, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char R
+        0x07, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0x00, 0xF8, 0x83, 0x01, 0x8C, 0x83, 0x01, 0x0C, 0x87, 0x01, 0x0C, 0xFE, 0x00, 0x1C, 0x78, 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,  // Code for char S
+        0x09, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char T
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0xC0, 0x01, 0xFC, 0xFF, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char U
+        0x09, 0x1C, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x80, 0x01, 0x00, 0xFC, 0x01, 0xE0, 0x7F, 0x00, 0xFC, 0x07, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char V
+        0x0F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x80, 0xFF, 0x01, 0x00, 0x80, 0x01, 0x00, 0xF8, 0x01, 0x80, 0x7F, 0x00, 0xF0, 0x07, 0x00, 0x70, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x80, 0x01, 0x80, 0xFF, 0x01, 0xFC, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+        0x09, 0x04, 0x00, 0x01, 0x1C, 0xC0, 0x01, 0x78, 0xF0, 0x00, 0xE0, 0x1F, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x1F, 0x00, 0x78, 0xF0, 0x00, 0x1C, 0xC0, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char X
+        0x0A, 0x04, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0xC0, 0x03, 0x00, 0xF8, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Y
+        0x08, 0x00, 0x00, 0x00, 0x0C, 0xC0, 0x01, 0x0C, 0xF0, 0x01, 0x0C, 0xBE, 0x01, 0x8C, 0x8F, 0x01, 0xEC, 0x81, 0x01, 0x7C, 0x80, 0x01, 0x1C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Z
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xFE, 0xFF, 0x1F, 0x06, 0x00, 0x18, 0x06, 0x00, 0x18, 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,  // Code for char [
+        0x06, 0x7E, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x18, 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,  // Code for char BackSlash
+        0x04, 0x06, 0x00, 0x18, 0x06, 0x00, 0x18, 0xFE, 0xFF, 0x1F, 0xFE, 0xFF, 0x1F, 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,  // Code for char ]
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xE0, 0x03, 0x00, 0x7C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x03, 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,  // Code for char ^
+        0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char _
+        0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0C, 0x00, 0x00, 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,  // Code for char `
+        0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0xC0, 0xFC, 0x01, 0xC0, 0x8C, 0x01, 0xC0, 0x8C, 0x01, 0xC0, 0xFF, 0x01, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char a
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0xC1, 0x01, 0x80, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char b
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xC1, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char c
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xC1, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char d
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xCD, 0x01, 0xC0, 0x8C, 0x01, 0xC0, 0x8C, 0x01, 0x80, 0x8F, 0x01, 0x00, 0x0F, 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,  // Code for char e
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0xC6, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char f
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x18, 0xC0, 0xC1, 0x19, 0xC0, 0x80, 0x19, 0xC0, 0x80, 0x19, 0xC0, 0xFF, 0x0F, 0xC0, 0xFF, 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,  // Code for char g
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char h
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xFF, 0x01, 0xCC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char i
+        0x04, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0xCC, 0xFF, 0x1F, 0xCC, 0xFF, 0x0F, 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,  // Code for char j
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0xFE, 0xFF, 0x01, 0x00, 0x1C, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xE3, 0x01, 0x40, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char k
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char l
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0xC0, 0xFF, 0x01, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x80, 0xFF, 0x01, 0xC0, 0xFF, 0x01, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char m
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0xC0, 0xFF, 0x01, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char n
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xC1, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0xC1, 0x01, 0x80, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char o
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0xC0, 0xFF, 0x1F, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0xC1, 0x01, 0x80, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char p
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x80, 0xFF, 0x00, 0xC0, 0xC1, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0xFF, 0x1F, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char q
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0xC0, 0xFF, 0x01, 0xC0, 0x00, 0x00, 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,  // Code for char r
+        0x06, 0x00, 0x00, 0x00, 0x80, 0x87, 0x01, 0xC0, 0x8F, 0x01, 0xC0, 0x9C, 0x01, 0xC0, 0xF8, 0x01, 0xC0, 0xF0, 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,  // Code for char s
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0xF8, 0xFF, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0xC0, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
+        0x08, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0xC0, 0xFF, 0x01, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char u
+        0x08, 0xC0, 0x01, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0xFE, 0x01, 0xC0, 0x7F, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char v
+        0x0B, 0xC0, 0x03, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x80, 0x01, 0x00, 0xFE, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x80, 0x01, 0x00, 0xFE, 0x01, 0xC0, 0xFF, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char w
+        0x08, 0x40, 0x00, 0x01, 0xC0, 0xC1, 0x01, 0x80, 0xF7, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x80, 0xF7, 0x00, 0xC0, 0xC1, 0x01, 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char x
+        0x07, 0xC0, 0x01, 0x18, 0xC0, 0x3F, 0x18, 0x00, 0xFE, 0x1F, 0x00, 0xE0, 0x0F, 0x00, 0xFE, 0x03, 0xC0, 0x3F, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char y
+        0x06, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x01, 0xC0, 0xF8, 0x01, 0xC0, 0xBE, 0x01, 0xC0, 0x87, 0x01, 0xC0, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char z
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xFC, 0xFF, 0x0F, 0xFE, 0xF3, 0x1F, 0x06, 0x00, 0x18, 0x06, 0x00, 0x18, 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,  // Code for char {
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x1F, 0xFE, 0xFF, 0x1F, 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,  // Code for char |
+        0x05, 0x06, 0x00, 0x18, 0x06, 0x00, 0x18, 0xFE, 0xF3, 0x1F, 0xFC, 0xFF, 0x0F, 0x00, 0x0C, 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,  // Code for char }
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ~
+        0x06, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0x01, 0x80, 0x00, 0xFF, 0xFF, 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   // Code for char 
+        };
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/ubuntucondensed20x26.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,118 @@
+#ifndef DRIVERS_LS013B7DH03_UBUNTUCONDENSED20X26_H_
+#define DRIVERS_LS013B7DH03_UBUNTUCONDENSED20X26_H_
+
+//WARNING: This Font Require X-GLCD Lib.
+//         You can not use it with MikroE GLCD Lib.
+
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektronika 2011 
+//http://www.mikroe.com 
+
+//GLCD FontName : Ubuntu_Condensed20x26
+//GLCD FontSize : 20 x 26
+
+const unsigned char UbuntuCondensed20x26[] = {
+		// number of columns, char width , char height, number of bytes for height
+		81, 20,26,4,
+        // first column is the character width
+		0x08, 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,  // Code for char
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F, 0x1C, 0x00, 0xFC, 0x7F, 0x1C, 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,  // Code for char !
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 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,  // Code for char "
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x1C, 0x00, 0x80, 0xF9, 0x1F, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xFC, 0xC7, 0x00, 0x00, 0x9C, 0xC1, 0x00, 0x00, 0x80, 0xC1, 0x1C, 0x00, 0x80, 0xF9, 0x1F, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xFC, 0xC7, 0x00, 0x00, 0x9C, 0xC1, 0x00, 0x00, 0x80, 0xC1, 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,  // Code for char #
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x08, 0x00, 0xF0, 0x07, 0x1C, 0x00, 0x30, 0x0E, 0x18, 0x00, 0x18, 0x1C, 0x18, 0x00, 0x1F, 0x18, 0xF8, 0x00, 0x1F, 0x38, 0xF8, 0x00, 0x18, 0x70, 0x1C, 0x00, 0x18, 0xE0, 0x0F, 0x00, 0x00, 0xC0, 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,  // Code for char $
+        0x10, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x10, 0x00, 0xFC, 0x0F, 0x1E, 0x00, 0xF0, 0xC3, 0x0F, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xF8, 0xE1, 0x07, 0x00, 0x3C, 0xF8, 0x1F, 0x00, 0x04, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char %
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0xF0, 0xF0, 0x0F, 0x00, 0xF8, 0x3B, 0x0C, 0x00, 0x1C, 0x0F, 0x18, 0x00, 0x0C, 0x1E, 0x18, 0x00, 0x0C, 0x3E, 0x18, 0x00, 0x0C, 0x73, 0x18, 0x00, 0xF8, 0xE1, 0x0C, 0x00, 0xF0, 0xC0, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x38, 0x18, 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,  // Code for char &
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 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,  // Code for char '
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0x0F, 0x00, 0xC0, 0x03, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x0F, 0x00, 0xC0, 0x03, 0xFE, 0x00, 0xFC, 0x01, 0xF0, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 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,  // Code for char )
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xBC, 0x01, 0x00, 0x00, 0xA0, 0x03, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x20, 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,  // Code for char *
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char +
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x7C, 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,  // Code for char ,
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char -
+        0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 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,  // Code for char .
+        0x08, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char /
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x0E, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 0
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 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,  // Code for char 1
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x1C, 0x80, 0x1F, 0x00, 0x0C, 0xE0, 0x19, 0x00, 0x0C, 0x70, 0x18, 0x00, 0x0C, 0x38, 0x18, 0x00, 0x1C, 0x0E, 0x18, 0x00, 0xF8, 0x07, 0x18, 0x00, 0xF0, 0x01, 0x18, 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,  // Code for char 2
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x1C, 0x1E, 0x18, 0x00, 0xF8, 0x3F, 0x0C, 0x00, 0xF0, 0xF1, 0x0F, 0x00, 0x00, 0xE0, 0x03, 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,  // Code for char 3
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x80, 0xDF, 0x00, 0x00, 0xE0, 0xC7, 0x00, 0x00, 0xF8, 0xC0, 0x00, 0x00, 0x3C, 0xC0, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 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,  // Code for char 4
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xF8, 0x07, 0x18, 0x00, 0xFC, 0x07, 0x18, 0x00, 0x0C, 0x06, 0x18, 0x00, 0x0C, 0x0E, 0x18, 0x00, 0x0C, 0x0C, 0x1C, 0x00, 0x0C, 0x1C, 0x0E, 0x00, 0x0C, 0xF8, 0x07, 0x00, 0x0C, 0xF0, 0x03, 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,  // Code for char 5
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xF0, 0x06, 0x1E, 0x00, 0x38, 0x06, 0x18, 0x00, 0x18, 0x06, 0x18, 0x00, 0x1C, 0x06, 0x18, 0x00, 0x0C, 0x0E, 0x1C, 0x00, 0x0C, 0xFC, 0x0F, 0x00, 0x00, 0xF0, 0x03, 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,  // Code for char 6
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x0C, 0xC0, 0x1F, 0x00, 0x0C, 0xF8, 0x01, 0x00, 0x0C, 0x1E, 0x00, 0x00, 0x8C, 0x03, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x0C, 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,  // Code for char 7
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC1, 0x03, 0x00, 0xF8, 0xF3, 0x0F, 0x00, 0x18, 0x3F, 0x0C, 0x00, 0x0C, 0x1C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x1C, 0x18, 0x00, 0x0C, 0x1C, 0x18, 0x00, 0x1C, 0x36, 0x0C, 0x00, 0xF8, 0xE3, 0x0F, 0x00, 0xF0, 0xC1, 0x03, 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,  // Code for char 8
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xF8, 0x1F, 0x18, 0x00, 0x1C, 0x38, 0x18, 0x00, 0x0C, 0x30, 0x1C, 0x00, 0x0C, 0x30, 0x0C, 0x00, 0x0C, 0x30, 0x0E, 0x00, 0x3C, 0xB0, 0x07, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 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,  // Code for char 9
+        0x03, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x1C, 0x00, 0xC0, 0x01, 0x1C, 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,  // Code for char :
+        0x04, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x80, 0x01, 0xC0, 0x01, 0xFC, 0x01, 0x00, 0x00, 0x7C, 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,  // Code for char ;
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x02, 0x02, 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,  // Code for char <
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char =
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0x8C, 0x01, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 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,  // Code for char >
+        0x08, 0x08, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x70, 0x1C, 0x00, 0x0C, 0x7C, 0x1C, 0x00, 0x0C, 0x0E, 0x00, 0x00, 0x1C, 0x07, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xF0, 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,  // Code for char ?
+        0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0xE0, 0x03, 0x3C, 0x00, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0xE0, 0x00, 0x18, 0xFC, 0xC0, 0x00, 0x1C, 0xFF, 0xC3, 0x01, 0x0C, 0x03, 0x87, 0x01, 0x8C, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x86, 0x01, 0x8C, 0xFF, 0x83, 0x01, 0x98, 0xFF, 0x87, 0x01, 0x18, 0x00, 0x06, 0x00, 0x30, 0x00, 0x06, 0x00, 0xE0, 0x00, 0x07, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x00, 0x00,  // Code for char @
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x00, 0x00, 0xFC, 0xC1, 0x00, 0x00, 0x1C, 0xC0, 0x00, 0x00, 0xFC, 0xC0, 0x00, 0x00, 0xE0, 0xCF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char A
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x18, 0x1E, 0x1C, 0x00, 0xF8, 0x3F, 0x0E, 0x00, 0xF0, 0xF1, 0x07, 0x00, 0x00, 0xE0, 0x03, 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,  // Code for char B
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x70, 0x80, 0x07, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x08, 0x00, 0x08, 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,  // Code for char C
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x38, 0x00, 0x0E, 0x00, 0xF0, 0x80, 0x07, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char D
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x0C, 0x00, 0x18, 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,  // Code for char E
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 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,  // Code for char F
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x70, 0x80, 0x07, 0x00, 0x18, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x1C, 0xF0, 0x1F, 0x00, 0x08, 0xF0, 0x0F, 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,  // Code for char G
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 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,  // Code for char H
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 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,  // Code for char I
+        0x09, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 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,  // Code for char J
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x80, 0x33, 0x00, 0x00, 0xE0, 0x60, 0x00, 0x00, 0x70, 0xC0, 0x01, 0x00, 0x3C, 0x80, 0x07, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x00, 0x00, 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,  // Code for char K
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char L
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char M
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x78, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x1F, 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,  // Code for char N
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x78, 0x00, 0x0F, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0x80, 0xFF, 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,  // Code for char O
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x1C, 0x38, 0x00, 0x00, 0x38, 0x1C, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xE0, 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,  // Code for char P
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x78, 0x00, 0x0C, 0x00, 0xF8, 0x00, 0x0C, 0x00, 0xD8, 0x01, 0x18, 0x00, 0x8C, 0x01, 0x78, 0x00, 0x0F, 0x03, 0xE0, 0xFF, 0x03, 0x03, 0x80, 0xFF, 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,  // Code for char Q
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x1C, 0xF8, 0x00, 0x00, 0x38, 0xDC, 0x03, 0x00, 0xF0, 0x8F, 0x0F, 0x00, 0xE0, 0x07, 0x1E, 0x00, 0x00, 0x00, 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,  // Code for char R
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x08, 0x00, 0xF8, 0x03, 0x1C, 0x00, 0x18, 0x07, 0x18, 0x00, 0x0C, 0x0E, 0x18, 0x00, 0x0C, 0x1C, 0x18, 0x00, 0x0C, 0x18, 0x18, 0x00, 0x0C, 0x38, 0x0C, 0x00, 0x0C, 0xF0, 0x0F, 0x00, 0x08, 0xC0, 0x03, 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,  // Code for char S
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 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,  // Code for char T
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0xFC, 0xFF, 0x03, 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,  // Code for char U
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xFC, 0x07, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x1C, 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,  // Code for char V
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+        0x0C, 0x04, 0x00, 0x10, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x78, 0x00, 0x0F, 0x00, 0xE0, 0xC1, 0x03, 0x00, 0x80, 0xF7, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x80, 0xF7, 0x00, 0x00, 0xE0, 0xC1, 0x03, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x04, 0x00, 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,  // Code for char X
+        0x0C, 0x04, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x04, 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,  // Code for char Y
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x1F, 0x00, 0x0C, 0xC0, 0x1F, 0x00, 0x0C, 0xF0, 0x19, 0x00, 0x0C, 0x3C, 0x18, 0x00, 0x0C, 0x0F, 0x18, 0x00, 0xCC, 0x03, 0x18, 0x00, 0xFC, 0x00, 0x18, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x18, 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,  // Code for char Z
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 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,  // Code for char [
+        0x08, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char BackSlash
+        0x05, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 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,  // Code for char ]
+        0x0B, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x04, 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,  // Code for char ^
+        0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char _
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char `
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x80, 0xC1, 0x0F, 0x00, 0x80, 0xE1, 0x1C, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x63, 0x18, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x1F, 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,  // Code for char a
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char b
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x08, 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,  // Code for char c
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x0F, 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,  // Code for char d
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x67, 0x0E, 0x00, 0x80, 0x61, 0x1C, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0x63, 0x18, 0x00, 0x00, 0x7F, 0x0C, 0x00, 0x00, 0x7C, 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,  // Code for char e
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x87, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x03, 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,  // Code for char f
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x07, 0x01, 0x00, 0x07, 0x0E, 0x03, 0x80, 0x03, 0x1C, 0x03, 0x80, 0x01, 0x18, 0x03, 0x80, 0x01, 0x18, 0x03, 0x80, 0x01, 0x18, 0x03, 0x80, 0x01, 0x98, 0x01, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0x7F, 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,  // Code for char g
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0x1F, 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,  // Code for char h
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xFF, 0x1F, 0x00, 0x8E, 0xFF, 0x1F, 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,  // Code for char i
+        0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x8E, 0xFF, 0xFF, 0x01, 0x8E, 0xFF, 0xFF, 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,  // Code for char j
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xDC, 0x01, 0x00, 0x00, 0x0E, 0x07, 0x00, 0x80, 0x03, 0x0E, 0x00, 0x80, 0x01, 0x1C, 0x00, 0x80, 0x00, 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,  // Code for char k
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char l
+        0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char m
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFE, 0x1F, 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,  // Code for char n
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char o
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x03, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xF8, 0x03, 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,  // Code for char p
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x07, 0x0E, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x03, 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,  // Code for char q
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0C, 0x00, 0x00, 0x3F, 0x18, 0x00, 0x80, 0x71, 0x18, 0x00, 0x80, 0x61, 0x18, 0x00, 0x80, 0xE1, 0x1C, 0x00, 0x80, 0xC3, 0x0F, 0x00, 0x00, 0x80, 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,  // Code for char s
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x80, 0x01, 0x1C, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 0x00, 0x80, 0x01, 0x18, 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,  // Code for char t
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x0F, 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,  // Code for char u
+        0x0B, 0x80, 0x01, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char v
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x80, 0x0F, 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,  // Code for char w
+        0x0A, 0x80, 0x00, 0x10, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x9E, 0x03, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x9E, 0x03, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x80, 0x03, 0x1C, 0x00, 0x80, 0x00, 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,  // Code for char x
+        0x0A, 0x80, 0x01, 0x00, 0x03, 0x80, 0x3F, 0x00, 0x03, 0x00, 0xFE, 0x01, 0x03, 0x00, 0xE0, 0xCF, 0x03, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char y
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x1C, 0x00, 0x80, 0x01, 0x1F, 0x00, 0x80, 0xC1, 0x1F, 0x00, 0x80, 0xE1, 0x19, 0x00, 0x80, 0x79, 0x18, 0x00, 0x80, 0x1F, 0x18, 0x00, 0x80, 0x07, 0x18, 0x00, 0x80, 0x03, 0x18, 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,  // Code for char z
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0xFE, 0xCF, 0xFF, 0x01, 0x07, 0x00, 0x80, 0x03, 0x03, 0x00, 0x00, 0x03, 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,  // Code for char {
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 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,  // Code for char |
+        0x06, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x80, 0x03, 0xFE, 0xCF, 0xFF, 0x01, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x30, 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,  // Code for char }
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char ~
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x1E, 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   // Code for char 
+
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/LS013B7DH03/ubuntucondensed22x28.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,113 @@
+
+//WARNING: This Font Require X-GLCD Lib.
+//         You can not use it with MikroE GLCD Lib.
+
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektronika 2011 
+//http://www.mikroe.com 
+
+//GLCD FontName : Ubuntu_Condensed22x28
+//GLCD FontSize : 22 x 28
+
+const unsigned char UbuntuCondensed22x28[] = {
+		89, 22,28,4,
+        0x0C, 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,  // Code for char  
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x70, 0x00, 0xF8, 0xFF, 0x71, 0x00, 0xF8, 0xFF, 0x70, 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,  // Code for char !
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 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,  // Code for char "
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xF8, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xF8, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 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,  // Code for char #
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x18, 0x00, 0xF0, 0x0F, 0x30, 0x00, 0xF8, 0x1F, 0x30, 0x00, 0x3F, 0x3C, 0xF0, 0x03, 0x1F, 0x78, 0xF8, 0x03, 0x1F, 0xF0, 0xFF, 0x03, 0x38, 0xE0, 0x3F, 0x00, 0x00, 0xC0, 0x0F, 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,  // Code for char $
+        0x12, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x18, 0x30, 0x40, 0x00, 0x38, 0x38, 0x70, 0x00, 0xF0, 0x1F, 0x7E, 0x00, 0xE0, 0x8F, 0x0F, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0xC0, 0xC7, 0x1F, 0x00, 0xF8, 0xE1, 0x3F, 0x00, 0x38, 0x70, 0x70, 0x00, 0x08, 0x30, 0x60, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char %
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0xC3, 0x3F, 0x00, 0xF0, 0xEF, 0x3F, 0x00, 0xF8, 0x7F, 0x70, 0x00, 0x18, 0x7C, 0x60, 0x00, 0x18, 0xFC, 0x60, 0x00, 0xF8, 0xCF, 0x61, 0x00, 0xF0, 0x87, 0x33, 0x00, 0xE0, 0x03, 0x3F, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xE0, 0x70, 0x00, 0x00, 0x00, 0x40, 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,  // Code for char &
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFE, 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,  // Code for char '
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0x01, 0xFE, 0x00, 0xF0, 0x07, 0x1F, 0x00, 0x80, 0x0F, 0x02, 0x00, 0x00, 0x04, 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,  // Code for char (
+        0x06, 0x02, 0x00, 0x00, 0x04, 0x1F, 0x00, 0x80, 0x0F, 0xFE, 0x00, 0xF0, 0x07, 0xF8, 0xFF, 0xFF, 0x01, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 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,  // Code for char )
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x20, 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,  // Code for char *
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char +
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xF0, 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,  // Code for char ,
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char -
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 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,  // Code for char .
+        0x09, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char /
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 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,  // Code for char 0
+        0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 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,  // Code for char 1
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x78, 0x00, 0x30, 0x00, 0x7F, 0x00, 0x18, 0xC0, 0x7F, 0x00, 0x18, 0xE0, 0x67, 0x00, 0x38, 0xFC, 0x60, 0x00, 0xF8, 0x7F, 0x60, 0x00, 0xF0, 0x1F, 0x60, 0x00, 0xE0, 0x07, 0x60, 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,  // Code for char 2
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x18, 0x60, 0x00, 0x18, 0x18, 0x60, 0x00, 0x38, 0x1C, 0x60, 0x00, 0xF8, 0x7F, 0x70, 0x00, 0xF0, 0xF7, 0x3F, 0x00, 0xE0, 0xE3, 0x3F, 0x00, 0x00, 0x80, 0x0F, 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,  // Code for char 3
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x3E, 0x03, 0x00, 0xC0, 0x07, 0x03, 0x00, 0xF0, 0x00, 0x03, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char 4
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xE0, 0x1F, 0x60, 0x00, 0xF8, 0x1F, 0x60, 0x00, 0xF8, 0x1F, 0x60, 0x00, 0x18, 0x38, 0x60, 0x00, 0x18, 0x78, 0x70, 0x00, 0x18, 0xF0, 0x3F, 0x00, 0x18, 0xE0, 0x1F, 0x00, 0x18, 0xC0, 0x0F, 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,  // Code for char 5
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0xC0, 0xFF, 0x3F, 0x00, 0xE0, 0x1B, 0x70, 0x00, 0x70, 0x18, 0x60, 0x00, 0x38, 0x38, 0x70, 0x00, 0x18, 0xF8, 0x7F, 0x00, 0x18, 0xF0, 0x3F, 0x00, 0x00, 0xC0, 0x0F, 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,  // Code for char 6
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0xE0, 0x7F, 0x00, 0x18, 0xFE, 0x7F, 0x00, 0xD8, 0xFF, 0x03, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x38, 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,  // Code for char 7
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x0F, 0x00, 0xF0, 0xCF, 0x3F, 0x00, 0xF0, 0xEF, 0x3F, 0x00, 0x38, 0x7C, 0x70, 0x00, 0x18, 0x38, 0x60, 0x00, 0x18, 0x70, 0x60, 0x00, 0x38, 0xFC, 0x70, 0x00, 0xF0, 0xEF, 0x3F, 0x00, 0xF0, 0xC7, 0x3F, 0x00, 0xE0, 0x03, 0x0F, 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,  // Code for char 8
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xF0, 0x3F, 0x60, 0x00, 0xF8, 0x7F, 0x70, 0x00, 0x18, 0x60, 0x38, 0x00, 0x18, 0x60, 0x3E, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 9
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x70, 0x00, 0x80, 0x03, 0x70, 0x00, 0x80, 0x03, 0x70, 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,  // Code for char :
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x80, 0x03, 0xF0, 0x0F, 0x80, 0x03, 0xF0, 0x07, 0x80, 0x03, 0xF0, 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,  // Code for char ;
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, 0xB8, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x1C, 0x07, 0x00, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0x02, 0x08, 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,  // Code for char <
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 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,  // Code for char =
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0x06, 0x0C, 0x00, 0x00, 0x0C, 0x06, 0x00, 0x00, 0x1C, 0x07, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0xB8, 0x03, 0x00, 0x00, 0xB0, 0x01, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 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,  // Code for char >
+        0x09, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0xE0, 0x71, 0x00, 0x18, 0xF0, 0x71, 0x00, 0x18, 0xF8, 0x71, 0x00, 0x38, 0x3E, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xE0, 0x03, 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,  // Code for char ?
+        0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0xE0, 0x07, 0xF8, 0x01, 0xE0, 0x00, 0xC0, 0x03, 0x70, 0x00, 0x80, 0x03, 0x30, 0xF0, 0x07, 0x07, 0x38, 0xFC, 0x0F, 0x06, 0x18, 0xFE, 0x1F, 0x06, 0x18, 0x06, 0x18, 0x06, 0x18, 0xFE, 0x0F, 0x06, 0x18, 0xFE, 0x0F, 0x06, 0x18, 0xFE, 0x1F, 0x06, 0x38, 0x00, 0x18, 0x00, 0x30, 0x00, 0x18, 0x00, 0xF0, 0x00, 0x18, 0x00, 0xE0, 0x03, 0x1C, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x01, 0x00,  // Code for char @
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xF8, 0x07, 0x03, 0x00, 0x38, 0x00, 0x03, 0x00, 0xF8, 0x07, 0x03, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x70, 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,  // Code for char A
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x38, 0x78, 0x60, 0x00, 0xF0, 0xFF, 0x30, 0x00, 0xE0, 0xCF, 0x3F, 0x00, 0xC0, 0xC7, 0x1F, 0x00, 0x00, 0x80, 0x0F, 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,  // Code for char B
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x70, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x38, 0x00, 0x70, 0x00, 0x10, 0x00, 0x30, 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,  // Code for char C
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x38, 0x00, 0x70, 0x00, 0x30, 0x00, 0x38, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char D
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x30, 0x60, 0x00, 0x18, 0x00, 0x60, 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,  // Code for char E
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x18, 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,  // Code for char F
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0xE0, 0x7F, 0x00, 0x38, 0xE0, 0x7F, 0x00, 0x10, 0xE0, 0x3F, 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,  // Code for char G
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 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,  // Code for char H
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 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,  // Code for char I
+        0x09, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x0F, 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,  // Code for char J
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0xC0, 0xC7, 0x03, 0x00, 0xF0, 0x81, 0x0F, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x7C, 0x00, 0x08, 0x00, 0x70, 0x00, 0x00, 0x00, 0x40, 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,  // Code for char K
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char L
+        0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char M
+        0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF0, 0x01, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 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,  // Code for char N
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0x60, 0x00, 0x38, 0x00, 0x70, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char O
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x70, 0x00, 0x00, 0x70, 0x78, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xC0, 0x0F, 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,  // Code for char P
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x18, 0x00, 0x60, 0x00, 0x18, 0x00, 0xE0, 0x01, 0x18, 0x00, 0xE0, 0x03, 0x18, 0x00, 0xE0, 0x07, 0x38, 0x00, 0x70, 0x07, 0xF0, 0x00, 0x3C, 0x06, 0xE0, 0xFF, 0x1F, 0x0C, 0xC0, 0xFF, 0x0F, 0x0C, 0x00, 0xFE, 0x03, 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,  // Code for char Q
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x18, 0xF0, 0x01, 0x00, 0x70, 0xF8, 0x07, 0x00, 0xF0, 0xBF, 0x3F, 0x00, 0xE0, 0x1F, 0x7E, 0x00, 0xC0, 0x0F, 0x78, 0x00, 0x00, 0x00, 0x40, 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,  // Code for char R
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x20, 0x00, 0xE0, 0x0F, 0x70, 0x00, 0xF0, 0x1F, 0x60, 0x00, 0x38, 0x1C, 0x60, 0x00, 0x18, 0x38, 0x60, 0x00, 0x18, 0x70, 0x60, 0x00, 0x18, 0xF0, 0x70, 0x00, 0x18, 0xE0, 0x3F, 0x00, 0x18, 0xC0, 0x1F, 0x00, 0x10, 0x80, 0x0F, 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,  // Code for char S
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 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,  // Code for char T
+        0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x0F, 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,  // Code for char U
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x03, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x78, 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,  // Code for char V
+        0x15, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char W
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x38, 0x00, 0x78, 0x00, 0xF8, 0x01, 0x7E, 0x00, 0xF0, 0xC7, 0x3F, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0xF0, 0x87, 0x3F, 0x00, 0xF8, 0x01, 0x7E, 0x00, 0x38, 0x00, 0x70, 0x00, 0x08, 0x00, 0x40, 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,  // Code for char X
+        0x0D, 0x08, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x80, 0x3F, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x08, 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,  // Code for char Y
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x70, 0x00, 0x18, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x7F, 0x00, 0x18, 0xC0, 0x7F, 0x00, 0x18, 0xF8, 0x63, 0x00, 0x18, 0xFE, 0x60, 0x00, 0x18, 0x3F, 0x60, 0x00, 0xD8, 0x0F, 0x60, 0x00, 0xF8, 0x03, 0x60, 0x00, 0xF8, 0x00, 0x60, 0x00, 0x38, 0x00, 0x60, 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,  // Code for char Z
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0x03, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x0C, 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,  // Code for char [
+        0x09, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x0C, 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,  // Code for char BackSlash
+        0x05, 0x03, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 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,  // Code for char ]
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 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,  // Code for char ^
+        0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 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,  // Code for char _
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char `
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x82, 0x3F, 0x00, 0x00, 0xC3, 0x3F, 0x00, 0x00, 0xC3, 0x71, 0x00, 0x00, 0xC3, 0x60, 0x00, 0x00, 0xC3, 0x60, 0x00, 0x00, 0xC7, 0x60, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFC, 0x3F, 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,  // Code for char a
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF0, 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,  // Code for char b
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x20, 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,  // Code for char c
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x3F, 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,  // Code for char d
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xCF, 0x78, 0x00, 0x00, 0xC3, 0x70, 0x00, 0x00, 0xC3, 0x60, 0x00, 0x00, 0xC3, 0x60, 0x00, 0x00, 0xC7, 0x60, 0x00, 0x00, 0xFE, 0x60, 0x00, 0x00, 0xFE, 0x30, 0x00, 0x00, 0xF8, 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,  // Code for char e
+        0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x07, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 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,  // Code for char f
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x0F, 0x06, 0x00, 0xFE, 0x1F, 0x0C, 0x00, 0x0E, 0x3C, 0x0C, 0x00, 0x07, 0x30, 0x0C, 0x00, 0x03, 0x30, 0x0C, 0x00, 0x03, 0x30, 0x0C, 0x00, 0x03, 0x30, 0x0E, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char g
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 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,  // Code for char h
+        0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xFF, 0x7F, 0x00, 0x1C, 0xFF, 0x7F, 0x00, 0x1C, 0xFF, 0x7F, 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,  // Code for char i
+        0x05, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x1C, 0xFF, 0xFF, 0x0F, 0x1C, 0xFF, 0xFF, 0x07, 0x1C, 0xFF, 0xFF, 0x03, 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,  // Code for char j
+        0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x1F, 0x7F, 0x00, 0x00, 0x07, 0x7C, 0x00, 0x00, 0x01, 0x60, 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,  // Code for char k
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char l
+        0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char m
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0x7F, 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,  // Code for char n
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x0F, 0x78, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF0, 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,  // Code for char o
+        0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0E, 0x78, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF0, 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,  // Code for char p
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x0E, 0x78, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xFE, 0xFF, 0x0F, 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,  // Code for char q
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 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,  // Code for char r
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x30, 0x00, 0x00, 0x7E, 0x60, 0x00, 0x00, 0xFF, 0x60, 0x00, 0x00, 0xE3, 0x61, 0x00, 0x00, 0xC3, 0x71, 0x00, 0x00, 0x83, 0x7F, 0x00, 0x00, 0x07, 0x3F, 0x00, 0x00, 0x00, 0x1E, 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,  // Code for char s
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0xF8, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 0x00, 0x00, 0x03, 0x60, 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,  // Code for char t
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x3F, 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,  // Code for char u
+        0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 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,  // Code for char v
+        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x1F, 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,  // Code for char w
+        0x0A, 0x00, 0x01, 0x40, 0x00, 0x00, 0x07, 0x78, 0x00, 0x00, 0x1F, 0x7E, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x1F, 0x7E, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x01, 0x40, 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,  // Code for char x
+        0x0A, 0x00, 0x07, 0x00, 0x0C, 0x00, 0x7F, 0x00, 0x0C, 0x00, 0xFF, 0x07, 0x0E, 0x00, 0xF8, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 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,  // Code for char y
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x03, 0x7E, 0x00, 0x00, 0x83, 0x7F, 0x00, 0x00, 0xE3, 0x6F, 0x00, 0x00, 0xFB, 0x63, 0x00, 0x00, 0x7F, 0x60, 0x00, 0x00, 0x1F, 0x60, 0x00, 0x00, 0x07, 0x60, 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,  // Code for char z
+        0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x03, 0xFE, 0x9F, 0xFF, 0x07, 0x07, 0x00, 0x00, 0x0E, 0x03, 0x00, 0x00, 0x0C, 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,  // Code for char {
+        0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 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,  // Code for char |
+        0x07, 0x03, 0x00, 0x00, 0x0C, 0x07, 0x00, 0x00, 0x0E, 0xFF, 0x0F, 0xFF, 0x0F, 0xFE, 0x9F, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, 0x03, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char }
+        0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x60, 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,  // Code for char ~
+        0x08, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x03, 0x00, 0x60, 0x00, 0x03, 0x00, 0x60, 0x00, 0x03, 0x00, 0x60, 0x00, 0x03, 0x00, 0x60, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0x7F, 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   // Code for char 
+        };
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30001/MAX30001.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1317 @@
+
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "mbed.h"
+#include "MAX30001.h"
+#include "Peripherals.h"
+
+MAX30001 *MAX30001::instance = NULL;
+
+
+//******************************************************************************
+MAX30001::MAX30001(PinName mosi, PinName miso, PinName sclk, PinName cs)
+{
+  m_spi = new SPI(mosi, miso, sclk);
+  m_cs = new DigitalOut(cs, 1);
+
+  m_spi->frequency(3000000);
+  spi_owner = true;
+  functionpointer = spiHandler;
+  onDataAvailableCallback = NULL;
+  instance = this;
+
+}
+
+
+//******************************************************************************
+MAX30001::MAX30001(SPI *spi, DigitalOut *cs)
+{
+  m_spi = spi;
+  m_cs = cs;
+  spi->frequency(3000000);
+  spi_owner = false;
+  functionpointer = spiHandler;
+  onDataAvailableCallback = NULL;
+  instance = this;
+
+
+}
+
+
+//******************************************************************************
+MAX30001::~MAX30001(void) {
+
+  if (spi_owner) {
+    delete m_spi;
+    delete m_cs;
+  }
+}
+
+//******************************************************************************
+int MAX30001::max30001_Rbias_FMSTR_Init(uint8_t En_rbias, uint8_t Rbiasv,
+                                        uint8_t Rbiasp, uint8_t Rbiasn,
+                                        uint8_t Fmstr) {
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_rbias = En_rbias;
+  max30001_cnfg_gen.bit.rbiasv   = Rbiasv;
+  max30001_cnfg_gen.bit.rbiasp   = Rbiasp;
+  max30001_cnfg_gen.bit.rbiasn   = Rbiasn;
+  max30001_cnfg_gen.bit.fmstr    = Fmstr;
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_CAL_InitStart(uint8_t En_Vcal, uint8_t Vmode,
+                                     uint8_t Vmag, uint8_t Fcal, uint16_t Thigh,
+                                     uint8_t Fifty) {
+  // CNFG_CAL
+  if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_cal.bit.vmode = Vmode;
+  max30001_cnfg_cal.bit.vmag  = Vmag;
+  max30001_cnfg_cal.bit.fcal  = Fcal;
+  max30001_cnfg_cal.bit.thigh = Thigh;
+  max30001_cnfg_cal.bit.fifty = Fifty;
+
+  if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  // RTOS uses a 32768HZ clock.  32768ticks represents 1secs.  1sec/10 =
+  // 100msecs.
+  wait(1.0 / 10.0);
+
+  if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_cal.bit.en_vcal = En_Vcal;
+
+  if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  // RTOS uses a 32768HZ clock.  32768ticks represents 1secs.  1sec/10 =
+  // 100msecs.
+  wait(1.0 / 10.0);
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_CAL_Stop(void) {
+
+  if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_cal.bit.en_vcal = 0; // Disable VCAL, all other settings are left unaffected
+
+  if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+//******************************************************************************
+//******************************************************************************
+int MAX30001::max30001_INT_assignment(max30001_intrpt_Location_t en_enint_loc,     max30001_intrpt_Location_t en_eovf_loc,  max30001_intrpt_Location_t en_fstint_loc,
+		                      max30001_intrpt_Location_t en_dcloffint_loc, max30001_intrpt_Location_t en_bint_loc,  max30001_intrpt_Location_t en_bovf_loc,
+		                      max30001_intrpt_Location_t en_bover_loc,     max30001_intrpt_Location_t en_bundr_loc, max30001_intrpt_Location_t en_bcgmon_loc,
+		                      max30001_intrpt_Location_t en_pint_loc,      max30001_intrpt_Location_t en_povf_loc,  max30001_intrpt_Location_t en_pedge_loc,
+		                      max30001_intrpt_Location_t en_lonint_loc,    max30001_intrpt_Location_t en_rrint_loc, max30001_intrpt_Location_t en_samp_loc,
+		                      max30001_intrpt_type_t  intb_Type,           max30001_intrpt_type_t int2b_Type)
+
+
+{
+  // INT1
+
+  pr_info("MAX30001::max30001_INT_assignment\r\n");
+  if (max30001_reg_read(EN_INT, &max30001_en_int.all) == -1) {
+    return -1;
+  }
+
+  // max30001_en_int2.bit.en_pint       = 0b1;  // Keep this off...
+
+  max30001_en_int.bit.en_eint = 0b1 & en_enint_loc;
+  max30001_en_int.bit.en_eovf = 0b1 & en_eovf_loc;
+  max30001_en_int.bit.en_fstint = 0b1 & en_fstint_loc;
+
+  max30001_en_int.bit.en_dcloffint = 0b1 & en_dcloffint_loc;
+  max30001_en_int.bit.en_bint = 0b1 & en_bint_loc;
+  max30001_en_int.bit.en_bovf = 0b1 & en_bovf_loc;
+
+  max30001_en_int.bit.en_bover = 0b1 & en_bover_loc;
+  max30001_en_int.bit.en_bundr = 0b1 & en_bundr_loc;
+  max30001_en_int.bit.en_bcgmon = 0b1 & en_bcgmon_loc;
+
+  max30001_en_int.bit.en_pint = 0b1 & en_pint_loc;
+  max30001_en_int.bit.en_povf = 0b1 & en_povf_loc;
+  max30001_en_int.bit.en_pedge = 0b1 & en_pedge_loc;
+
+  max30001_en_int.bit.en_lonint = 0b1 & en_lonint_loc;
+  max30001_en_int.bit.en_rrint = 0b1 & en_rrint_loc;
+  max30001_en_int.bit.en_samp = 0b1 & en_samp_loc;
+
+  max30001_en_int.bit.intb_type = intb_Type;
+
+  if (max30001_reg_write(EN_INT, max30001_en_int.all) == -1) {
+    return -1;
+  }
+
+  // INT2
+
+  if (max30001_reg_read(EN_INT2, &max30001_en_int2.all) == -1) {
+    return -1;
+  }
+
+  max30001_en_int2.bit.en_eint   = 0b1 & (en_enint_loc >> 1);
+  max30001_en_int2.bit.en_eovf   = 0b1 & (en_eovf_loc >> 1);
+  max30001_en_int2.bit.en_fstint = 0b1 & (en_fstint_loc >> 1);
+
+  max30001_en_int2.bit.en_dcloffint = 0b1 & (en_dcloffint_loc >> 1);
+  max30001_en_int2.bit.en_bint      = 0b1 & (en_bint_loc >> 1);
+  max30001_en_int2.bit.en_bovf      = 0b1 & (en_bovf_loc >> 1);
+
+  max30001_en_int2.bit.en_bover  = 0b1 & (en_bover_loc >> 1);
+  max30001_en_int2.bit.en_bundr  = 0b1 & (en_bundr_loc >> 1);
+  max30001_en_int2.bit.en_bcgmon = 0b1 & (en_bcgmon_loc >> 1);
+
+  max30001_en_int2.bit.en_pint  = 0b1 & (en_pint_loc >> 1);
+  max30001_en_int2.bit.en_povf  = 0b1 & (en_povf_loc >> 1);
+  max30001_en_int2.bit.en_pedge = 0b1 & (en_pedge_loc >> 1);
+
+  max30001_en_int2.bit.en_lonint = 0b1 & (en_lonint_loc >> 1);
+  max30001_en_int2.bit.en_rrint  = 0b1 & (en_rrint_loc >> 1);
+  max30001_en_int2.bit.en_samp   = 0b1 & (en_samp_loc >> 1);
+
+  max30001_en_int2.bit.intb_type = int2b_Type;
+
+  if (max30001_reg_write(EN_INT2, max30001_en_int2.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp,
+                                     uint8_t Openn, uint8_t Pol,
+                                     uint8_t Calp_sel, uint8_t Caln_sel,
+                                     uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+                                     uint8_t Dhpf, uint8_t Dlpf) {
+
+  // CNFG_EMUX
+
+  pr_info("MAX30001::max30001_ECG_InitStart\r\n");
+  if (max30001_reg_read(CNFG_EMUX, &max30001_cnfg_emux.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_emux.bit.openp    = Openp;
+  max30001_cnfg_emux.bit.openn    = Openn;
+  max30001_cnfg_emux.bit.pol      = Pol;
+  max30001_cnfg_emux.bit.calp_sel = Calp_sel;
+  max30001_cnfg_emux.bit.caln_sel = Caln_sel;
+
+  if (max30001_reg_write(CNFG_EMUX, max30001_cnfg_emux.all) == -1) {
+    return -1;
+  }
+
+  /**** ENABLE CHANNELS ****/
+  // CNFG_GEN
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_ecg = En_ecg; // 0b1
+
+  // fmstr is default
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  /**** Wait for PLL Lock & References to settle down ****/
+
+  max30001_timeout = 0;
+
+  do {
+    if (max30001_reg_read(STATUS, &max30001_status.all) == -1) // Wait and spin for PLL to lock...
+    {
+      return -1;
+    }
+  } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
+
+  // MNGR_INT
+
+  if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_int.bit.e_fit = E_fit; // 31
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  // CNFG_ECG
+
+  if (max30001_reg_read(CNFG_ECG, &max30001_cnfg_ecg.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_ecg.bit.rate = Rate;
+  max30001_cnfg_ecg.bit.gain = Gain;
+  max30001_cnfg_ecg.bit.dhpf = Dhpf;
+  max30001_cnfg_ecg.bit.dlpf = Dlpf;
+
+  if (max30001_reg_write(CNFG_ECG, max30001_cnfg_ecg.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_ECGFast_Init(uint8_t Clr_Fast, uint8_t Fast, uint8_t Fast_Th) {
+  if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  pr_info("MAX30001::max30001_ECGFast_Init\r\n");
+  max30001_mngr_int.bit.clr_fast = Clr_Fast;
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_dyn.bit.fast = Fast;
+  max30001_mngr_dyn.bit.fast_th = Fast_Th;
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_Stop_ECG(void) {
+
+  pr_info("MAX30001::max30001_Stop_ECG\r\n");
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_ecg = 0; // Stop ECG
+
+  // fmstr is default
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_PACE_InitStart(uint8_t En_pace, uint8_t Clr_pedge,
+                                      uint8_t Pol, uint8_t Gn_diff_off,
+                                      uint8_t Gain, uint8_t Aout_lbw,
+                                      uint8_t Aout, uint8_t Dacp,
+                                      uint8_t Dacn) {
+
+  /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
+
+  // CNFG_GEN
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_pace = En_pace; // 0b1;
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  /**** Wait for PLL Lock & References to settle down ****/
+  max30001_timeout = 0;
+
+  do {
+    if (max30001_reg_read(STATUS, &max30001_status.all) ==
+        -1) // Wait and spin for PLL to lock...
+    {
+      return -1;
+    }
+
+  } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
+
+  // MNGR_INT
+
+  if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_int.bit.clr_pedge = Clr_pedge; // 0b0;
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  /* Put: CNFG_PACE */
+
+  max30001_reg_read(CNFG_PACE, &max30001_cnfg_pace.all);
+
+  max30001_cnfg_pace.bit.pol         = Pol;
+  max30001_cnfg_pace.bit.gn_diff_off = Gn_diff_off;
+  max30001_cnfg_pace.bit.gain        = Gain;
+  max30001_cnfg_pace.bit.aout_lbw    = Aout_lbw;
+  max30001_cnfg_pace.bit.aout        = Aout;
+  max30001_cnfg_pace.bit.dacp        = Dacp;
+  max30001_cnfg_pace.bit.dacn        = Dacn;
+
+  max30001_reg_write(CNFG_PACE, max30001_cnfg_pace.all);
+
+  return 0;
+}
+//******************************************************************************
+int MAX30001::max30001_Stop_PACE(void) {
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_pace = 0; // Stop PACE
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_BIOZ_InitStart(
+    uint8_t En_bioz, uint8_t Openp, uint8_t Openn, uint8_t Calp_sel,
+    uint8_t Caln_sel, uint8_t CG_mode, uint8_t B_fit, uint8_t Rate,
+    uint8_t Ahpf, uint8_t Ext_rbias, uint8_t Gain, uint8_t Dhpf, uint8_t Dlpf,
+    uint8_t Fcgen, uint8_t Cgmon, uint8_t Cgmag, uint8_t Phoff, uint8_t Inapow_mode) {
+
+  // CNFG_BMUX
+
+  if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_bmux.bit.openp    = Openp;       // 0b1;
+  max30001_cnfg_bmux.bit.openn    = Openn;       // 0b1;
+  max30001_cnfg_bmux.bit.calp_sel = Calp_sel; // 0b10;
+  max30001_cnfg_bmux.bit.caln_sel = Caln_sel; // 0b11;
+  max30001_cnfg_bmux.bit.cg_mode  = CG_mode;   // 0b00;
+
+  if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
+    return -1;
+  }
+
+  /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
+
+  // CNFG_GEN
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_bioz = En_bioz;
+
+  // fmstr is default
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  /**** Wait for PLL Lock & References to settle down ****/
+
+  max30001_timeout = 0;
+
+  do {
+    if (max30001_reg_read(STATUS, &max30001_status.all) ==
+        -1) // Wait and spin for PLL to lock...
+    {
+      return -1;
+    }
+
+  } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
+
+  /**** Start of CNFG_BIOZ ****/
+
+  // MNGR_INT
+
+  if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_int.bit.b_fit = B_fit; //;
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  // CNFG_BIOZ
+
+  if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_bioz.bit.rate      = Rate;
+  max30001_cnfg_bioz.bit.ahpf      = Ahpf;
+  max30001_cnfg_bioz.bit.ext_rbias = Ext_rbias;
+  max30001_cnfg_bioz.bit.gain      = Gain;
+  max30001_cnfg_bioz.bit.dhpf      = Dhpf;
+  max30001_cnfg_bioz.bit.dlpf      = Dlpf;
+  max30001_cnfg_bioz.bit.fcgen     = Fcgen;
+  max30001_cnfg_bioz.bit.cgmon     = Cgmon;
+  max30001_cnfg_bioz.bit.cgmag     = Cgmag;
+  max30001_cnfg_bioz.bit.phoff     = Phoff;
+  max30001_cnfg_bioz.bit.inapow_mode = Inapow_mode;
+
+  if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_Stop_BIOZ(void) {
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_bioz = 0; // Stop BIOZ
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_BIOZ_InitBist(uint8_t En_bist, uint8_t Rnom,
+                                     uint8_t Rmod, uint8_t Fbist) {
+
+  // CNFG_BMUX
+
+  if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_bmux.bit.en_bist = En_bist;
+  max30001_cnfg_bmux.bit.rnom = Rnom;
+  max30001_cnfg_bmux.bit.rmod = Rmod;
+  max30001_cnfg_bmux.bit.fbist = Fbist;
+
+  if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+//******************************************************************************
+int MAX30001::max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw,
+                                      uint8_t Gain, uint8_t Pavg, uint8_t Ptsf,
+                                      uint8_t Hoff, uint8_t Ravg, uint8_t Rhsf,
+                                      uint8_t Clr_rrint) {
+
+  // MNGR_INT
+
+  if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_int.bit.clr_rrint =
+      Clr_rrint; // 0b01 & 0b00 are for interrupt mode...
+  // 0b10 is for monitoring mode... it just overwrites the data...
+
+  if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
+    return -1;
+  }
+
+  // RTOR1
+  if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_rtor1.bit.wndw = Wndw;
+  max30001_cnfg_rtor1.bit.gain = Gain;
+  max30001_cnfg_rtor1.bit.en_rtor = En_rtor;
+  max30001_cnfg_rtor1.bit.pavg = Pavg;
+  max30001_cnfg_rtor1.bit.ptsf = Ptsf;
+
+  if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
+    return -1;
+  }
+  // RTOR2
+
+  if (max30001_reg_read(CNFG_RTOR2, &max30001_cnfg_rtor2.all) == -1) {
+    return -1;
+  }
+  max30001_cnfg_rtor2.bit.hoff = Hoff;
+  max30001_cnfg_rtor2.bit.ravg = Ravg;
+  max30001_cnfg_rtor2.bit.rhsf = Rhsf;
+
+  if (max30001_reg_write(CNFG_RTOR2, max30001_cnfg_rtor2.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_Stop_RtoR(void) {
+
+  if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_rtor1.bit.en_rtor = 0; // Stop RtoR
+
+  if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_PLL_lock(void) {
+  // Spin to see PLLint become zero to indicate a lock.
+
+  max30001_timeout = 0;
+
+  do {
+    if (max30001_reg_read(STATUS, &max30001_status.all) ==
+        -1) // Wait and spin for PLL to lock...
+    {
+      return -1;
+    }
+
+  } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_sw_rst(void) {
+  // SW reset for the MAX30001 chip
+
+  if (max30001_reg_write(SW_RST, 0x000000) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_synch(void) { // For synchronization
+  if (max30001_reg_write(SYNCH, 0x000000) == -1) {
+    return -1;
+  }
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max300001_fifo_rst(void) { // Resets the FIFO
+  if (max30001_reg_write(FIFO_RST, 0x000000) == -1) {
+    return -1;
+  }
+  return 0;
+}
+
+//******************************************************************************
+// int MAX30001::max30001_reg_write(uint8_t addr, uint32_t data)
+int MAX30001::max30001_reg_write(MAX30001_REG_map_t addr, uint32_t data) {
+
+  uint8_t result[4];
+  uint8_t data_array[4];
+  int32_t success = 0;
+
+  data_array[0] = (addr << 1) & 0xff;
+
+  data_array[3] = data & 0xff;
+  data_array[2] = (data >> 8) & 0xff;
+  data_array[1] = (data >> 16) & 0xff;
+
+  success = SPI_Transmit(&data_array[0], 4, &result[0], 4);
+
+  //pr_info("MAX30001 write\treg[0x%.2X]=0x%X\r\n", addr, data);
+
+  if (success != 0) {
+    return -1;
+  } else {
+    return 0;
+  }
+}
+
+//******************************************************************************
+// int MAX30001::max30001_reg_read(uint8_t addr, uint32_t *return_data)
+int MAX30001::max30001_reg_read(MAX30001_REG_map_t addr,
+                                uint32_t *return_data) {
+  uint8_t result[4];
+  uint8_t data_array[1];
+  int32_t success = 0;
+
+  data_array[0] = ((addr << 1) & 0xff) | 1; // For Read, Or with 1
+  success = SPI_Transmit(&data_array[0], 1, &result[0], 4);
+  *return_data = /*result[0] + */ (uint32_t)(result[1] << 16) +
+                 (result[2] << 8) + result[3];
+
+  //pr_info("MAX30001 read\treg[0x%.2X]=0x%X\r\n", addr, *return_data);
+
+  if (success != 0) {
+    return -1;
+  } else {
+    return 0;
+  }
+}
+
+//******************************************************************************
+int MAX30001::max30001_Enable_DcLeadOFF_Init(int8_t En_dcloff, int8_t Ipol,
+                                             int8_t Imag, int8_t Vth) {
+  //  the leads are not touching the body
+
+  // CNFG_EMUX, Set ECGP and ECGN for external hook up...
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_dcloff = En_dcloff;
+  max30001_cnfg_gen.bit.ipol = Ipol;
+  max30001_cnfg_gen.bit.imag = Imag;
+  max30001_cnfg_gen.bit.vth = Vth;
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_Disable_DcLeadOFF(void) {
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_dcloff = 0; // Turned off the dc lead off.
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_BIOZ_Enable_ACLeadOFF_Init(uint8_t En_bloff,
+                                                  uint8_t Bloff_hi_it,
+                                                  uint8_t Bloff_lo_it) {
+
+  // CNFG_GEN
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_bloff = En_bloff;
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  // MNGR_DYN
+  if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
+    return -1;
+  }
+
+  max30001_mngr_dyn.bit.bloff_hi_it = Bloff_hi_it;
+  max30001_mngr_dyn.bit.bloff_lo_it = Bloff_lo_it;
+
+  if (max30001_reg_write(MNGR_DYN, max30001_mngr_dyn.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_BIOZ_Disable_ACleadOFF(void) {
+  // CNFG_GEN
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_bloff = 0b0; // Turns of the BIOZ AC Lead OFF feature
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+
+//******************************************************************************
+int MAX30001::max30001_BIOZ_Enable_BCGMON(void) {
+  // CNFG_BIOZ
+  if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_bioz.bit.cgmon = 1;
+
+  if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
+    return -1;
+  }
+
+  max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all);
+
+  return 0;
+}
+
+#if 1
+//******************************************************************************
+int MAX30001::max30001_Enable_LeadON(int8_t Channel) // Channel: ECG = 0b01, BIOZ = 0b10, Disable = 0b00
+{
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_ecg  = 0b0;
+  max30001_cnfg_gen.bit.en_bioz = 0b0;
+  max30001_cnfg_gen.bit.en_pace = 0b0;
+
+  max30001_cnfg_gen.bit.en_ulp_lon = Channel; // BIOZ ULP lead on detection...
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all);
+
+  max30001_reg_read(STATUS, &max30001_status.all);
+
+  return 0;
+}
+//******************************************************************************
+int MAX30001::max30001_Disable_LeadON(void) {
+
+  if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  max30001_cnfg_gen.bit.en_ulp_lon = 0b0;
+
+  if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
+    return -1;
+  }
+
+  return 0;
+}
+#endif
+//******************************************************************************
+#define LEADOFF_SERVICE_TIME 0x2000 // 0x1000 = 1 second
+#define LEADOFF_NUMSTATES 2
+uint32_t leadoffState = 0;
+uint32_t max30001_LeadOffoldTime = 0;
+void MAX30001::max30001_ServiceLeadoff(uint32_t currentTime) {
+
+  uint32_t delta_Time;
+
+  delta_Time = currentTime - max30001_LeadOffoldTime;
+
+  if (delta_Time > LEADOFF_SERVICE_TIME) {
+    switch (leadoffState) {
+    case 0: /* switch to ECG DC Lead OFF */
+      max30001_Enable_DcLeadOFF_Init(0b01, 0b0, 0b001, 0b00);
+      break;
+
+    case 1: /* switch to BIOZ DC Lead OFF */
+      max30001_Enable_DcLeadOFF_Init(0b10, 0b0, 0b001, 0b00);
+      break;
+    }
+
+    leadoffState++;
+    leadoffState %= LEADOFF_NUMSTATES;
+
+    max30001_LeadOffoldTime = currentTime;
+  }
+}
+//******************************************************************************
+#define LEADON_SERVICE_TIME 0x2000 // 0x1000 = 1 second
+#define LEADON_NUMSTATES 2
+uint32_t leadOnState = 0;
+uint32_t max30001_LeadOnoldTime = 0;
+void MAX30001::max30001_ServiceLeadON(uint32_t currentTime) {
+
+  uint32_t delta_Time;
+
+  delta_Time = currentTime - max30001_LeadOnoldTime;
+
+  if (delta_Time > LEADON_SERVICE_TIME) {
+    switch (leadOnState) {
+    case 0: /* switch to ECG DC Lead ON */
+      max30001_Enable_LeadON(0b01);
+      break;
+
+    case 1: /* switch to BIOZ DC Lead ON */
+      max30001_Enable_LeadON(0b10);
+      break;
+    }
+
+    leadOnState++;
+    leadOnState %= LEADON_NUMSTATES;
+
+    max30001_LeadOnoldTime = currentTime;
+  }
+}
+
+//******************************************************************************
+int MAX30001::max30001_FIFO_LeadONOff_Read(void) {
+
+  uint8_t result[32 * 3]; // 32words - 3bytes each
+  uint8_t paceResult[6 * 3];
+  uint8_t data_array[4];
+  int32_t success = 0;
+  int i, j;
+
+  uint32_t total_databytes;
+  uint8_t i_index;
+  uint8_t data_chunk;
+  uint8_t loop_logic;
+
+  uint8_t etag = 0;
+  uint8_t ptag = 0;
+  uint8_t btag = 0;
+
+  uint8_t adr;
+
+  //int8_t ReadAllPaceOnce;
+  bool anyPaceDetected = false;
+  static uint8_t dcloffint_OneShot = 0;
+  static uint8_t acloffint_OneShot = 0;
+  static uint8_t bcgmon_OneShot = 0;
+  static uint8_t acleadon_OneShot = 0;
+
+  int8_t ret_val;
+
+  pr_info("MAX30001::max30001_FIFO_LeadONOff_Read\r\n");
+
+  if (max30001_status.bit.eint == 1) {
+    adr = ECG_FIFO_BURST;
+    data_array[0] = ((adr << 1) & 0xff) | 1;
+
+    // The SPI routine only sends out data of 32 bytes in size.  Therefore the
+    // data is being read in
+    // smaller chunks in this routine...
+
+    total_databytes = (max30001_mngr_int.bit.e_fit + 1) * 3;
+
+    i_index = 0;
+    loop_logic = 1;
+
+    while (loop_logic) {
+      if (total_databytes > 30) {
+        data_chunk = 30;
+        total_databytes = total_databytes - 30;
+      } else {
+        data_chunk = total_databytes;
+        loop_logic = 0;
+      }
+
+      /* The extra 1 byte is for the extra byte that comes out of the SPI */
+      success = SPI_Transmit(&data_array[0], 1, &result[i_index], (data_chunk + 1)); // Make a copy of the FIFO over here...
+
+      if (success != 0) {
+        return -1;
+      }
+
+      /* This is important, because every transaction above creates an empty
+       * redundant data at result[0] */
+      for (j = i_index; j < (data_chunk + i_index); j++) /* get rid of the 1 extra byte by moving the whole array up one */
+      {
+        result[j] = result[j + 1];
+      }
+
+      i_index = i_index + 30; /* point to the next array location to put the data in */
+    }
+
+    //ReadAllPaceOnce = 0;
+
+    /* Put the content of the FIFO based on the EFIT value, We ignore the
+     * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 -  */
+    for (i = 0, j = 0; i < max30001_mngr_int.bit.e_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
+    {
+      max30001_ECG_FIFO_buffer[i] = ((uint32_t)result[j] << 16) + (result[j + 1] << 8) + result[j + 2];
+
+      etag = (0b00111000 & result[j + 2]) >> 3;
+      ptag = 0b00000111 & result[j + 2];
+
+      if (ptag != 0b111 ){//&& ReadAllPaceOnce == 0) {
+
+        //ReadAllPaceOnce = 1; // This will prevent extra read of PACE, once group
+                             // 0-5 is read ONCE.
+		readPace(ptag, paceResult); // BUG: result data from ECG is being overwritten by the PACE data
+	anyPaceDetected = true;
+      }
+    }
+
+    if (anyPaceDetected)
+      dataAvailable(MAX30001_DATA_PACE, max30001_PACE, 18); // Send out the Pace data once only
+
+    if (etag != 0b110) {
+
+      dataAvailable(MAX30001_DATA_ECG, max30001_ECG_FIFO_buffer, (max30001_mngr_int.bit.e_fit + 1));
+    }
+
+  } /* End of ECG init */
+
+  /* RtoR */
+
+  if (max30001_status.bit.rrint == 1) {
+    if (max30001_reg_read(RTOR, &max30001_RtoR_data) == -1) {
+      return -1;
+    }
+
+    max30001_RtoR_data = (0x00FFFFFF & max30001_RtoR_data) >> 10;
+
+    hspValMax30001.R2R = (uint16_t)max30001_RtoR_data;
+    hspValMax30001.fmstr = (uint16_t)max30001_cnfg_gen.bit.fmstr;
+
+    dataAvailable(MAX30001_DATA_RTOR, &max30001_RtoR_data, 1);
+  }
+
+  // Handling BIOZ data...
+
+  if (max30001_status.bit.bint == 1) {
+    adr = 0x22;
+    data_array[0] = ((adr << 1) & 0xff) | 1;
+
+    /* [(BFIT+1)*3byte]+1extra byte due to the addr */
+
+    if (SPI_Transmit(&data_array[0], 1, &result[0],((max30001_mngr_int.bit.b_fit + 1) * 3) + 1) == -1) // Make a copy of the FIFO over here...
+
+    {
+      return -1;
+    }
+
+    btag = 0b00000111 & result[3];
+
+    /* Put the content of the FIFO based on the BFIT value, We ignore the
+     * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 -  */
+    for (i = 0, j = 0; i < max30001_mngr_int.bit.b_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
+    {
+      max30001_BIOZ_FIFO_buffer[i] = ((uint32_t)result[j + 1] << 16) + (result[j + 2] << 8) + result[j + 3];
+    }
+
+    if (btag != 0b110) {
+      dataAvailable(MAX30001_DATA_BIOZ, max30001_BIOZ_FIFO_buffer, 8);
+    }
+  }
+
+  ret_val = 0;
+
+  if (max30001_status.bit.dcloffint == 1) // ECG/BIOZ Lead Off
+  {
+    dcloffint_OneShot = 1;
+    max30001_DCLeadOff = 0;
+    max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
+    dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
+
+    ret_val = 0b100;
+
+  } else if (dcloffint_OneShot == 1 && max30001_status.bit.dcloffint == 0) // Just send once when it comes out of dc lead off
+  {
+    max30001_DCLeadOff = 0;
+    max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
+    dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
+    dcloffint_OneShot = 0;
+  }
+
+  if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) // BIOZ AC Lead Off
+  {
+    acloffint_OneShot = 1;
+    max30001_ACLeadOff = 0;
+    max30001_ACLeadOff =
+        max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
+    dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
+
+    ret_val = 0b1000;
+  } else if (acloffint_OneShot == 1 && max30001_status.bit.bover == 0 && max30001_status.bit.bundr == 0) // Just send once when it comes out of ac lead off
+  {
+    max30001_ACLeadOff = 0;
+    max30001_ACLeadOff = max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
+    dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
+    acloffint_OneShot = 0;
+  }
+
+  if (max30001_status.bit.bcgmon == 1) // BIOZ BCGMON check
+  {
+    bcgmon_OneShot = 1;
+    max30001_bcgmon = 0;
+    max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
+    dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
+
+    ret_val = 0b10000;
+  } else if (bcgmon_OneShot == 1 && max30001_status.bit.bcgmon == 0) {
+    max30001_bcgmon = 0;
+    max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
+    bcgmon_OneShot = 0;
+    dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
+  }
+
+#if 0
+if(max30001_status.bit.lonint == 1)   // AC LeadON Check
+{
+	max30001_LeadOn = 0;
+	max30001_reg_read(STATUS,&max30001_status.all);        // Reading is important
+	max30001_LeadOn = max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11);  // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
+    // LEAD ON has been detected... Now take actions
+}
+#endif
+
+  if (max30001_status.bit.lonint == 1 &&
+      acleadon_OneShot == 0) // AC LeadON Check, when lead is on
+  {
+    max30001_LeadOn = 0;
+    max30001_reg_read(STATUS, &max30001_status.all); // Reading is important
+    max30001_LeadOn =
+        max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) |
+        ((max30001_status.all & 0x000800) >>
+         11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
+
+    // LEAD ON has been detected... Now take actions
+    acleadon_OneShot = 1;
+    dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
+  } else if (max30001_status.bit.lonint == 0 && acleadon_OneShot == 1) {
+    max30001_LeadOn = 0;
+    max30001_reg_read(STATUS, &max30001_status.all);
+    max30001_LeadOn =
+        max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
+    dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
+    acleadon_OneShot = 0;
+  }
+
+  return ret_val;
+}
+
+//******************************************************************************
+uint32_t MAX30001::readPace(int group, uint8_t* result) {
+  uint8_t data_array[4];
+  uint32_t success;
+  int adr = PACE0_FIFO_BURST + group*4;
+
+  if (group >= 6)
+    return (uint32_t)-1;
+
+  data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
+  success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
+
+  max30001_PACE[group * 3 + 0] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
+  max30001_PACE[group * 3 + 1] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
+  max30001_PACE[group * 3 + 2] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
+
+  return success;
+}
+
+//******************************************************************************
+
+//******************************************************************************
+
+int MAX30001::max30001_int_handler(void) {
+
+  static uint32_t InitReset = 0;
+
+  int8_t return_value;
+  bool check_one_more = true;
+
+  status_check:
+  max30001_reg_read(STATUS, &max30001_status.all);
+
+  // Inital Reset and any FIFO over flow invokes a FIFO reset
+  if (InitReset == 0 || max30001_status.bit.eovf == 1 || max30001_status.bit.bovf == 1) {
+    // Do a FIFO Reset
+    max30001_reg_write(FIFO_RST, 0x000000);
+
+    InitReset++;
+    return 2;
+  }
+
+  return_value = 0;
+
+  // The four data handling goes on over here
+  if (max30001_status.bit.eint == 1 || max30001_status.bit.pint == 1 || max30001_status.bit.bint == 1 || max30001_status.bit.rrint == 1
+	|| max30001_status.bit.dcloffint == 1 || max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1
+	|| max30001_status.bit.bcgmon == 1 || max30001_status.bit.lonint == 1) {
+    return_value = return_value | max30001_FIFO_LeadONOff_Read();
+  }
+/*
+  // ECG/BIOZ DC Lead Off test
+  if (max30001_status.bit.dcloffint == 1) {
+    return_value = return_value | max30001_FIFO_LeadONOff_Read();
+  }
+
+  // BIOZ AC Lead Off test
+  if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) {
+    return_value = return_value | max30001_FIFO_LeadONOff_Read();
+  }
+
+  // BIOZ DRVP/N test using BCGMON.
+  if (max30001_status.bit.bcgmon == 1) {
+    return_value = return_value | max30001_FIFO_LeadONOff_Read();
+  }
+
+  if (max30001_status.bit.lonint == 1) // ECG Lead ON test: i.e. the leads are touching the body...
+  {
+
+    max30001_FIFO_LeadONOff_Read();
+  }
+*/
+  if (check_one_more) {
+    check_one_more = false;
+    goto status_check;
+  }
+  return return_value;
+}
+
+/// function pointer to the async callback
+static event_callback_t functionpointer;
+/// flag used to indicate an async xfer has taken place
+static volatile int xferFlag = 0;
+
+/**
+* @brief Callback handler for SPI async events
+* @param events description of event that occurred
+*/
+
+
+static void spiHandler(int events) { xferFlag = 1; }
+
+/**
+* @brief Transmit and recieve QUAD SPI data
+* @param tx_buf pointer to transmit byte buffer
+* @param tx_size number of bytes to transmit
+* @param rx_buf pointer to the recieve buffer
+* @param rx_size number of bytes to recieve
+*/
+int MAX30001::SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, uint8_t *rx_buf, uint32_t rx_size)
+{
+    m_cs->write(0);
+    for(uint32_t i = 0; i < tx_size; i++)
+    {
+        m_spi->write(tx_buf[i]);
+    }
+    for(uint32_t i = 0; i < (rx_size - tx_size); i++)
+    {
+	rx_buf[i + 1] = m_spi->write(0xFF);
+    }
+    m_cs->write(1);
+
+    return 0;
+}
+
+//******************************************************************************
+void MAX30001::max30001_ReadHeartrateData(max30001_t *_hspValMax30001) {
+  _hspValMax30001->R2R = hspValMax30001.R2R;
+  _hspValMax30001->fmstr = hspValMax30001.fmstr;
+}
+
+//******************************************************************************
+void MAX30001::onDataAvailable(PtrFunction _onDataAvailable) {
+  onDataAvailableCallback = _onDataAvailable;
+}
+
+/**
+* @brief Used to notify an external function that interrupt data is available
+* @param id type of data available
+* @param buffer 32-bit buffer that points to the data
+* @param length length of 32-bit elements available
+*/
+void MAX30001::dataAvailable(uint32_t id, uint32_t *buffer, uint32_t length) {
+  if (onDataAvailableCallback != NULL) {
+    (*onDataAvailableCallback)(id, buffer, length);
+  }
+}
+/**
+* @brief Callback handler for SPI async events
+* @param events description of event that occurred
+*/
+void MAX30001::spiHandler(int events) { xferFlag = 1; }
+
+//******************************************************************************
+static int allowInterrupts = 0;
+
+void MAX30001Mid_IntB_Handler(void) {
+	if (allowInterrupts == 0) return;
+	//MAX30001::instance->max30001_int_handler();
+	MAX30001::instance->m_max30001_int_happened_ = true;
+}
+
+void MAX30001Mid_Int2B_Handler(void) {
+	if (allowInterrupts == 0) return;
+	//MAX30001::instance->max30001_int_handler();
+	MAX30001::instance->m_max30001_int_happened_ = true;
+}
+
+void MAX30001_AllowInterrupts(int state) {
+	allowInterrupts = state;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30001/MAX30001.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1089 @@
+/*******************************************************************************
+* Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************/
+/*
+ * max30001.h
+ *
+ *  Created on: Oct 9, 2015
+ *      Author: faisal.tariq
+ */
+
+#ifndef MAX30001_H_
+#define MAX30001_H_
+
+#include "mbed.h"
+#include "USBSerial.h"
+
+#define mbed_COMPLIANT // Uncomment to Use timer for MAX30001 FCLK (for mbed)
+                       // Comment to use the RTC clock
+
+
+
+#define ASYNC_SPI_BUFFER_SIZE (32 * 3) // Maximimum buffer size for async byte transfers
+
+// Defines for data callbacks
+#define MAX30001_DATA_ECG        0x30
+#define MAX30001_DATA_PACE       0x31
+#define MAX30001_DATA_RTOR       0x32
+#define MAX30001_DATA_BIOZ       0x33
+#define MAX30001_DATA_LEADOFF_DC 0x34
+#define MAX30001_DATA_LEADOFF_AC 0x35
+#define MAX30001_DATA_BCGMON     0x36
+#define MAX30001_DATA_ACLEADON   0x37
+
+#define MAX30001_SPI_MASTER_PORT 0
+#define MAX30001_SPI_SS_INDEX    0
+
+#define MAX30001_INT_PORT_B      3
+#define MAX30001_INT_PIN_B       6
+
+#define MAX30001_INT_PORT_2B     4
+#define MAX30001_INT_PIN_2B      5
+
+#define MAX30001_INT_PORT_FCLK   1
+#define MAX30001_INT_PIN_FCLK    7
+
+#define MAX30001_FUNC_SEL_TMR    2 // 0=FW Control, 1= Pulse Train, 2=Timer
+
+#define MAX30001_INDEX    3
+#define MAX30001_POLARITY 0
+#define MAX30001_PERIOD   30518
+#define MAX30001_CYCLE    50
+
+#define MAX30001_IOMUX_IO_ENABLE 1
+
+#define MAX30001_SPI_PORT            0
+#define MAX30001_CS_PIN              0
+#define MAX30001_CS_POLARITY         0
+#define MAX30001_CS_ACTIVITY_DELAY   0
+#define MAX30001_CS_INACTIVITY_DELAY 0
+#define MAX30001_CLK_HI              1
+#define MAX30001_CLK_LOW             1
+#define MAX30001_ALT_CLK             0
+#define MAX30001_CLK_POLARITY        0
+#define MAX30001_CLK_PHASE           0
+#define MAX30001_WRITE               1
+#define MAX30001_READ                0
+
+#define MAX30001_INT_PORT_B  3
+#define MAX30001INT_PIN_B    6
+
+void MAX30001_AllowInterrupts(int state);
+
+/**
+* Maxim Integrated MAX30001 ECG/BIOZ chip
+*/
+class MAX30001 {
+
+public:
+  typedef enum { // MAX30001 Register addresses
+    STATUS     = 0x01,
+    EN_INT     = 0x02,
+    EN_INT2    = 0x03,
+    MNGR_INT   = 0x04,
+    MNGR_DYN   = 0x05,
+    SW_RST     = 0x08,
+    SYNCH      = 0x09,
+    FIFO_RST   = 0x0A,
+    INFO       = 0x0F,
+    CNFG_GEN   = 0x10,
+    CNFG_CAL   = 0x12,
+    CNFG_EMUX  = 0x14,
+    CNFG_ECG   = 0x15,
+    CNFG_BMUX  = 0x17,
+    CNFG_BIOZ  = 0x18,
+    CNFG_PACE  = 0x1A,
+    CNFG_RTOR1 = 0x1D,
+    CNFG_RTOR2 = 0x1E,
+
+    // Data locations
+    ECG_FIFO_BURST = 0x20,
+    ECG_FIFO       = 0x21,
+    FIFO_BURST     = 0x22,
+    BIOZ_FIFO      = 0x23,
+    RTOR           = 0x25,
+
+    PACE0_FIFO_BURST = 0x30,
+    PACE0_A          = 0x31,
+    PACE0_B          = 0x32,
+    PACE0_C          = 0x33,
+
+    PACE1_FIFO_BURST = 0x34,
+    PACE1_A          = 0x35,
+    PACE1_B          = 0x36,
+    PACE1_C          = 0x37,
+
+    PACE2_FIFO_BURST = 0x38,
+    PACE2_A          = 0x39,
+    PACE2_B          = 0x3A,
+    PACE2_C          = 0x3B,
+
+    PACE3_FIFO_BURST = 0x3C,
+    PACE3_A          = 0x3D,
+    PACE3_B          = 0x3E,
+    PACE3_C          = 0x3F,
+
+    PACE4_FIFO_BURST = 0x40,
+    PACE4_A          = 0x41,
+    PACE4_B          = 0x42,
+    PACE4_C          = 0x43,
+
+    PACE5_FIFO_BURST = 0x44,
+    PACE5_A          = 0x45,
+    PACE5_B          = 0x46,
+    PACE5_C          = 0x47,
+
+  } MAX30001_REG_map_t;
+
+  /**
+   * @brief STATUS (0x01)
+   */
+  union max30001_status_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t loff_nl : 1;
+      uint32_t loff_nh : 1;
+      uint32_t loff_pl : 1;
+      uint32_t loff_ph : 1;
+
+      uint32_t bcgmn     : 1;
+      uint32_t bcgmp     : 1;
+      uint32_t reserved1 : 1;
+      uint32_t reserved2 : 1;
+
+      uint32_t pllint : 1;
+      uint32_t samp   : 1;
+      uint32_t rrint  : 1;
+      uint32_t lonint : 1;
+
+      uint32_t pedge  : 1;
+      uint32_t povf   : 1;
+      uint32_t pint   : 1;
+      uint32_t bcgmon : 1;
+
+      uint32_t bundr : 1;
+      uint32_t bover : 1;
+      uint32_t bovf  : 1;
+      uint32_t bint  : 1;
+
+      uint32_t dcloffint : 1;
+      uint32_t fstint    : 1;
+      uint32_t eovf      : 1;
+      uint32_t eint      : 1;
+
+      uint32_t reserved : 8;
+
+    } bit;
+
+  } max30001_status;
+
+
+  /**
+   * @brief EN_INT (0x02)
+   */
+
+  union max30001_en_int_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t intb_type : 2;
+      uint32_t reserved1 : 1;
+      uint32_t reserved2 : 1;
+
+      uint32_t reserved3 : 1;
+      uint32_t reserved4 : 1;
+      uint32_t reserved5 : 1;
+      uint32_t reserved6 : 1;
+
+      uint32_t en_pllint : 1;
+      uint32_t en_samp   : 1;
+      uint32_t en_rrint  : 1;
+      uint32_t en_lonint : 1;
+
+      uint32_t en_pedge  : 1;
+      uint32_t en_povf   : 1;
+      uint32_t en_pint   : 1;
+      uint32_t en_bcgmon : 1;
+
+      uint32_t en_bundr : 1;
+      uint32_t en_bover : 1;
+      uint32_t en_bovf  : 1;
+      uint32_t en_bint  : 1;
+
+      uint32_t en_dcloffint : 1;
+      uint32_t en_fstint    : 1;
+      uint32_t en_eovf      : 1;
+      uint32_t en_eint      : 1;
+
+      uint32_t reserved : 8;
+
+    } bit;
+
+  } max30001_en_int;
+
+
+  /**
+   * @brief EN_INT2 (0x03)
+   */
+  union max30001_en_int2_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t intb_type : 2;
+      uint32_t reserved1 : 1;
+      uint32_t reserved2 : 1;
+
+      uint32_t reserved3 : 1;
+      uint32_t reserved4 : 1;
+      uint32_t reserved5 : 1;
+      uint32_t reserved6 : 1;
+
+      uint32_t en_pllint : 1;
+      uint32_t en_samp   : 1;
+      uint32_t en_rrint  : 1;
+      uint32_t en_lonint : 1;
+
+      uint32_t en_pedge  : 1;
+      uint32_t en_povf   : 1;
+      uint32_t en_pint   : 1;
+      uint32_t en_bcgmon : 1;
+
+      uint32_t en_bundr  : 1;
+      uint32_t en_bover  : 1;
+      uint32_t en_bovf   : 1;
+      uint32_t en_bint   : 1;
+
+      uint32_t en_dcloffint : 1;
+      uint32_t en_fstint    : 1;
+      uint32_t en_eovf      : 1;
+      uint32_t en_eint      : 1;
+
+      uint32_t reserved : 8;
+
+    } bit;
+
+  } max30001_en_int2;
+
+  /**
+   * @brief MNGR_INT (0x04)
+   */
+  union max30001_mngr_int_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t samp_it   : 2;
+      uint32_t clr_samp  : 1;
+      uint32_t clr_pedge : 1;
+      uint32_t clr_rrint : 2;
+      uint32_t clr_fast  : 1;
+      uint32_t reserved1 : 1;
+      uint32_t reserved2 : 4;
+      uint32_t reserved3 : 4;
+
+      uint32_t b_fit     : 3;
+      uint32_t e_fit     : 5;
+
+      uint32_t reserved : 8;
+
+    } bit;
+
+  } max30001_mngr_int;
+
+   /**
+   * @brief MNGR_DYN (0x05)
+   */
+  union max30001_mngr_dyn_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t bloff_lo_it : 8;
+      uint32_t bloff_hi_it : 8;
+      uint32_t fast_th     : 6;
+      uint32_t fast        : 2;
+      uint32_t reserved    : 8;
+    } bit;
+
+  } max30001_mngr_dyn;
+
+  // 0x08
+  // uint32_t max30001_sw_rst;
+
+  // 0x09
+  // uint32_t max30001_synch;
+
+  // 0x0A
+  // uint32_t max30001_fifo_rst;
+
+
+   /**
+   * @brief INFO (0x0F)
+   */
+  union max30001_info_reg {
+    uint32_t all;
+    struct {
+      uint32_t serial    : 12;
+      uint32_t part_id   : 2;
+      uint32_t sample    : 1;
+      uint32_t reserved1 : 1;
+      uint32_t rev_id    : 4;
+      uint32_t pattern   : 4;
+      uint32_t reserved  : 8;
+    } bit;
+
+  } max30001_info;
+
+   /**
+   * @brief CNFG_GEN (0x10)
+   */
+  union max30001_cnfg_gen_reg {
+    uint32_t all;
+    struct {
+      uint32_t rbiasn     : 1;
+      uint32_t rbiasp     : 1;
+      uint32_t rbiasv     : 2;
+      uint32_t en_rbias   : 2;
+      uint32_t vth        : 2;
+      uint32_t imag       : 3;
+      uint32_t ipol       : 1;
+      uint32_t en_dcloff  : 2;
+      uint32_t en_bloff   : 2;
+      uint32_t reserved1  : 1;
+      uint32_t en_pace    : 1;
+      uint32_t en_bioz    : 1;
+      uint32_t en_ecg     : 1;
+      uint32_t fmstr      : 2;
+      uint32_t en_ulp_lon : 2;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_gen;
+
+
+   /**
+   * @brief CNFG_CAL (0x12)
+   */
+  union max30001_cnfg_cal_reg {
+    uint32_t all;
+    struct {
+      uint32_t thigh     : 11;
+      uint32_t fifty     : 1;
+      uint32_t fcal      : 3;
+      uint32_t reserved1 : 5;
+      uint32_t vmag      : 1;
+      uint32_t vmode     : 1;
+      uint32_t en_vcal   : 1;
+      uint32_t reserved2 : 1;
+      uint32_t reserved  : 8;
+    } bit;
+
+  } max30001_cnfg_cal;
+
+   /**
+   * @brief CNFG_EMUX  (0x14)
+   */
+  union max30001_cnfg_emux_reg {
+    uint32_t all;
+    struct {
+      uint32_t reserved1 : 16;
+      uint32_t caln_sel  : 2;
+      uint32_t calp_sel  : 2;
+      uint32_t openn     : 1;
+      uint32_t openp     : 1;
+      uint32_t reserved2 : 1;
+      uint32_t pol       : 1;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_emux;
+
+
+   /**
+   * @brief CNFG_ECG   (0x15)
+   */
+  union max30001_cnfg_ecg_reg {
+    uint32_t all;
+    struct {
+      uint32_t reserved1 : 12;
+      uint32_t dlpf      : 2;
+      uint32_t dhpf      : 1;
+      uint32_t reserved2 : 1;
+      uint32_t gain      : 2;
+      uint32_t reserved3 : 4;
+      uint32_t rate      : 2;
+
+      uint32_t reserved  : 8;
+    } bit;
+
+  } max30001_cnfg_ecg;
+
+   /**
+   * @brief CNFG_BMUX   (0x17)
+   */
+  union max30001_cnfg_bmux_reg {
+    uint32_t all;
+    struct {
+      uint32_t fbist     : 2;
+      uint32_t reserved1 : 2;
+      uint32_t rmod      : 3;
+      uint32_t reserved2 : 1;
+      uint32_t rnom      : 3;
+      uint32_t en_bist   : 1;
+      uint32_t cg_mode   : 2;
+      uint32_t reserved3 : 2;
+      uint32_t caln_sel  : 2;
+      uint32_t calp_sel  : 2;
+      uint32_t openn     : 1;
+      uint32_t openp     : 1;
+      uint32_t reserved4 : 2;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_bmux;
+
+   /**
+   * @brief CNFG_BIOZ   (0x18)
+   */
+  union max30001_bioz_reg {
+    uint32_t all;
+    struct {
+      uint32_t phoff     : 4;
+      uint32_t cgmag     : 3;
+      uint32_t cgmon     : 1;
+      uint32_t fcgen     : 4;
+      uint32_t dlpf      : 2;
+      uint32_t dhpf      : 2;
+      uint32_t gain      : 2;
+      uint32_t inapow_mode : 1;
+      uint32_t ext_rbias : 1;
+      uint32_t ahpf      : 3;
+      uint32_t rate      : 1;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_bioz;
+
+
+   /**
+   * @brief CNFG_PACE   (0x1A)
+   */
+  union max30001_cnfg_pace_reg {
+    uint32_t all;
+
+    struct {
+      uint32_t dacn        : 4;
+      uint32_t dacp        : 4;
+      uint32_t reserved1   : 4;
+      uint32_t aout        : 2;
+      uint32_t aout_lbw    : 1;
+      uint32_t reserved2   : 1;
+      uint32_t gain        : 3;
+      uint32_t gn_diff_off : 1;
+      uint32_t reserved3   : 3;
+      uint32_t pol         : 1;
+      uint32_t reserved    : 8;
+    } bit;
+
+  } max30001_cnfg_pace;
+
+   /**
+   * @brief CNFG_RTOR1   (0x1D)
+   */
+  union max30001_cnfg_rtor1_reg {
+    uint32_t all;
+    struct {
+      uint32_t reserved1 : 8;
+      uint32_t ptsf      : 4;
+      uint32_t pavg      : 2;
+      uint32_t reserved2 : 1;
+      uint32_t en_rtor   : 1;
+      uint32_t gain      : 4;
+      uint32_t wndw      : 4;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_rtor1;
+
+   /**
+   * @brief CNFG_RTOR2 (0x1E)
+   */
+  union max30001_cnfg_rtor2_reg {
+    uint32_t all;
+    struct {
+      uint32_t reserved1 : 8;
+      uint32_t rhsf      : 3;
+      uint32_t reserved2 : 1;
+      uint32_t ravg      : 2;
+      uint32_t reserved3 : 2;
+      uint32_t hoff      : 6;
+      uint32_t reserved4 : 2;
+      uint32_t reserved : 8;
+    } bit;
+
+  } max30001_cnfg_rtor2;
+
+  /*********************************************************************************/
+
+  typedef enum {
+    MAX30001_NO_INT = 0, // No interrupt
+    MAX30001_INT_B  = 1,  // INTB selected for interrupt
+    MAX30001_INT_2B = 2  // INT2B selected for interrupt
+  } max30001_intrpt_Location_t;
+
+  typedef enum {
+    MAX30001_INT_DISABLED = 0b00,
+    MAX30001_INT_CMOS     = 0b01,
+    MAX30001_INT_ODN      = 0b10,
+    MAX30001_INT_ODNR     = 0b11
+  } max30001_intrpt_type_t;
+
+  typedef enum {          // Input Polarity selection
+    MAX30001_NON_INV = 0, // Non-Inverted
+    MAX30001_INV     = 1      // Inverted
+  } max30001_emux_pol;
+
+  typedef enum {              // OPENP and OPENN setting
+    MAX30001_ECG_CON_AFE = 0, // ECGx is connected to AFE channel
+    MAX30001_ECG_ISO_AFE = 1  // ECGx is isolated from AFE channel
+  } max30001_emux_openx;
+
+  typedef enum {                // EMUX_CALP_SEL & EMUX_CALN_SEL
+    MAX30001_NO_CAL_SIG = 0b00, // No calibration signal is applied
+    MAX30001_INPT_VMID  = 0b01,  // Input is connected to VMID
+    MAX30001_INPT_VCALP = 0b10, // Input is connected to VCALP
+    MAX30001_INPT_VCALN = 0b11  // Input is connected to VCALN
+  } max30001_emux_calx_sel;
+
+  typedef enum {                     // EN_ECG, EN_BIOZ, EN_PACE
+    MAX30001_CHANNEL_DISABLED = 0b0, //
+    MAX30001_CHANNEL_ENABLED = 0b1
+  } max30001_en_feature;
+
+  /*********************************************************************************/
+  // Data
+  uint32_t max30001_ECG_FIFO_buffer[32]; // (303 for internal test)
+  uint32_t max30001_BIOZ_FIFO_buffer[8]; // (303 for internal test)
+
+  uint32_t max30001_PACE[18]; // Pace Data 0-5
+
+  uint32_t max30001_RtoR_data; // This holds the RtoR data
+
+  uint32_t max30001_DCLeadOff; // This holds the LeadOff data, Last 4 bits give
+                               // the status, BIT3=LOFF_PH, BIT2=LOFF_PL,
+                               // BIT1=LOFF_NH, BIT0=LOFF_NL
+                               // 8th and 9th bits tell Lead off is due to ECG or BIOZ.
+                               // 0b01 = ECG Lead Off and 0b10 = BIOZ Lead off
+
+  uint32_t max30001_ACLeadOff; // This gives the state of the BIOZ AC Lead Off
+                               // state.  BIT 1 = BOVER,   BIT 0 = BUNDR
+
+  uint32_t max30001_bcgmon; // This holds the BCGMON data, BIT 1 = BCGMP, BIT0 =
+                            // BCGMN
+
+  uint32_t max30001_LeadOn; // This holds the LeadOn data, BIT1 = BIOZ Lead ON,
+                            // BIT0 = ECG Lead ON, BIT8= Lead On Status Bit
+
+  uint32_t max30001_timeout; // If the PLL does not respond, timeout and get out.
+
+  typedef struct { // Creating a structure for BLE data
+    int16_t R2R;
+    int16_t fmstr;
+  } max30001_t;
+
+  max30001_t hspValMax30001; // R2R, FMSTR
+
+  //jjj 14MAR17
+  //added DigitalOut so we can use any pin for cs
+  //jjj
+  MAX30001(SPI *spi, DigitalOut *cs);
+
+
+  /**
+  * @brief Constructor that accepts pin names for the SPI interface
+  * @param mosi master out slave in pin name
+  * @param miso master in slave out pin name
+  * @param sclk serial clock pin name
+  * @param cs chip select pin name
+  */
+  MAX30001(PinName mosi, PinName miso, PinName sclk, PinName cs);
+
+  /**
+   * MAX30001 destructor
+   */
+  ~MAX30001(void);
+
+  /**
+   * @brief This function sets up the Resistive Bias mode and also selects the master clock frequency.
+   * @brief Uses Register: CNFG_GEN-0x10
+   * @param En_rbias: Enable and Select Resitive Lead Bias Mode
+   * @param Rbiasv: Resistive Bias Mode Value Selection
+   * @param Rbiasp: Enables Resistive Bias on Positive Input
+   * @param Rbiasn: Enables Resistive Bias on Negative Input
+   * @param Fmstr: Selects Master Clock Frequency
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+  */
+  int max30001_Rbias_FMSTR_Init(uint8_t En_rbias, uint8_t Rbiasv,
+                                uint8_t Rbiasp, uint8_t Rbiasn, uint8_t Fmstr);
+
+  /**
+   * @brief This function uses sets up the calibration signal internally.  If it is desired to use the internal signal, then
+   * @brief this function must be called and the registers set, prior to setting the CALP_SEL and CALN_SEL in the ECG_InitStart
+   * @brief and BIOZ_InitStart functions.
+   * @brief Uses Register: CNFG_CAL-0x12
+   * @param En_Vcal: Calibration Source (VCALP and VCALN) Enable
+   * @param Vmode:   Calibration Source Mode Selection
+   * @param Vmag:    Calibration Source Magnitude Selection (VMAG)
+   * @param Fcal:    Calibration Source Frequency Selection (FCAL)
+   * @param Thigh:   Calibration Source Time High Selection
+   * @param Fifty:   Calibration Source Duty Cycle Mode Selection
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_CAL_InitStart(uint8_t En_Vcal, uint8_t Vmode, uint8_t Vmag,
+                             uint8_t Fcal, uint16_t Thigh, uint8_t Fifty);
+
+  /**
+   * @brief This function disables the VCAL signal
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   */
+  int max30001_CAL_Stop(void);
+
+  /**
+   * @brief This function handles the assignment of the two interrupt pins (INTB & INT2B) with various
+   * @brief functions/behaviors  of the MAX30001.  Also, each pin can be configured for different drive capability.
+   * @brief Uses Registers: EN_INT-0x02 and EN_INT2-0x03.
+   * @param max30001_intrpt_Locatio_t  <argument>:  All the arguments with the aforementioned enumeration essentially
+   *        can be configured to generate an interrupt on either INTB or INT2B or NONE.
+   * @param max30001_intrpt_type_t  intb_Type:  INTB Port Type (EN_INT Selections).
+   * @param max30001_intrpt_type _t int2b_Type:   INT2B Port Type (EN_INT2 Selections)
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+     int max30001_INT_assignment(max30001_intrpt_Location_t en_enint_loc,     max30001_intrpt_Location_t en_eovf_loc,  max30001_intrpt_Location_t en_fstint_loc,
+		                 max30001_intrpt_Location_t en_dcloffint_loc, max30001_intrpt_Location_t en_bint_loc,  max30001_intrpt_Location_t en_bovf_loc,
+		                 max30001_intrpt_Location_t en_bover_loc,     max30001_intrpt_Location_t en_bundr_loc, max30001_intrpt_Location_t en_bcgmon_loc,
+		                 max30001_intrpt_Location_t en_pint_loc,      max30001_intrpt_Location_t en_povf_loc,  max30001_intrpt_Location_t en_pedge_loc,
+		                 max30001_intrpt_Location_t en_lonint_loc,    max30001_intrpt_Location_t en_rrint_loc, max30001_intrpt_Location_t en_samp_loc,
+		                 max30001_intrpt_type_t  intb_Type,           max30001_intrpt_type_t int2b_Type);
+
+
+
+  /**
+   * @brief For MAX30001/3 ONLY
+   * @brief This function sets up the MAX30001 for the ECG measurements.
+   * @brief Registers used:  CNFG_EMUX, CNFG_GEN, MNGR_INT, CNFG_ECG.
+   * @param En_ecg: ECG Channel Enable <CNFG_GEN register bits>
+   * @param Openp: Open the ECGN Input Switch (most often used for testing and calibration studies) <CNFG_EMUX register bits>
+   * @param Openn: Open the ECGN Input Switch (most often used for testing and calibration studies) <CNFG_EMUX register bits>
+   * @param Calp_sel: ECGP Calibration Selection <CNFG_EMUX register bits>
+   * @param Caln_sel: ECGN Calibration Selection <CNFG_EMUX register bits>
+   * @param E_fit: ECG FIFO Interrupt Threshold (issues EINT based on number of unread FIFO records) <CNFG_GEN register bits>
+   * @param Clr_rrint: RTOR R Detect Interrupt (RRINT) Clear Behavior <CNFG_GEN register bits>
+   * @param Rate: ECG Data Rate
+   * @param Gain: ECG Channel Gain Setting
+   * @param Dhpf: ECG Channel Digital High Pass Filter Cutoff Frequency
+   * @param Dlpf:  ECG Channel Digital Low Pass Filter Cutoff Frequency
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
+                             uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
+                             uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+                             uint8_t Dhpf, uint8_t Dlpf);
+
+  /**
+   * @brief For MAX30001/3 ONLY
+   * @brief This function enables the Fast mode feature of the ECG.
+   * @brief Registers used: MNGR_INT-0x04, MNGR_DYN-0x05
+   * @param Clr_Fast: FAST MODE Interrupt Clear Behavior <MNGR_INT Register>
+   * @param Fast: ECG Channel Fast Recovery Mode Selection (ECG High Pass Filter Bypass) <MNGR_DYN Register>
+   * @param Fast_Th: Automatic Fast Recovery Threshold
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_ECGFast_Init(uint8_t Clr_Fast, uint8_t Fast, uint8_t Fast_Th);
+
+  /**
+  * @brief For MAX30001/3 ONLY
+  * @brief This function disables the ECG.
+  * @brief Uses Register CNFG_GEN-0x10.
+  * @returns 0-if no error.  A non-zero value indicates an error.
+  *
+  */
+  int max30001_Stop_ECG(void);
+
+  /**
+   *  @brief For MAX30001 ONLY
+   *  @brief This function sets up the MAX30001 for pace signal detection.
+   *  @brief If both PACE and BIOZ are turned ON, then make sure Fcgen is set for 80K or 40K in the
+   *  @brief max30001_BIOZ_InitStart() function.  However, if Only PACE is on but BIOZ off, then Fcgen can be set
+   *  @brief for 80K only, in the max30001_BIOZ_InitStart() function
+   *  @brief Registers used: MNGR_INT-0x04, CNFG_GEN-0x37, CNFG_PACE-0x1A.
+   *  @param En_pace : PACE Channel Enable <CNFG_GEN Register>
+   *  @param Clr_pedge : PACE Edge Detect Interrupt (PEDGE) Clear Behavior <MNGR_INT Register>
+   *  @param Pol: PACE Input Polarity Selection <CNFG_PACE Register>
+   *  @param Gn_diff_off: PACE Differentiator Mode <CNFG_PACE Register>
+   *  @param Gain: PACE Channel Gain Selection <CNFG_PACE Register>
+   *  @param Aout_lbw:  PACE Analog Output Buffer Bandwidth Mode <CNFG_PACE Register>
+   *  @param Aout: PACE Single Ended Analog Output Buffer Signal Monitoring Selection <CNFG_PACE Register>
+   *  @param Dacp (4bits): PACE Detector Positive Comparator Threshold <CNFG_PACE Register>
+   *  @param Dacn(4bits): PACE Detector Negative Comparator Threshold <CNFG_PACE Register>
+   *  @returns 0-if no error.  A non-zero value indicates an error <CNFG_PACE Register>
+   *
+   */
+  int max30001_PACE_InitStart(uint8_t En_pace, uint8_t Clr_pedge, uint8_t Pol,
+                              uint8_t Gn_diff_off, uint8_t Gain,
+                              uint8_t Aout_lbw, uint8_t Aout, uint8_t Dacp,
+                              uint8_t Dacn);
+
+  /**
+   *@brief For MAX30001 ONLY
+   *@param This function disables the PACE.  Uses Register CNFG_GEN-0x10.
+   *@returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Stop_PACE(void);
+
+  /**
+   * @brief For MAX30001/2 ONLY
+   * @brief This function sets up the MAX30001 for BIOZ measurement.
+   * @brief Registers used: MNGR_INT-0x04, CNFG_GEN-0X10, CNFG_BMUX-0x17,CNFG_BIOZ-0x18.
+   * @param En_bioz: BIOZ Channel Enable <CNFG_GEN Register>
+   * @param Openp: Open the BIP Input Switch <CNFG_BMUX Register>
+   * @param Openn: Open the BIN Input Switch <CNFG_BMUX Register>
+   * @param Calp_sel: BIP Calibration Selection <CNFG_BMUX Register>
+   * @param Caln_sel: BIN Calibration Selection <CNFG_BMUX Register>
+   * @param CG_mode:  BIOZ Current Generator Mode Selection <CNFG_BMUX Register>
+   * @param B_fit:  BIOZ FIFO Interrupt Threshold (issues BINT based on number of unread FIFO records) <MNGR_INT Register>
+   * @param Rate: BIOZ Data Rate <CNFG_BIOZ Register>
+   * @param Ahpf: BIOZ/PACE Channel Analog High Pass Filter Cutoff Frequency and Bypass <CNFG_BIOZ Register>
+   * @param Ext_rbias:  External Resistor Bias Enable <CNFG_BIOZ Register>
+   * @param Gain: BIOZ Channel Gain Setting <CNFG_BIOZ Register>
+   * @param Dhpf: BIOZ Channel Digital High Pass Filter Cutoff Frequency <CNFG_BIOZ Register>
+   * @param Dlpf:  BIOZ Channel Digital Low Pass Filter Cutoff Frequency <CNFG_BIOZ Register>
+   * @param Fcgen:  BIOZ Current Generator Modulation Frequency <CNFG_BIOZ Register>
+   * @param Cgmon:  BIOZ Current Generator Monitor <CNFG_BIOZ Register>
+   * @param Cgmag:  BIOZ Current Generator Magnitude <CNFG_BIOZ Register>
+   * @param Phoff: BIOZ Current Generator Modulation Phase Offset <CNFG_BIOZ Register>
+   * @param Inapow_mode: BIOZ Channel Instrumentation Amplifier (INA) Power Mode <CNFG_BIOZ Register>
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_BIOZ_InitStart(uint8_t En_bioz, uint8_t Openp, uint8_t Openn,
+                              uint8_t Calp_sel, uint8_t Caln_sel,
+                              uint8_t CG_mode,
+                              /* uint8_t En_bioz,*/ uint8_t B_fit, uint8_t Rate,
+                              uint8_t Ahpf, uint8_t Ext_rbias, uint8_t Gain,
+                              uint8_t Dhpf, uint8_t Dlpf, uint8_t Fcgen,
+                              uint8_t Cgmon, uint8_t Cgmag, uint8_t Phoff, uint8_t Inapow_mode);
+
+  /**
+   * @brief For MAX30001/2 ONLY
+   * @brief This function disables the BIOZ.  Uses Register CNFG_GEN-0x10.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+       * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Stop_BIOZ(void);
+
+  /**
+   * @brief For MAX30001/2 ONLY
+   * @brief BIOZ modulated Resistance Built-in-Self-Test, Registers used: CNFG_BMUX-0x17
+   * @param En_bist: Enable Modulated Resistance Built-in-Self-test <CNFG_BMUX Register>
+   * @param Rnom: BIOZ RMOD BIST Nominal Resistance Selection <CNFG_BMUX Register>
+   * @param Rmod: BIOZ RMOD BIST Modulated Resistance Selection <CNFG_BMUX Register>
+   * @param Fbist: BIOZ RMOD BIST Frequency Selection <CNFG_BMUX Register>
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_BIOZ_InitBist(uint8_t En_bist, uint8_t Rnom, uint8_t Rmod,
+                             uint8_t Fbist);
+
+  /**
+   * @brief For MAX30001/3/4 ONLY
+   * @brief Sets up the device for RtoR measurement
+   * @param EN_rtor: ECG RTOR Detection Enable <RTOR1 Register>
+   * @param Wndw: R to R Window Averaging (Window Width = RTOR_WNDW[3:0]*8mS) <RTOR1 Register>
+   * @param Gain: R to R Gain (where Gain = 2^RTOR_GAIN[3:0], plus an auto-scale option) <RTOR1 Register>
+   * @param Pavg: R to R Peak Averaging Weight Factor <RTOR1 Register>
+   * @param Ptsf: R to R Peak Threshold Scaling Factor <RTOR1 Register>
+   * @param Hoff: R to R minimum Hold Off <RTOR2 Register>
+   * @param Ravg: R to R Interval Averaging Weight Factor <RTOR2 Register>
+   * @param Rhsf: R to R Interval Hold Off Scaling Factor <RTOR2 Register>
+   * @param Clr_rrint: RTOR Detect Interrupt Clear behaviour <MNGR_INT Register>
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
+                              uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
+                              uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint);
+
+  /**
+   * @brief For MAX30001/3/4 ONLY
+   * @brief This function disables the RtoR.  Uses Register CNFG_RTOR1-0x1D
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Stop_RtoR(void);
+
+  /**
+   * @brief This is a function that waits for the PLL to lock; once a lock is achieved it exits out. (For convenience only)
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_PLL_lock(void);
+
+  /**
+   * @brief This function causes the MAX30001 to reset.  Uses Register SW_RST-0x08
+   * @return 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_sw_rst(void);
+
+  /**
+   * @brief This function provides a SYNCH operation.  Uses Register SYCNH-0x09. Please refer to the data sheet for
+   * @brief the details on how to use this.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_synch(void);
+
+  /**
+   * @brief This function performs a FIFO Reset.  Uses Register FIFO_RST-0x0A. Please refer to the data sheet
+   * @brief for the details on how to use this.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   */
+  int max300001_fifo_rst(void);
+
+  /**
+   *
+   * @brief This is a callback function which collects all the data from the ECG, BIOZ, PACE and RtoR. It also handles
+   * @brief Lead On/Off.  This  function is passed through the argument of max30001_COMMinit().
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_int_handler(void);
+
+  /**
+   * @brief This is function called from the max30001_int_handler() function and processes all the ECG, BIOZ, PACE
+   * @brief and the RtoR data and sticks them in appropriate arrays and variables each unsigned 32 bits.
+   * @param ECG data will be in the array (input): max30001_ECG_FIFO_buffer[]
+   * @param Pace data will be in the array (input): max30001_PACE[]
+   * @param RtoRdata will be in the variable (input): max30001_RtoR_data
+   * @param BIOZ data will be in the array (input): max30001_BIOZ_FIFO_buffer[]
+   * @param global  max30001_ECG_FIFO_buffer[]
+   * @param global  max30001_PACE[]
+   * @param global  max30001_BIOZ_FIFO_buffer[]
+   * @param global  max30001_RtoR_data
+   * @param global  max30001_DCLeadOff
+   * @param global  max30001_ACLeadOff
+   * @param global  max30001_LeadON
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_FIFO_LeadONOff_Read(void);
+
+  /**
+   * @brief This function allows writing to a register.
+   * @param addr:  Address of the register to write to
+   * @param data:  24-bit data read from the register.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_reg_write(MAX30001_REG_map_t addr, uint32_t data);
+
+  /**
+   * @brief This function allows reading from a register
+   * @param addr:   Address of the register to read from.
+   * @param *return_data: pointer to the value read from the register.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_reg_read(MAX30001_REG_map_t addr, uint32_t *return_data);
+
+  /**
+   * @brief This function enables the DC Lead Off detection. Either ECG or BIOZ can be detected, one at a time.
+   * @brief Registers Used:  CNFG_GEN-0x10
+   * @param En_dcloff: BIOZ Digital Lead Off Detection Enable
+   * @param Ipol: DC Lead Off Current Polarity (if current sources are enabled/connected)
+   * @param Imag: DC Lead off current Magnitude Selection
+   * @param Vth: DC Lead Off Voltage Threshold Selection
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Enable_DcLeadOFF_Init(int8_t En_dcloff, int8_t Ipol, int8_t Imag,
+                                     int8_t Vth);
+
+  /**
+   * @brief This function disables the DC Lead OFF feature, whichever is active.
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Disable_DcLeadOFF(void);
+
+  /**
+   * @brief This function sets up the BIOZ for AC Lead Off test.
+   * @brief Registers Used:  CNFG_GEN-0x10, MNGR_DYN-0x05
+   * @param En_bloff: BIOZ Digital Lead Off Detection Enable <CNFG_GEN register>
+   * @param Bloff_hi_it:      DC Lead Off Current Polarity (if current sources are enabled/connected) <MNGR_DYN register>
+   * @param Bloff_lo_it:      DC Lead off current Magnitude Selection <MNGR_DYN register>
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_BIOZ_Enable_ACLeadOFF_Init(uint8_t En_bloff, uint8_t Bloff_hi_it,
+                                          uint8_t Bloff_lo_it);
+
+  /**
+   * @brief This function Turns of the BIOZ AC Lead OFF feature
+   * @brief Registers Used:  CNFG_GEN-0x10
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_BIOZ_Disable_ACleadOFF(void);
+
+  /**
+   * @brief This function enables the Current Gnerator Monitor
+   * @brief Registers Used:  CNFG_BIOZ-0x18
+   * @returns 0-if no error.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_BIOZ_Enable_BCGMON(void);
+
+  /**
+   *
+   * @brief This function enables the Lead ON detection. Either ECG or BIOZ can be detected, one at a time.
+   * @brief Also, the en_bioz, en_ecg, en_pace setting is saved so that when this feature is disabled through the
+   * @brief max30001_Disable_LeadON() function (or otherwise) the enable/disable state of those features can be retrieved.
+   * @param Channel: ECG or BIOZ detection
+   * @returns 0-if everything is good.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Enable_LeadON(int8_t Channel);
+
+  /**
+   * @brief This function turns off the Lead ON feature, whichever one is active.  Also, retrieves the en_bioz,
+   * @brief en_ecg, en_pace and sets it back to as it was.
+   * @param 0-if everything is good.  A non-zero value indicates an error.
+   *
+   */
+  int max30001_Disable_LeadON(void);
+
+  /**
+   *
+   * @brief This function is toggled every 2 seconds to switch between ECG Lead ON and BIOZ Lead ON detect
+   * @brief Adjust LEADOFF_SERVICE_TIME to determine the duration between the toggles.
+   * @param CurrentTime - This gets fed the time by RTC_GetValue function
+   *
+   */
+  void max30001_ServiceLeadON(uint32_t currentTime);
+
+  /**
+   *
+   * @brief This function is toggled every 2 seconds to switch between ECG DC Lead Off and BIOZ DC Lead Off
+   * @brief Adjust LEADOFF_SERVICE_TIME to determine the duration between the toggles.
+   * @param CurrentTime - This gets fed the time by RTC_GetValue function
+   *
+   */
+  void max30001_ServiceLeadoff(uint32_t currentTime);
+
+  /**
+   *
+   * @brief This function sets current RtoR values and fmstr values in a pointer structure
+   * @param hspValMax30001 - Pointer to a structure where to store the values
+   *
+   */
+  void max30001_ReadHeartrateData(max30001_t *_hspValMax30001);
+
+  /**
+   * @brief type definition for data interrupt
+   */
+  typedef void (*PtrFunction)(uint32_t id, uint32_t *buffer, uint32_t length);
+
+  /**
+   * @brief Used to connect a callback for when interrupt data is available
+   */
+  void onDataAvailable(PtrFunction _onDataAvailable);
+
+  static MAX30001 *instance;
+
+  /// Interrupt status tracking variable
+  bool m_max30001_int_happened_;
+
+
+private:
+  void dataAvailable(uint32_t id, uint32_t *buffer, uint32_t length);
+  /// interrupt handler for async spi events
+  static void spiHandler(int events);
+  /// wrapper method to transmit and recieve SPI data
+  int SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, uint8_t *rx_buf,
+                   uint32_t rx_size);
+   uint32_t readPace(int group, uint8_t* result);
+
+  //jjj 14MAR17
+  //pointer to DigitalOut for cs
+  DigitalOut * m_cs;
+  //jjj
+  /// pointer to mbed SPI object
+  SPI *m_spi;
+  /// is this object the owner of the spi object
+  bool spi_owner;
+  /// buffer to use for async transfers
+  uint8_t buffer[ASYNC_SPI_BUFFER_SIZE];
+  /// function pointer to the async callback
+  event_callback_t functionpointer;
+  /// callback function when interrupt data is available
+  PtrFunction onDataAvailableCallback;
+
+}; // End of MAX30001 Class
+
+/**
+ * @brief Preventive measure used to dismiss interrupts that fire too early during
+ * @brief initialization on INTB line
+ *
+ */
+void MAX30001Mid_IntB_Handler(void);
+
+/**
+ * @brief Preventive measure used to dismiss interrupts that fire too early during
+ * @brief initialization on INT2B line
+ *
+ */
+void MAX30001Mid_Int2B_Handler(void);
+
+/**
+ * @brief Allows Interrupts to be accepted as valid.
+ * @param state: 1-Allow interrupts, Any-Don't allow interrupts.
+ *
+ */
+void MAX30001_AllowInterrupts(int state);
+
+#endif /* MAX30001_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30001/MAX30001_Helper.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,340 @@
+#include "MaximSensor.h"
+#include "MAX30001_Helper.h"
+#include "Peripherals.h"
+#include "EcgComm_Defines.h"
+
+
+
+
+/// define stream out fifo
+#define MAX_ECG_REPORT_COUNT 256
+/// allocate a large fifo buffer for streaming out
+static uint8_t streamOutBuffer[sizeof(ecg_sensor_report) * MAX_ECG_REPORT_COUNT];
+
+
+MAX30001_Helper::MAX30001_Helper(MAX30001 *m, InterruptIn *ir_B, InterruptIn *ir_2B)
+:m_max30001(m), m_max30001_InterruptB(ir_B), m_max30001_Interrupt2B(ir_2B){
+	queue_init(&mmax30001_queue, streamOutBuffer, sizeof(ecg_sensor_report), sizeof(streamOutBuffer));
+	printf("Constructor is called\n");
+	m_max30001->m_max30001_int_happened_ = false;
+}
+
+
+int MAX30001_Helper::readRegister(uint8_t reg, uint8_t *data, int len){
+	printf("Empty Function is Called %s", __func__);
+	return -1;
+}
+
+int MAX30001_Helper::writeRegister(uint8_t reg,	const uint8_t data){
+	printf("Empty Function is Called %s", __func__);
+	return -1;
+}
+
+int MAX30001_Helper::MS_max30001readRegister(uint8_t addr, uint32_t *return_data){
+	return m_max30001->max30001_reg_read(static_cast<MAX30001::MAX30001_REG_map_t> (addr), return_data);
+}
+
+int MAX30001_Helper::MS_max30001writeRegister(uint8_t addr, uint32_t data){
+	return m_max30001->max30001_reg_write(static_cast<MAX30001::MAX30001_REG_map_t> (addr), data);
+}
+
+int MAX30001_Helper::get_part_info(uint8_t *part_id,	uint8_t *rev_id){
+	return -1;
+}
+
+void MAX30001_Helper::Max30001_Helper_SetInterrupts(char en){
+	if(en){
+		m_max30001_InterruptB->disable_irq();
+		m_max30001_Interrupt2B->disable_irq();
+		m_max30001_InterruptB->mode(PullUp);
+		m_max30001_InterruptB->fall(&MAX30001Mid_IntB_Handler);
+		m_max30001_Interrupt2B->mode(PullUp);
+		m_max30001_Interrupt2B->fall(&MAX30001Mid_Int2B_Handler);
+		m_max30001_InterruptB->enable_irq();
+		m_max30001_Interrupt2B->enable_irq();
+		MAX30001_AllowInterrupts(1);
+		//ret |= m_max30001->max30001_sw_rst(); // Do a software reset of the MAX30001
+		m_max30001->onDataAvailable(&StreamPacketUint32);
+		m_max30001->m_max30001_int_happened_ = (false);
+	}else{
+		m_max30001_InterruptB->disable_irq();
+		m_max30001_Interrupt2B->disable_irq();
+		MAX30001_AllowInterrupts(0);
+		//ret |= m_max30001->max30001_sw_rst(); // Do a software reset of the MAX30001
+		m_max30001->m_max30001_int_happened_ = (false);
+	}
+}
+
+int MAX30001_Helper::Max30001Helper_InitializeECGandRtoR(){
+      int ret = 0;
+	 /**** ENABLE CHANNELS for ECG ****/
+	  // CNFG_GEN
+	  if (m_max30001->max30001_reg_read(MAX30001::CNFG_GEN, &m_max30001->max30001_cnfg_gen.all) == -1) {
+	    return -1;
+	  }
+	  m_max30001->max30001_cnfg_gen.bit.en_ecg = 0x1; // 0b1
+	  // fmstr is default
+	  if (m_max30001->max30001_reg_write(MAX30001::CNFG_GEN, m_max30001->max30001_cnfg_gen.all) == -1) {
+	    return -1;
+	  }
+	  ret = m_max30001->max30001_PLL_lock();
+	  // MNGR_INT
+	  if (m_max30001->max30001_reg_read(MAX30001::MNGR_INT, &m_max30001->max30001_mngr_int.all) == -1) {
+	    return -1;
+	  }
+	  m_max30001->max30001_mngr_int.bit.e_fit = E_FIT; // 31
+//	  if (m_max30001->max30001_reg_write(MAX30001::MNGR_INT, m_max30001->max30001_mngr_int.all) == -1) {
+//	    return -1;
+//	  }
+	  // end of MNGR_INT
+
+	  // Configure RtoR Parameters
+	  // MNGR_INT
+//	  if (m_max30001->max30001_reg_read(MAX30001::MNGR_INT, &m_max30001->max30001_mngr_int.all) == -1) {
+//	    return -1;
+//	  }
+	  m_max30001->max30001_mngr_int.bit.clr_rrint = 0x01; // 0b01 & 0b00 are for interrupt mode...
+	  // 0b10 is for monitoring mode... it just overwrites the data...
+	  if (m_max30001->max30001_reg_write(MAX30001::MNGR_INT, m_max30001->max30001_mngr_int.all) == -1) {
+	    return -1;
+	  }
+	  // RTOR1
+	  if (m_max30001->max30001_reg_read(MAX30001::CNFG_RTOR1, &m_max30001->max30001_cnfg_rtor1.all) == -1) {
+	    return -1;
+	  }
+	  m_max30001->max30001_cnfg_rtor1.bit.en_rtor = 0x1;
+	  if (m_max30001->max30001_reg_write(MAX30001::CNFG_RTOR1, m_max30001->max30001_cnfg_rtor1.all) == -1) {
+	    return -1;
+	  }
+	  return ret;
+}
+
+int MAX30001_Helper::Max30001Helper_SetECGSampleRate(Max30001_Helper_ECG_Sample_Rate ecg_rate){
+	  // ECG Rate
+	  if (m_max30001->max30001_reg_read(MAX30001::CNFG_ECG, &m_max30001->max30001_cnfg_ecg.all) == -1) {
+	    return -1;
+	  }
+	  m_max30001->max30001_cnfg_ecg.bit.rate = ecg_rate;
+	  if (m_max30001->max30001_reg_write(MAX30001::CNFG_ECG, m_max30001->max30001_cnfg_ecg.all) == -1) {
+	    return -1;
+	  }
+	  pr_debug("Setting reg 0x%02X to value 0x%02X\r\n", MAX30001::CNFG_ECG, ecg_rate);
+	  return 0;
+}
+
+
+int MAX30001_Helper::sensor_enable(int enable){
+	int ret = 0;
+	queue_reset(&mmax30001_queue);
+	memset(&m_ecg_packet_, 0, sizeof(m_ecg_packet_));
+	m_rtor_last_bpm_ = 0;
+	Max30001_Helper_SetInterrupts(enable);
+	if(enable){
+		ret = Max30001Helper_InitializeECGandRtoR();
+		ret |= MS_Max30001_RtoR_InitStart(EN_RTOR_OP,WNDW_OP,GAIN_RTOR_OP,PAVG_OP,PTSF_OP,HOFF_OP,RAVG_OP,RHSF_OP,CLR_RRINT_OP);
+		ret |= MS_max30001_INT_assignment(EN_ENINT_LOC, EN_EOVF_LOC,	EN_FSTINT_LOC,
+										   EN_DCLOFFINT_LOC, EN_BINT_LOC,EN_BOVF_LOC,
+										   EN_BOVER_LOC,EN_BUNDR_LOC,EN_BCGMON_LOC,
+										   EN_PINT_LOC,EN_POVF_LOC,EN_PEDGE_LOC,
+										   EN_LONINT_LOC,EN_RRINT_LOC,	EN_SAMP_LOC,
+										   INTB_TYPE,INT2B_TYPE);
+		ret |= MS_max30001sync();
+	}else{
+		ret  = m_max30001->max30001_Stop_ECG();
+		ret |= m_max30001->max30001_Stop_RtoR();
+		ret |= MS_max30001sync();
+	}
+	return ret;
+}
+
+int MAX30001_Helper::agc_enable(int agc_enable){
+	return -1;
+}
+
+const char *MAX30001_Helper::get_sensor_part_name(){
+	return "max30001";
+}
+
+const char *MAX30001_Helper::get_sensor_name(){
+	return "max30001";
+}
+
+int MAX30001_Helper::get_sensor_report(ecg_sensor_report &sensor_report)
+{
+	return dequeue(&mmax30001_queue, &sensor_report);
+}
+
+int MAX30001_Helper::dump_registers(addr_val_pair *reg_vals){
+	int i, j = 0;
+	int ret = 0;
+	//43 registers total
+	for (i = 0x00; i <= 0x05; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x08; i <= 0x0A; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x0F; i <= 0x10; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x12; i <= 0x12; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x14; i <= 0x15; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x17; i <= 0x18; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x1A; i <= 0x1A; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x1D; i <= 0x1E; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x20; i <= 0x25; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+	for (i = 0x30; i <= 0x47; i++, j++) {
+		reg_vals[j].addr = i;
+		ret |= MS_max30001readRegister(i, &(reg_vals[j].val));
+	}
+
+	return ret;
+}
+
+
+// This function starts ECG processing
+int MAX30001_Helper::MS_Max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
+						 uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
+									 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+									 uint8_t Dhpf, uint8_t Dlpf){
+	int ret = 0;
+	ret = m_max30001->max30001_ECG_InitStart(En_ecg, Openp, Openn, Pol, Calp_sel, Caln_sel, E_fit, Rate, Gain, Dhpf, Dlpf);
+	ret |= m_max30001->max30001_synch();
+	return ret;
+}
+
+// This functions stops ECG processing
+int MAX30001_Helper::MS_Max30001_ECG_Stop(){
+	int ret = 0;
+	ret =  m_max30001->max30001_Stop_ECG();
+	return ret;
+}
+
+// This functions starts R_to_R processing
+int MAX30001_Helper::MS_Max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
+												uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
+												uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint){
+	int ret = 0;
+	ret =  m_max30001->max30001_RtoR_InitStart(En_rtor, Wndw, Gain,
+							   Pavg, Ptsf, Hoff,
+											   Ravg, Rhsf, Clr_rrint);
+	ret |= m_max30001->max30001_synch();
+	return ret;
+}
+
+// This functions stops R_to_R processing
+int MAX30001_Helper::MS_Max30001_RtoR_Stop(){
+	int ret = 0;
+	ret =  m_max30001->max30001_Stop_RtoR();
+	return ret;
+}
+
+//This function enables the interrupts for specific parameters
+int MAX30001_Helper::MS_max30001_INT_assignment(uint8_t en_enint_loc,     uint8_t en_eovf_loc,  uint8_t en_fstint_loc,
+												uint8_t en_dcloffint_loc, uint8_t en_bint_loc,  uint8_t en_bovf_loc,
+									            uint8_t en_bover_loc,     uint8_t en_bundr_loc, uint8_t en_bcgmon_loc,
+									            uint8_t en_pint_loc,      uint8_t en_povf_loc,  uint8_t en_pedge_loc,
+									            uint8_t en_lonint_loc,    uint8_t en_rrint_loc, uint8_t en_samp_loc,
+									            uint8_t intb_Type,        uint8_t int2b_Type){
+
+	return m_max30001->max30001_INT_assignment(static_cast<MAX30001::max30001_intrpt_Location_t> (en_enint_loc),     static_cast<MAX30001::max30001_intrpt_Location_t> (en_eovf_loc),  static_cast<MAX30001::max30001_intrpt_Location_t> (en_fstint_loc),
+											   static_cast<MAX30001::max30001_intrpt_Location_t> (en_dcloffint_loc), static_cast<MAX30001::max30001_intrpt_Location_t> (en_bint_loc),  static_cast<MAX30001::max30001_intrpt_Location_t> (en_bovf_loc),
+											   static_cast<MAX30001::max30001_intrpt_Location_t> (en_bover_loc),     static_cast<MAX30001::max30001_intrpt_Location_t> (en_bundr_loc), static_cast<MAX30001::max30001_intrpt_Location_t> (en_bcgmon_loc),
+											   static_cast<MAX30001::max30001_intrpt_Location_t> (en_pint_loc),      static_cast<MAX30001::max30001_intrpt_Location_t> (en_povf_loc),  static_cast<MAX30001::max30001_intrpt_Location_t> (en_pedge_loc),
+											   static_cast<MAX30001::max30001_intrpt_Location_t> (en_lonint_loc),    static_cast<MAX30001::max30001_intrpt_Location_t> (en_rrint_loc), static_cast<MAX30001::max30001_intrpt_Location_t> (en_samp_loc),
+											   static_cast<MAX30001::max30001_intrpt_type_t> (intb_Type),            static_cast<MAX30001::max30001_intrpt_type_t> (int2b_Type));
+
+}
+
+// call sync function of the sensor
+int MAX30001_Helper::MS_max30001sync(){
+	return m_max30001->max30001_synch();
+}
+
+// That Function Should Only Be called from interrupt context
+void MAX30001_Helper::Max30001Helper_AddDataToQueue(uint32_t id, uint32_t *buffer, uint32_t number){
+	for(uint32_t i = 0; i != number; ++i){
+		if(id == MAX30001_DATA_ECG){
+			m_ecg_packet_.ecg = buffer[i];
+			enqueue(&mmax30001_queue, &m_ecg_packet_);
+			m_ecg_packet_.rtor = 0;
+			m_ecg_packet_.rtor_bpm = 0;
+		}else if(id == MAX30001_DATA_RTOR){
+			m_ecg_packet_.rtor = buffer[i];
+			Max30001_Helper_ConvertRtoRtoBPM(m_ecg_packet_.rtor);
+			m_ecg_packet_.rtor_bpm = m_rtor_last_bpm_;
+		}
+		else{
+		}
+	}
+}
+
+void MAX30001_Helper::Max30001Helper_setInterruptStatus(bool status) {
+	m_max30001->m_max30001_int_happened_ = status;
+}
+
+bool MAX30001_Helper::Max30001Helper_getInterruptStatus() {
+	return m_max30001->m_max30001_int_happened_;
+}
+
+void MAX30001_Helper::Max30001Helper_max30001_int_handler(void){
+	m_max30001->max30001_int_handler();
+}
+
+int MAX30001_Helper::MAX30001_Helper_Queue_Size(void){
+	return queue_len(&mmax30001_queue);
+}
+
+int MAX30001_Helper:: MAX30001_Helper_Invert_Waveform(void) {
+	int ret;
+	uint32_t return_data;
+	ret = m_max30001->max30001_reg_read(MAX30001::CNFG_EMUX, &return_data);
+	if(ret != 0)
+		return ret;
+
+	return_data ^= ((1 << 23));
+	ret = m_max30001->max30001_reg_write(MAX30001::CNFG_EMUX, return_data);
+	return ret;
+}
+
+void MAX30001_Helper::Max30001_Helper_ConvertRtoRtoBPM(uint16_t rtor_val) {
+	const float rtor_constant = 0.0078;
+	if(rtor_val != 0)
+		m_rtor_last_bpm_ = (uint8_t)(60 /(rtor_constant* rtor_val));
+}
+
+void StreamPacketUint32(uint32_t id, uint32_t *buffer, uint32_t number) {
+	Peripherals::max30001Helper()->Max30001Helper_AddDataToQueue(id, buffer, number);
+}
+
+/**
+* @brief	Get sensor ID.
+*
+* @returns	Sensor ID number.
+*/
+unsigned char MAX30001_Helper::get_sensor_id() {
+
+	return( SENSOR_ID_MAX30001 );
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30001/MAX30001_Helper.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,190 @@
+#ifndef _MAX30001_HELPER_H_
+#define _MAX30001_HELPER_H_
+
+
+#include "mbed.h"
+#include "MaximSensor.h"
+#include "MAX30001.h"
+#include "queue.h"
+#include "EcgComm.h"
+
+#define	SENSOR_ID_MAX30001	0x02
+
+class MAX30001_Helper: public MaximSensor
+{
+public:
+	MAX30001_Helper(MAX30001 *m, InterruptIn *ir_B, InterruptIn *ir_2B);
+	// Inherited function implementations from MaximSensor
+	virtual int readRegister(uint8_t reg, uint8_t *data, int len);
+
+	virtual int writeRegister(uint8_t reg,	const uint8_t data);
+
+	/**
+	* @brief	Get Maxim Sensor part and revision info.
+	* @details	Reads Maxim Sensor part and revision info from device.
+	*
+	* @param[in]	reg Beginning address of a register to be read.
+	* @param[out]	data Buffer space to save result value.
+	* @param[in]	len Number of consecutive bytes to be read.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int get_part_info(uint8_t *part_id,	uint8_t *rev_id);
+
+	/**
+	* @brief	Enables Maxim Sensor.
+	* @details	Enable IRQ, enable LEDs, enable AGC
+	*
+	* @param[in]	enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int sensor_enable(int enable);
+
+	/**
+	* @brief	Enables AGC.
+	* @details	Enable Maxim Sensor automatic gain controller.
+	*	AGC automatically adjusts sampling rates and LED currents to save energy.
+	*
+	* @param[in]	agc_enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int agc_enable(int agc_enable);
+
+	/**
+	* @brief	Get sensor part name.
+	*
+	* @returns	Sensor part name string.
+	*/
+	virtual const char *get_sensor_part_name();
+
+	/**
+	* @brief	Get sensor name.
+	*
+	* @returns	Sensor name string.
+	*/
+	virtual const char *get_sensor_name();
+
+	/**
+	* @brief	Get sensor data
+	*
+	* @param[in]	data_report sensor_report struct to fill out
+	# @returns		0 on success, less than 0 otherwise
+	*/
+	virtual int get_sensor_report(ecg_sensor_report &data_report);
+
+	/**
+	* @brief	Dump Maxim Sensor registers.
+	* @details	Fill out register values into list
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int dump_registers(addr_val_pair *reg_values);
+
+
+	/**
+	* @brief	Get sensor ID.
+	*
+	* @returns	Sensor ID number.
+	*/
+	unsigned char get_sensor_id();
+
+	// Implemented functions transferred mostly from HSP....
+
+	virtual int MS_max30001readRegister(uint8_t addr, uint32_t *return_data);
+
+	virtual int MS_max30001writeRegister(uint8_t addr, uint32_t data);
+
+	virtual int MS_Max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
+						 uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
+										 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+										 uint8_t Dhpf, uint8_t Dlpf);
+
+	virtual int MS_Max30001_ECG_Stop();
+
+	// ECG Max30001 RtoR Initialization Function
+	virtual  int MS_Max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
+			uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
+			uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint);
+
+	virtual int MS_Max30001_RtoR_Stop();
+
+	// This function enables the interrupts for specific parameters
+	virtual int MS_max30001_INT_assignment(uint8_t en_enint_loc,     uint8_t en_eovf_loc,  uint8_t en_fstint_loc,
+										   uint8_t en_dcloffint_loc, uint8_t en_bint_loc,  uint8_t en_bovf_loc,
+										   uint8_t en_bover_loc,     uint8_t en_bundr_loc, uint8_t en_bcgmon_loc,
+										   uint8_t en_pint_loc,      uint8_t en_povf_loc,  uint8_t en_pedge_loc,
+										   uint8_t en_lonint_loc,    uint8_t en_rrint_loc, uint8_t en_samp_loc,
+										   uint8_t intb_Type,        uint8_t int2b_Type);
+
+	// call sync function of the sensor
+	int MS_max30001sync();
+
+	// That Function Should Only Be called from interrupt context
+	void Max30001Helper_AddDataToQueue(uint32_t id, uint32_t *buffer, uint32_t number);
+
+
+   /**
+    *
+    * @param[in] status the value to set the interrupt status
+    * 			        variable
+    */
+	void  Max30001Helper_setInterruptStatus(bool status);
+
+	/**
+	 *
+	 * @return status of the interrupt
+	 */
+	bool  Max30001Helper_getInterruptStatus();
+
+	/**
+	 * @brief Call the interrupt handler of Max30001
+	 */
+	void Max30001Helper_max30001_int_handler(void);
+
+	int MAX30001_Helper_Queue_Size(void);
+
+	int  MAX30001_Helper_Invert_Waveform(void);
+
+	enum Max30001_Helper_ECG_Sample_Rate {
+		k512SPS = 0b00,
+		k256SPS = 0b01,
+		k128SPS = 0b10
+	};
+
+	/**
+	 *
+	 * @param ecg_rate
+	 * @return
+	 */
+	int Max30001Helper_SetECGSampleRate(Max30001_Helper_ECG_Sample_Rate ecg_rate);
+
+private:
+
+	/***
+	 *
+	 * @return
+	 */
+	void Max30001_Helper_ConvertRtoRtoBPM(uint16_t rtor_val);
+
+	uint8_t m_rtor_last_bpm_;
+
+	void Max30001_Helper_SetInterrupts(char en);
+
+	/**
+	 *
+	 */
+	int Max30001Helper_InitializeECGandRtoR();
+
+	ecg_sensor_report m_ecg_packet_;
+	MAX30001 *m_max30001;
+	InterruptIn *m_max30001_InterruptB;
+	InterruptIn *m_max30001_Interrupt2B;
+	queue_t mmax30001_queue;
+};
+
+
+void StreamPacketUint32(uint32_t id, uint32_t *buffer, uint32_t number);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30205/MAX30205.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,225 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+ 
+ 
+#include "MAX30205.h"
+
+
+//******************************************************************************
+MAX30205::MAX30205(I2C *i2c, uint8_t slaveAddress):
+m_i2c(i2c), m_writeAddress(slaveAddress << 1), 
+m_readAddress((slaveAddress << 1) | 1)
+{
+
+}
+
+
+//******************************************************************************
+MAX30205::~MAX30205(void) 
+{
+  //empty block
+}
+
+
+
+
+//******************************************************************************
+int32_t MAX30205::readTemperature(uint16_t &value) 
+{
+  return readRegister(MAX30205::Temperature, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readConfiguration(Configuration_u &config)
+{
+    uint16_t data;
+    
+    int32_t result = readRegister(MAX30205::Configuration, data);
+    if(result == 0)
+    {
+        config.all = (0x00FF & data);
+    }
+    
+    return result;
+    
+}
+
+
+//******************************************************************************    
+int32_t MAX30205::writeConfiguration(const Configuration_u config)
+{
+    uint16_t local_config = (0x00FF & config.all);
+    
+    return writeRegister(MAX30205::Configuration, local_config);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readTHYST(uint16_t &value) 
+{
+  return readRegister(MAX30205::THYST, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeTHYST(uint16_t value) 
+{
+  return writeRegister(MAX30205::THYST, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readTOS(uint16_t &value)
+{
+    return readRegister(MAX30205::TOS, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeTOS(const uint16_t value)
+{
+    return writeRegister(MAX30205::TOS, value);
+}
+
+
+//******************************************************************************
+float MAX30205::toCelsius(uint32_t rawTemp) 
+{
+  uint8_t val1, val2;
+  float result;
+  
+  val1 = (rawTemp >> 8);
+  val2 = (rawTemp & 0xFF);
+  
+  result = static_cast<float>(val1 + (val2/ 256.0F));
+  
+  return result;
+}
+
+
+//******************************************************************************
+float MAX30205::toFahrenheit(float temperatureC) 
+{
+  return((temperatureC * 1.8F) + 32.0f);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeRegister(Registers_e reg, uint16_t value) 
+{
+  int32_t result;
+  
+  uint8_t hi = ((value >> 8) & 0xFF);
+  uint8_t lo = (value & 0xFF);
+  char cmdData[3] = {reg, hi, lo};
+  
+  result = m_i2c->write(m_writeAddress, cmdData, 3);
+  
+  return result;
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readRegister(Registers_e reg, uint16_t &value) 
+{
+  int32_t result;
+  
+  char data[2];
+  char cmdData[1] = {reg};
+  
+  result = m_i2c->write(m_writeAddress, cmdData, 1);
+  if(result == 0)
+  {
+      result = m_i2c->read(m_readAddress, data, 2);
+      if (result == 0)
+      {
+          value = (data[0] << 8) + data[1];
+      }
+  }
+  
+  return result;
+}
+
+int MAX30205::dump_registers(addr_val_pair *reg_vals){
+    int i;
+    int ret = 0;
+	uint16_t val;
+    for (i = 0x00; i <= 0x03; i++) {
+        reg_vals[i].addr = i;
+        ret |= readRegister(static_cast<Registers_e>(i), val);
+		reg_vals[i].val = val;
+    }
+
+	return ret;
+}
+
+const char *MAX30205::get_sensor_part_name()
+{
+	return "max30205";
+}
+
+const char *MAX30205::get_sensor_algo_ver()
+{
+	return "dummy_algo_ver";
+}
+
+
+int MAX30205::sensor_enable(int enable){
+	int32_t ret;
+	Configuration_u config;
+
+
+	ret = readConfiguration(config);
+	if(ret != 0)
+		return ret;
+
+	if(enable){
+		config.bits.shutdown = 0;
+	}else{
+		config.bits.shutdown = 1;
+	}
+
+	return writeConfiguration(config);
+}
+
+/**
+* @brief	Get sensor ID.
+*
+* @returns	Sensor ID number.
+*/
+unsigned char MAX30205::get_sensor_id() {
+
+	return( SENSOR_ID_MAX30205 );
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX30205/MAX30205.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+#ifndef __MAX30205_H_
+#define __MAX30205_H_
+
+#include "mbed.h"
+#include "MaximSensor.h"
+
+#define	SENSOR_ID_MAX30205	0x03
+
+/**
+ * @brief Library for the MAX30205\n
+ * The MAX30205 temperature sensor accurately measures temperature and provide 
+ * an overtemperature alarm/interrupt/shutdown output. This device converts the 
+ * temperature measurements to digital form using a high-resolution, 
+ * sigma-delta, analog-to-digital converter (ADC). Accuracy meets clinical 
+ * thermometry specification of the ASTM E1112 when soldered on the final PCB. 
+ * Communication is through an I2C-compatible 2-wire serial interface.
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "max32630fthr.h"
+ * #include "MAX30205.h"
+ * 
+ * MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
+ *
+ * //Get I2C instance
+ * I2C i2cBus(I2C1_SDA, I2C1_SCL);
+ *
+ * //Get temp sensor instance
+ * MAX30205 bodyTempSensor(i2cBus, 0x4D); //Constructor takes 7-bit slave adrs
+ *
+ * int main(void) 
+ * {
+ *	 //use sensor
+ * }
+ * @endcode
+ */
+
+class MAX30205: public MaximSensor
+{
+	
+public:
+	/// MAX30205 Register Addresses
+	enum Registers_e 
+	{
+		Temperature   = 0x00,
+		Configuration = 0x01,
+		THYST		 = 0x02,
+		TOS		   = 0x03
+	};
+	
+	///MAX30205 Configuration register bitfields
+	union Configuration_u
+	{
+		uint8_t all;
+		struct BitField_s
+		{
+			uint8_t shutdown	: 1;
+			uint8_t comp_int	: 1;
+			uint8_t os_polarity : 1;
+			uint8_t fault_queue : 2;
+			uint8_t data_format : 1;
+			uint8_t timeout	 : 1;
+			uint8_t one_shot	: 1;
+		}bits;
+	};
+	
+	/**
+	* @brief  Constructor using reference to I2C object
+	* @param i2c - Reference to I2C object
+	* @param slaveAddress - 7-bit I2C address
+	*/
+	MAX30205(I2C *i2c, uint8_t slaveAddress);
+
+	/** @brief Destructor */
+	~MAX30205(void);
+
+	/**
+	* @brief Read the temperature from the device into a 16 bit value
+	* @param[out] value - Raw temperature data on success
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t readTemperature(uint16_t &value);
+	
+	/**
+	* @brief Read the configuration register
+	* @param config - Reference to Configuration type
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t readConfiguration(Configuration_u &config);
+	
+	/**
+	* @brief Write the configuration register with given configuration
+	* @param config - Configuration to write
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t writeConfiguration(const Configuration_u config);
+
+	/**
+	* @brief Read the THYST value from a specified device instance
+	* @param[out] value - THYST register value on success
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t readTHYST(uint16_t &value);
+
+	/**
+	* @brief Write the THYST to a device instance
+	* @param value - 16-bit value to write
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t writeTHYST(const uint16_t value);
+	
+	/**
+	* @brief Read the TOS value from device
+	* @param[out] value - TOS register value on success
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t readTOS(uint16_t &value);
+
+	/**
+	* @brief Write the TOS register
+	* @param value - 16-bit value to write
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t writeTOS(const uint16_t value);
+
+	/**
+	* @brief Convert a raw temperature value into a float
+	* @param rawTemp - raw temperature value to convert
+	* @return the convereted value in degrees C
+	*/
+	float toCelsius(uint32_t rawTemp);
+
+	/**
+	* @brief Convert the passed in temperature in C to Fahrenheit
+	* @param temperatureC Temperature in C to convert
+	* @returns Returns the converted Fahrenheit value
+	*/
+	float toFahrenheit(float temperatureC);
+	
+//protected:
+
+	/** 
+	* @brief Write register of device at slave address
+	* @param reg - Register address
+	* @param value - Value to write
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t writeRegister(Registers_e reg, uint16_t value);
+
+	/**
+	* @brief  Read register of device at slave address
+	* @param reg - Register address
+	* @param[out] value - Read data on success
+	* @return 0 on success, non-zero on failure
+	*/
+	int32_t readRegister(Registers_e reg, uint16_t &value);
+
+	/**
+	* @brief	Dump Maxim Sensor registers.
+	* @details  Fill out register values into list
+	*
+	* @returns  0 on success, negative error code on failure.
+	*/
+	virtual int dump_registers(addr_val_pair *reg_values);
+
+
+	/**
+	* @brief	Get sensor ID.
+	*
+	* @returns	Sensor ID number.
+	*/
+	unsigned char get_sensor_id();
+
+	const char *get_sensor_part_name();
+	const char *get_sensor_algo_ver();
+
+									// sc... added functions
+	// *************************************************************************** //
+	/* @brief	Enables Maxim Sensor.
+	* @details	Enable IRQ, enable LEDs, enable AGC
+	*
+	* @param[in]	enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int sensor_enable(int enable);
+
+
+	// *************************************************************************** //
+
+private:
+	/// I2C object
+	I2C  *m_i2c;
+	/// Device slave addresses
+	uint8_t m_writeAddress, m_readAddress;
+};
+
+#endif /* __MAX30205_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX8614X/MAX8614X.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,631 @@
+/*******************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#include "MAX8614X.h"
+#include "PpgComm.h"
+#include "Peripherals.h"
+
+#define ARRAY_SIZE(array)			(sizeof(array)/sizeof(array[0]))
+
+#define MAX8614X_AGC_DEFAULT_LED_OUT_RANGE			50 //AGC Range parameter
+#define MAX8614X_AGC_INCREMENT_MID      			15 //AGC Range parameter MID
+#define MAX8614X_AGC_INCREMENT_TOP			        15 //AGC Range parameter TOP
+
+MAX8614X::MAX8614X(SPI &spiBus, DigitalOut &cs, PinName pin)
+:m_ir(pin), m_spiBus(spiBus), m_cs(cs)
+{
+	m_cs = 1;
+	kMax8614xDefaultLedOutRange = MAX8614X_AGC_DEFAULT_LED_OUT_RANGE;
+
+}
+
+int MAX8614X::readRegister(uint8_t reg, uint8_t *data, int len)
+{
+	int i = 0;
+
+	m_cs = 0;
+
+	m_spiBus.write(reg);
+	m_spiBus.write(0x80);
+	for(; i < len; i++) { /*TODO: make len unsigned*/
+		data[i] = m_spiBus.write(0x00);
+	}
+
+	m_cs = 1;
+
+	return 0; /*TODO: handle error cases*/
+}
+
+int MAX8614X::writeRegister(uint8_t reg, const uint8_t data)
+{
+	m_cs = 0;
+
+	m_spiBus.write(reg);
+	m_spiBus.write(0x00);
+	m_spiBus.write(data);
+
+	m_cs = 1;
+
+	return 0; /*TODO: handle error cases*/
+}
+
+int MAX8614X::writeBlock(const RegisterMap reg_block[], unsigned int size)
+{
+	unsigned int i;
+	int ret = 0;
+
+	for (i = 0; i < size; i++) {
+		ret = writeRegister((Registers) reg_block[i].addr,
+				reg_block[i].val);
+		if (ret < 0) {
+			pr_err("writeRegister failed. ret: %d", ret);
+			return ret;
+		}
+	}
+
+	return ret;
+}
+
+int MAX8614X::get_part_info(uint8_t *part_id, uint8_t *rev_id)
+{
+	uint32_t i;
+	int ret;
+	uint8_t buf[2];
+	const uint8_t max8614x_part_ids[] = {
+		MAX86140_PART_ID_VAL,
+		MAX86141_PART_ID_VAL,
+		MAX86142_PART_ID_VAL,
+		MAX86143_PART_ID_VAL,
+	};
+
+	ret = readRegister(MAX8614X_REV_ID_REG, buf, 2);
+	if (ret < 0) {
+		pr_err("readRegister failed. ret: %d", ret);
+		return ret;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(max8614x_part_ids); i++) {
+		if (buf[1] == max8614x_part_ids[i]) {
+			*rev_id = buf[0];
+			*part_id = buf[1];
+			return 0;
+		}
+	}
+
+	// Unsupported part
+	return -1;
+}
+
+int MAX8614X::get_num_samples_in_fifo()
+{
+	int fifo_ovf_cnt;
+	uint8_t fifo_data[4];
+	uint32_t num_samples;
+	int ret;
+
+	ret = readRegister(MAX8614X_OVF_CNT_REG, fifo_data, 2);
+	if (ret < 0) {
+		pr_err("readRegister failed. ret: %d", ret);
+		return ret;
+	}
+
+	fifo_ovf_cnt = fifo_data[0] & MAX8614X_OVF_CNT_MASK;
+	num_samples = fifo_data[1];
+
+	if (num_samples >= MAX8614X_MAX_FIFO_DEPTH) {
+		pr_err("# FIFO is Full. OVF: %d num_samples: %lu",
+				fifo_ovf_cnt, num_samples);
+	}
+
+	return num_samples;
+}
+
+int MAX8614X::read_fifo_data(uint8_t *fifo_data, int num_samples)
+{
+	uint16_t num_bytes = num_samples * MAX8614X_DATA_WORD_SIZE;
+	int ret = 0;
+
+//	const struct RegisterMap test_clk_enable[] = {
+//		{0xFF, 0x54},
+//		{0xFF, 0x4D},
+//		{0x81, 0x20},
+//		{0xFF, 0x00}
+//	};
+//
+//	const struct RegisterMap test_clk_disable[] = {
+//		{0xFF, 0x54},
+//		{0xFF, 0x4D},
+//		{0x81, 0x00},
+//		{0xFF, 0x00}
+//	};
+
+//	ret = writeBlock(test_clk_enable, ARRAY_SIZE(test_clk_enable));
+//	if (ret < 0) {
+//		pr_err("writeBlock failed. ret: %d", ret);
+//		return ret;
+//	}
+
+	fifo_data[0] = MAX8614X_FIFO_DATA_REG;
+	ret = readRegister(MAX8614X_FIFO_DATA_REG, fifo_data, num_bytes);
+	if (ret < 0) {
+		pr_err("readRegister failed. ret: %d", ret);
+		return ret;
+	}
+
+//	ret = writeBlock(test_clk_disable, ARRAY_SIZE(test_clk_disable));
+//	if (ret < 0) {
+//		pr_err("writeBlock failed. ret: %d", ret);
+//		return ret;
+//	}
+
+	return ret;
+}
+
+void MAX8614X::irq()
+{
+	irq_triggered = true;
+}
+
+int MAX8614X::irq_handler()
+{
+	int ret;
+	int_status_t status;
+	irq_triggered = false;
+
+	ret = readRegister(MAX8614X_INT_STATUS1_REG, status.val, 2);
+	if (ret < 0) {
+		pr_err("readRegister failed. ret: %d", ret);
+		return -1;
+	}
+	pr_debug("Status reg: %X %X", status.val[0], status.val[1]);
+
+	if (status.a_full || status.data_rdy) {
+		fifo_irq_handler();
+	}
+
+	if (status.die_temp_rdy) {
+		pr_debug("Pwr_rdy interrupt was triggered.");
+	}
+
+	if (status.pwr_rdy) {
+		pr_info("Pwr_rdy interrupt was triggered.");
+	}
+
+	if (status.die_temp_rdy) {
+		read_die_temp();
+	}
+
+	if (status.vdd_oor) {
+		vdd_oor_cnt++;
+		pr_info("VDD Out of range cnt: %d", vdd_oor_cnt);
+	}
+	return 0;
+}
+
+int MAX8614X::fifo_irq_handler()
+{
+	uint8_t fifo_buf[MAX8614X_MAX_FIFO_DEPTH * MAX8614X_DATA_WORD_SIZE] = {0};
+	int ret;
+	int num_samples = 0;
+	static int last_samples[DATA_TYPE_PPG2_LEDC4];
+	fifo_data_t fifo_data;
+	uint16_t idx;
+	int i;
+	static ppg_data_t ppg_data;
+	static uint32_t ppg_data_ack = 0;
+	const uint32_t ir_green_red_ppg_type = ((1 << DATA_TYPE_PPG1_LEDC1) |
+											(1 << DATA_TYPE_PPG1_LEDC2) |
+											(1 << DATA_TYPE_PPG1_LEDC3));
+
+	num_samples = get_num_samples_in_fifo();
+	if (num_samples <= 0) {
+		pr_err("get_num_samples_in_fifo failed. err: %d", num_samples);
+		return -1;
+	}
+
+	pr_debug("num_samples: %d", num_samples);
+
+	ret = read_fifo_data(fifo_buf, num_samples);
+	if (ret < 0) {
+		pr_err("read_fifo_data failed. ret: %d", ret);
+		return -1;
+	}
+
+	for (i = 0; i < num_samples; i++) {
+		idx = MAX8614X_DATA_WORD_SIZE * i;
+		fifo_data.raw = fifo_buf[idx + 0] << 16
+				| fifo_buf[idx + 1] << 8
+				| fifo_buf[idx + 2];
+		if (fifo_data.type == DATA_TYPE_INVALID_DATA || fifo_data.type == 0) {
+			pr_err("Received invalid data. data: %X, i: %d",
+					(unsigned int)fifo_data.raw, i);
+
+			continue;
+		}
+		pr_debug("\ttype: %lu, val: %lu (%lX)",
+				fifo_data.type, fifo_data.val, fifo_data.val);
+
+		if (fifo_data.type > DATA_TYPE_PPG2_LEDC3) {
+			pr_err("Wrong Data Type: -> Type: %lu, val:%lu, Raw:%lu",
+					fifo_data.type, fifo_data.val, fifo_data.raw);
+			continue;
+		}
+
+		if (fifo_data.type > 0 && fifo_data.type < DATA_TYPE_PPG2_LEDC3) {
+			last_samples[fifo_data.type] = fifo_data.val;
+		}
+
+		if (fifo_data.type == DATA_TYPE_PPG1_LEDC1) {
+			max8614x_agc_handler(&led_ctrl, last_samples);
+		}
+
+		if (fifo_data.type == DATA_TYPE_PPG1_LEDC1) {
+			ppg_data.ir = fifo_data.val;
+		} else if (fifo_data.type == DATA_TYPE_PPG1_LEDC2) {
+			ppg_data.red = fifo_data.val;
+		} else if (fifo_data.type == DATA_TYPE_PPG1_LEDC3) {
+			ppg_data.green = fifo_data.val;
+		}
+
+		ppg_data_ack |= 1 << fifo_data.type;
+
+		if ((ppg_data_ack & ir_green_red_ppg_type) != ir_green_red_ppg_type ){
+			continue;
+		}
+		ppg_data_ack = 0;
+
+		if (ppg_queue.size() >= MAX8614X_COMMON_QUEUE_SIZE) {
+			pr_err("ppg_queue is full.");
+		} else {
+			ppg_queue.push(ppg_data);
+		}
+	}
+	return 0;
+}
+
+int MAX8614X::get_sensor_report(ppg_sensor_report &sensor_report)
+{
+	int32_t ret;
+	uint32_t irleddata, redleddata, greenleddata;
+	//TODO: Implement
+	ret = dequeue_from_fifo_queue(&irleddata, &redleddata, &greenleddata);
+	if(ret == RTN_NO_ERROR){
+		sensor_report.grn = irleddata;
+		sensor_report.grn2 = redleddata;
+	}else{
+		return -1;
+	}
+	return 0;
+}
+
+int MAX8614X::enable_die_temp()
+{
+	int ret = 0;
+
+	ret = writeRegister(MAX8614X_DIE_TEMP_CFG_REG, MAX8614X_DIE_TEMP_EN);
+	if (ret < 0) {
+		pr_err("SPI Communication error");
+	}
+
+	return ret;
+}
+
+int MAX8614X::read_die_temp()
+{
+	int ret = 0;
+	uint8_t buf[2];
+
+	ret = readRegister(MAX8614X_DIE_TEMP_INT_REG, buf, 2);
+	if (ret < 0) {
+		pr_err("Unable to read die_temp. ret: %d", ret);
+		return ret;
+	}
+
+	die_temp.frac = (uint8_t)buf[1] & MAX8614X_DIE_TEMP_FRAC_MASK;
+	die_temp.tint = (uint8_t)buf[0];
+
+	pr_debug("Die temp: %d - %d, %d", die_temp.val, buf[0], buf[1]);
+	return enable_die_temp();
+}
+
+int MAX8614X::reset()
+{
+	int ret = 0;
+
+	ret = writeRegister(MAX8614X_SYSTEM_CTRL_REG,
+			MAX8614X_SYSTEM_RESET_MASK);
+	if (ret < 0) {
+		pr_err("writeRegister failed. ret: %d", ret);
+		return ret;
+	}
+
+	/* Reset ppg_queue */
+	std::queue<ppg_data_t> empty_queue;
+	std::swap(ppg_queue, empty_queue);
+
+	led_control_reset(&led_ctrl);
+
+	return ret;
+}
+
+int MAX8614X::poweroff()
+{
+	int ret = 0;
+
+	ret = writeRegister(MAX8614X_SYSTEM_CTRL_REG,
+			MAX8614X_SYSTEM_SHDN_MASK);
+	if (ret < 0) {
+		pr_err("writeRegister failed. ret: %d", ret);
+		return ret;
+	}
+
+	return ret;
+}
+
+int MAX8614X::init()
+{
+	int ret = RTN_NO_ERROR;
+	uint8_t part_id, rev_id;
+
+	ret = get_part_info(&part_id, &rev_id);
+	if (ret < 0) {
+		pr_err("MAX8614X is not detected. Part_id: 0x%X, Rev_Id: 0x%X",
+				part_id, rev_id);
+		ret = RTN_ERR_NOT_8614x;
+		goto fail;
+	}
+	pr_info("MAX8614X detected. Part_id: 0x%X, Rev_Id: 0x%X", part_id, rev_id);
+
+	ret = writeRegister(MAX8614X_SYSTEM_CTRL_REG,
+			MAX8614X_SYSTEM_RESET_MASK);
+	if (ret < 0) {
+		pr_err("writeRegister failed. ret: %d", ret);
+		goto fail;
+	}
+
+	die_temp.frac = 0;
+	die_temp.tint = 0;
+
+	led_control_init(&led_ctrl); /*TODO: after porting agc, test */
+
+	irq_triggered = false;
+	m_ir.fall(Callback<void()>(this, &MAX8614X::irq));
+
+	return ret;
+fail:
+	pr_err("Init failed. ret: %d", ret);
+	return ret;
+}
+
+int MAX8614X::sensor_enable(int enable)
+{
+	int ret = RTN_NO_ERROR;
+	uint8_t led_seq[3];
+
+	RegisterMap_t ppg_init_cfg[] = {
+		{ MAX8614X_SYSTEM_CTRL_REG, MAX8614X_SYSTEM_RESET_MASK},
+		{ MAX8614X_PPG_CFG1_REG, MAX8614X_PPG_LED_PW_115_2_US_MASK // PPG_LED_PW = 3 (115.2us)
+							   | MAX8614X_PPG1_ADC_RGE_32768_MASK // PPG1_ADC_RGE = 3(32768nA)
+							   | MAX8614X_PPG2_ADC_RGE_32768_MASK }, // PPG2_ADC_RGE = 3(32768nA)
+		{ MAX8614X_PPG_CFG2_REG, MAX8614X_PPG_SR_25_SPS},
+		{ MAX8614X_LED_SEQ1_REG, 0x24},
+		{ MAX8614X_LED_SEQ2_REG, 0x03},
+		{ MAX8614X_LED1_PA_REG, 0x80},
+		{ MAX8614X_LED2_PA_REG, 0x80},
+		{ MAX8614X_LED3_PA_REG, 0x00},
+		{ MAX8614X_LED_RANGE1_REG, MAX8614X_LED1_RGE_25mA_MASK
+								 | MAX8614X_LED2_RGE_25mA_MASK
+								 | MAX8614X_LED3_RGE_25mA_MASK},
+		{ MAX8614X_FIFO_CFG1_REG, MAX8614X_INT1_EN_DATA_RDY_MASK},
+								// 24 (ir+r+g) samples in fifo, size is 128/3=42
+		{ MAX8614X_FIFO_CFG2_REG, MAX8614X_FLUSH_FIFO_MASK
+								| MAX8614X_FIFO_STAT_CLR_MASK
+								| MAX8614X_A_FULL_TYPE_MASK // Try 0
+								| MAX8614X_FIFO_RO_MASK
+								| MAX8614X_FIFO_EN_MASK},
+		{ MAX8614X_INT_ENABLE1_REG, MAX8614X_INT1_EN_A_FULL_MASK
+								  | MAX8614X_INT1_EN_DIE_TEMP_MASK
+								  | MAX8614X_INT1_EN_VDD_OOR_MASK},
+	};
+
+	if (enable) {
+		/* Read current sequence settings, and check what modes are open */
+		led_seq[0] = MAX8614X_LED_SEQ1_REG;
+		ret |= readRegister(MAX8614X_LED_SEQ1_REG, led_seq, 3);
+		if (ret < 0) {
+			pr_err("readRegister failed. ret: %d", ret);
+			return ret;
+		}
+
+		pr_debug("0-Sequence registers: %X %X %X", led_seq[0], led_seq[1], led_seq[2]);
+		ret |= writeBlock(ppg_init_cfg, ARRAY_SIZE(ppg_init_cfg));
+		led_seq[0] = MAX8614X_INT_STATUS1_REG;
+		ret |= readRegister(MAX8614X_INT_STATUS1_REG, led_seq, 3); // Mert: the len was 3 ?!
+		pr_debug("1-Sequence registers: %X %X %X", led_seq[0], led_seq[1], led_seq[2]);
+		if (ret < 0) {
+			pr_err("readRegister failed. ret: %d", ret);
+			return ret;
+		}
+		agc_enable(1);
+		pr_debug("Wrote register settings. ret: %d", ret);
+	} else {
+		ret = reset();
+		if (ret < 0) {
+			pr_err("reset failed. ret: %d", ret);
+			return ret;
+		}
+
+		ret = poweroff();
+		if (ret < 0) {
+			pr_err("poweroff failed. ret: %d", ret);
+			return ret;
+		}
+	}
+
+	return RTN_NO_ERROR;
+}
+
+int MAX8614X::agc_enable(int agc_enable)
+{
+	int ret = RTN_NO_ERROR;
+	led_ctrl.agc_is_enabled = !!agc_enable;
+	led_ctrl.lpm_is_enabled = !!agc_enable;
+	ret = led_prox_init(&led_ctrl, led_ctrl.lpm_is_enabled);
+	return ret;
+}
+
+int MAX8614X::dequeue_from_fifo_queue(uint32_t *ir, uint32_t *red, uint32_t *green)
+{
+	ppg_data_t ppg_data;
+
+	if (irq_triggered) {
+		irq_handler();
+	}
+
+	if (ppg_queue.size() <= 0) {
+		return RTN_ERR_QUEUE_EMPTY;
+	}
+	ppg_data = ppg_queue.front();
+	ppg_queue.pop();
+
+	pr_debug("%lu  %lu  %lu", ppg_data.ir, ppg_data.red, ppg_data.green);
+
+	*ir = ppg_data.ir;
+	*red = ppg_data.red;
+	*green = ppg_data.green;
+
+	return RTN_NO_ERROR;
+}
+// total number of registers to print are 57
+int MAX8614X::dump_registers(addr_val_pair *reg_vals)
+{
+	int i, j = 0;
+    int ret = 0;
+	uint8_t val;
+	// read 23 registers
+    for (i = 0x00; i <= 0x16; i++, j++) {
+        reg_vals[j].addr = i;
+        ret |= readRegister(i, &val, 1);
+		reg_vals[j].val = val;
+    }
+    // read 24 registers
+    for (i = 0x20; i <= 0x37; i++, j++) {
+        reg_vals[j].addr = i;
+        ret |= readRegister(i, &val, 1);
+		reg_vals[j].val = val;
+    }
+    // read 3 registers
+    for (i = 0x40; i <= 0x42; i++, j++) {
+        reg_vals[j].addr = i;
+        ret |= readRegister(i, &val, 1);
+		reg_vals[j].val = val;
+    }
+    // read 5 registers
+    for (i = 0xF0; i <= 0xF4; i++, j++) {
+        reg_vals[j].addr = i;
+        ret |= readRegister(i, &val, 1);
+		reg_vals[j].val = val;
+    }
+    // read 2 registers
+    for (i = 0xFE; i <= 0xFF; i++, j++) {
+        reg_vals[j].addr = i;
+        ret |= readRegister(i, &val, 1);
+		reg_vals[j].val = val;
+    }
+	return ret;
+}
+
+const char * MAX8614X::get_sensor_part_name()
+{
+#if 1
+	/* For sensor studio */
+	return "max86141";
+#else
+	uint8_t part_id, rev_id;
+
+	get_part_info(&part_id, &rev_id);
+
+	switch (part_id) {
+	case MAX86140_PART_ID_VAL:
+		return "max86140";
+	case MAX86141_PART_ID_VAL:
+		return "max86141";
+	case MAX86142_PART_ID_VAL:
+		return "max86142";
+	case MAX86143_PART_ID_VAL:
+		return "max86143";
+	}
+	return "unknown";
+#endif
+}
+
+const char * MAX8614X::get_sensor_name()
+{
+	return "ppg";
+}
+
+const char * MAX8614X::get_sensor_algo_ver()
+{
+	return "dummy_algo_ver";
+}
+
+
+//@brief Get status of the sensor: if PROX mode return true
+unsigned char MAX8614X::is_sensor_in_daq_mode(){
+	return (led_ctrl.state == LED_DATA_ACQ);
+}
+
+//@brief set agc range
+void MAX8614X::set_agc_range(enum Max8614x_Agc_Range RangeLevel){
+
+	if(RangeLevel == kRangeHigh)
+		kMax8614xDefaultLedOutRange = MAX8614X_AGC_DEFAULT_LED_OUT_RANGE + MAX8614X_AGC_INCREMENT_TOP;
+	else if(RangeLevel == kRangeMid)
+		kMax8614xDefaultLedOutRange = MAX8614X_AGC_DEFAULT_LED_OUT_RANGE + MAX8614X_AGC_INCREMENT_MID;
+	else
+		kMax8614xDefaultLedOutRange= MAX8614X_AGC_DEFAULT_LED_OUT_RANGE;
+
+//	printf("Set agc range as: %d\r\n", kMax8614xDefaultLedOutRange);
+}
+
+
+/**
+* @brief	Get sensor ID.
+*
+* @returns	Sensor ID number.
+*/
+unsigned char MAX8614X::get_sensor_id() {
+
+	return( SENSOR_ID_MAX30205 );
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX8614X/MAX8614X.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,587 @@
+/*******************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#ifndef _MAX8614X_H_
+#define _MAX8614X_H_
+
+#include "mbed.h"
+#include <queue>
+#include "MaximSensor.h"
+#include "PpgComm.h"
+
+#define	SENSOR_ID_MAX8614X	0x02
+
+/**
+ * @brief	MAX8614X - supports MAX8614X object with SPI interface
+ * @details	The MAX8614X is a complete integrated optical data acquistion
+ * 	system, ideal for optical pulse oximetry and heart rate detection
+ * 	applications. High resolution optical readout signal processing channels
+ * 	with ambient light cancellation and high current LED driver DACS form a
+ * 	complete optical readout signal chain. Features are ultra-low power heart
+ * 	rate monitoring, SpO2 monitoring, SmO2 & StO2 detection.
+ * 	Typical applications are for wearable devices, fitness devices, clinical
+ * 	monitoring, partical detection.
+ */
+class MAX8614X: public MaximSensor
+{
+public:
+	/* PUBLIC CONST VARIABLES */
+
+	///Return value on success.
+	static const int8_t RTN_NO_ERROR = 0;
+	///Return value on unsupported MAX8614x.
+	static const int8_t RTN_ERR_UNSOPPORTED_PART = -1;
+	///Return value on reading wrong-type data from sensor FIFO
+	static const int8_t RTN_ERR_WRONG_DATA_TYPE = -2;
+	///Return value on no plugged 8614x.
+	static const int8_t RTN_ERR_NOT_8614x = -3;
+	///Return value on memory allocation failure
+	static const int8_t RTN_ERR_MEM_ALLOC_FAIL = -4;
+	///Return value on internal queue init
+	static const int8_t RTN_ERR_QUEUE_INIT = -5;
+	///Return value on the case of no available data on queue
+	static const int8_t RTN_ERR_QUEUE_EMPTY = -6;
+
+	// AGC Range Enums:
+	enum Max8614x_Agc_Range{
+		kRangeLow,
+		kRangeMid,
+		kRangeHigh,
+	};
+
+	/// This is MAX8614X Registers
+	enum Registers
+	{
+		MAX8614X_INT_STATUS1_REG = 0x00,///< INT status REG is cleared when it is read
+		MAX8614X_INT_STATUS2_REG, ///< INT status set to 1 when the Authentication Algorithm completes
+		MAX8614X_INT_ENABLE1_REG, ///< Enables INT for FIFO Almost Full or DATA_RDY_EN or ALC_OVF ...
+		MAX8614X_INT_ENABLE2_REG, ///< Enables SHA_DONE interrupt
+		MAX8614X_FIFO_WR_PTR_REG, ///< Points to the location where the next sample will be written
+		MAX8614X_FIFO_RD_PTR_REG, ///< Points the location from where the processor gets the next sample from the FIFO
+		MAX8614X_OVF_CNT_REG, ///< FIFO Overflow Counter
+		MAX8614X_FIFO_DATA_CNT_REG, ///< Holds the number of items available in the FIFO for the host to read
+		MAX8614X_FIFO_DATA_REG, ///< FIFO_DATA
+		MAX8614X_FIFO_CFG1_REG, ///< Sets how many new samples can be written to the FIFO before the interrupt
+		MAX8614X_FIFO_CFG2_REG, ///< //0x0A
+		MAX8614X_SYSTEM_CTRL_REG = 0x0D, ///< System Control REG
+		MAX8614X_PPG_SYNC_CTRL_REG = 0x10, ///< Aborts current sample and starts a new sample
+		MAX8614X_PPG_CFG1_REG, ///< PPG config for adc range control, led_pw etc.
+		MAX8614X_PPG_CFG2_REG, ///< PPG config for sampling rate
+		MAX8614X_PPG_CFG3_REG, ///< PPG config for burst rate
+		MAX8614X_PROX_INT_THRES_REG, ///< Proximity Mode Interrupt Threshold
+		MAX8614X_PHOTO_DIODE_BIAS_REG, ///<
+		MAX8614X_FICKET_FENCE_REG, //0x16
+		MAX8614X_LED_SEQ1_REG = 0x20, ///< LED Sequence Register 1
+		MAX8614X_LED_SEQ2_REG,///< LED Sequence Register 2
+		MAX8614X_LED_SEQ3_REG, ///< LED Sequence Register 3
+		MAX8614X_LED1_PA_REG, ///< LED 1 Drive Current
+		MAX8614X_LED2_PA_REG, ///< LED 2 Drive Current
+		MAX8614X_LED3_PA_REG, ///< LED 3 Drive Current
+		MAX8614X_LED4_PA_REG, ///< LED 4 Drive Current
+		MAX8614X_LED5_PA_REG, ///< LED 5 Drive Current
+		MAX8614X_LED6_PA_REG, ///< LED 6 Drive Current
+		MAX8614X_LED_PILOT_PA_REG, ///< Proximity Mode LED Pulse Amplitude
+		MAX8614X_LED_RANGE1_REG, ///< LED range 1
+		MAX8614X_LED_RANGE2_REG, ///< LEd range 2 //0x2B
+		MAX8614X_DIE_TEMP_CFG_REG = 0x40,///< Enables one temperature measurement
+		MAX8614X_DIE_TEMP_INT_REG, ///< Stores the integer temperature data
+		MAX8614X_DIE_TEMP_FRAC_REG,///<
+		MAX8614X_SHA_CMD_REG = 0xF0, ///<
+		MAX8614X_SHA_CFG_REG, ///<
+		MAX8614X_MEMORY_CONTROL_REG, ///<
+		MAX8614X_MEMORY_INDEX_REG, ///<
+		MAX8614X_MEMORY_DATA_REG, ///<
+		MAX8614X_REV_ID_REG = 0xFE, ///< Chip Rev. ID Code
+		MAX8614X_PART_ID_REG, ///< Chip Part ID Code
+
+	};
+
+	///System Control
+	static const uint8_t MAX8614X_SYSTEM_RESET_MASK		= (0x01 << 0);
+	static const uint8_t MAX8614X_SYSTEM_SHDN_MASK		= (0x01 << 1);
+	static const uint8_t MAX8614X_SYSTEM_LP_BOOST		= (0x01 << 2);
+
+	/// Die Temperature
+	static const uint8_t MAX8614X_DIE_TEMP_EN			= (0x1 << 0);
+	static const uint8_t MAX8614X_DIE_TEMP_FRAC_MASK	= (0xF << 0);
+
+	///Sample rates
+	static const uint8_t MAX8614X_PPG_SR_25_SPS			= (0x00 << 3);
+	static const uint8_t MAX8614X_PPG_SR_50_SPS			= (0x01 << 3);
+	static const uint8_t MAX8614X_PPG_SR_84_SPS			= (0x02 << 3);
+	static const uint8_t MAX8614X_PPG_SR_100_SPS		= (0x03 << 3);
+	static const uint8_t MAX8614X_PPG_SR_200_SPS		= (0x04 << 3);
+	static const uint8_t MAX8614X_PPG_SR_400_SPS		= (0x05 << 3);
+	static const uint8_t MAX8614X_PPG_SR_512_SPS		= (0x10 << 3);
+	static const uint8_t MAX8614X_PPG_SR_1024_SPS		= (0x11 << 3);
+	static const uint8_t MAX8614X_PPG_SR_2048_SPS		= (0x12 << 3);
+	static const uint8_t MAX8614X_PPG_SR_4096_SPS		= (0x13 << 3);
+
+	/// LED Pulse Amplitude
+	static const uint8_t MAX8614X_LED1_RGE_MASK			= (0x3 << 0);
+	static const uint8_t MAX8614X_LED2_RGE_MASK			= (0x3 << 2);
+	static const uint8_t MAX8614X_LED3_RGE_MASK			= (0x3 << 4);
+
+	static const uint8_t MAX8614X_LED4_RGE_MASK			= (0x3 << 0);
+	static const uint8_t MAX8614X_LED5_RGE_MASK			= (0x3 << 2);
+	static const uint8_t MAX8614X_LED6_RGE_MASK			= (0x3 << 4);
+
+	static const uint8_t MAX8614X_LED1_RGE_25mA_MASK	= (0x0 << 0);
+	static const uint8_t MAX8614X_LED1_RGE_50mA_MASK	= (0x1 << 0);
+	static const uint8_t MAX8614X_LED1_RGE_75mA_MASK	= (0x2 << 0);
+	static const uint8_t MAX8614X_LED1_RGE_100mA_MASK	= (0x3 << 0);
+
+	static const uint8_t MAX8614X_LED2_RGE_25mA_MASK	= (0x0 << 2);
+	static const uint8_t MAX8614X_LED2_RGE_50mA_MASK	= (0x1 << 2);
+	static const uint8_t MAX8614X_LED2_RGE_75mA_MASK	= (0x2 << 2);
+	static const uint8_t MAX8614X_LED2_RGE_100mA_MASK	= (0x3 << 2);
+
+	static const uint8_t MAX8614X_LED3_RGE_25mA_MASK	= (0x0 << 4);
+	static const uint8_t MAX8614X_LED3_RGE_50mA_MASK	= (0x1 << 4);
+	static const uint8_t MAX8614X_LED3_RGE_75mA_MASK	= (0x2 << 4);
+	static const uint8_t MAX8614X_LED3_RGE_100mA_MASK	= (0x3 << 4);
+
+	/// PPG PW
+	static const uint8_t MAX8614X_PPG_LED_PW_14_4_US_MASK	= (0 << 0);
+	static const uint8_t MAX8614X_PPG_LED_PW_28_8_US_MASK	= (1 << 0);
+	static const uint8_t MAX8614X_PPG_LED_PW_57_6_US_MASK	= (2 << 0);
+	static const uint8_t MAX8614X_PPG_LED_PW_115_2_US_MASK	= (3 << 0);
+
+	/// PPG Range
+	static const uint8_t MAX8614X_PPG1_ADC_RGE_4096_MASK	= (0 << 2);
+	static const uint8_t MAX8614X_PPG1_ADC_RGE_8192_MASK	= (1 << 2);
+	static const uint8_t MAX8614X_PPG1_ADC_RGE_16384_MASK	= (2 << 2);
+	static const uint8_t MAX8614X_PPG1_ADC_RGE_32768_MASK	= (3 << 2);
+
+	static const uint8_t MAX8614X_PPG2_ADC_RGE_4096_MASK	= (0 << 4);
+	static const uint8_t MAX8614X_PPG2_ADC_RGE_8192_MASK	= (1 << 4);
+	static const uint8_t MAX8614X_PPG2_ADC_RGE_16384_MASK	= (2 << 4);
+	static const uint8_t MAX8614X_PPG2_ADC_RGE_32768_MASK	= (3 << 4);
+
+	///FIFO
+	static const uint8_t MAX8614X_FIFO_WR_PTR_MASK		= (0x7F << 0);
+	static const uint8_t MAX8614X_FIFO_RD_PTR_MASK		= (0x7F << 0);
+	static const uint8_t MAX8614X_OVF_CNT_MASK			= (0x7F << 0);
+	static const uint8_t MAX8614X_FIFO_A_FULL_MASK		= (0x7F << 0);
+	static const uint8_t MAX8614X_FIFO_EN_MASK			= (0x01 << 0);
+	static const uint8_t MAX8614X_FIFO_RO_MASK			= (0x01 << 1);
+	static const uint8_t MAX8614X_A_FULL_TYPE_MASK		= (0x01 << 2);
+	static const uint8_t MAX8614X_A_FULL_RPT			= (0x00 << 2);
+	static const uint8_t MAX8614X_A_FULL_ONCE			= (0x01 << 2);
+	static const uint8_t MAX8614X_FIFO_STAT_CLR_MASK	= (0x01 << 3);
+	static const uint8_t MAX8614X_FLUSH_FIFO_MASK		= (0x01 << 4);
+
+	/// Status
+	static const uint8_t MAX8614X_INT1_EN_A_FULL_MASK	= (0x1 << 7);
+	static const uint8_t MAX8614X_INT1_EN_DATA_RDY_MASK	= (0x1 << 6);
+	static const uint8_t MAX8614X_INT1_EN_DIE_TEMP_MASK	= (0x1 << 2);
+	static const uint8_t MAX8614X_INT1_EN_VDD_OOR_MASK	= (0x1 << 1);
+
+	/* PUBLIC TYPE DEFINITIONS */
+
+	/// RegisterMap entry to keep a register addr and its value
+	typedef struct RegisterMap {
+		uint8_t addr; ///< Register addr
+		uint8_t val;	///< Value that will be written to this register
+	} RegisterMap_t;
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	///@brief MAX8614X Constructor.\n
+	///
+	///On Entry:
+	///@param[in] spiBus - reference to SPI bus for this device
+	///@param[in] cs - reference to chip select of SPI bus for this device
+	///@param[in] intPin - pin name to data ready INT for this device
+	///On Exit:
+	///
+	///@returns none
+	MAX8614X(SPI &spiBus, DigitalOut &cs, PinName intPin);
+
+	///@brief Reads from register.\n
+	///
+	///On Entry:
+	///@param[in] data - pointer to memory for storing read data
+	///@param[in] len - len to read data
+	///
+	///On Exit:
+	///@param[out] data - holds contents of read register on success
+	///
+	///@returns 0 on success, non 0 on failure
+	virtual int readRegister(uint8_t reg, uint8_t *data, int len);
+
+	///@brief Writes a single register.\n
+	///
+	///On Entry:
+	///@param[in] data - data to write to register
+	///
+	///@returns 0 on success, non 0 on failure
+	virtual int writeRegister(uint8_t reg, const uint8_t data);
+
+	///@brief Writes a block of registers\n
+	///On Entry:
+	///@param[in] reg_block - block of registers and values written to them
+	///@param[in] data - pointer to data to write to registers
+	///
+	///On Exit:
+	///@param[out] none
+	///
+	///@returns 0 on success, non 0 on failure
+	virtual int writeBlock(const RegisterMap reg_block[], unsigned int size);
+
+	///@brief Dequeue ppg sample from the queue\n
+	///
+	///On Entry:
+	///@param[in] ir - ref to int value
+	///@param[in] red - ref to int value
+	///@param[in] green - ref to int value
+	///
+	///On Exit:
+	///@param[out] ir - ref to int value
+	///@param[out] red - ref to int value
+	///@param[out] green - ref to int value
+	///
+	///@returns 0 on success, non 0 on no available sample on queue
+	virtual int dequeue_from_fifo_queue(uint32_t *ir, uint32_t *red, uint32_t *green);
+
+	///@brief Get Sensor Part ID and Rev ID\n
+	///On Entry:
+	///@param[in] part_id - ref to pre-allocated str
+	///@param[in] rev_id - ref to pre-allocated str
+	///
+	///On Exit:
+	///@param[out] part_id - ref to part ID
+	///@param[out] rev_id - ref to rev. ID
+	///
+	///@returns 0 on success, non 0 on failure
+	virtual int get_part_info(uint8_t *part_id, uint8_t *rev_id);
+
+	///@brief Initialize internal queue, counters etc.
+	///@returns 0 on success, non 0 on failure
+	int init();
+
+	///@brief Get hard-coded part name\n
+	///@returns max86141
+	virtual const char *get_sensor_part_name();
+
+	///@brief Get hard-coded sensor type\n
+	///@returns ppg
+	virtual const char *get_sensor_name();
+
+
+	///@brief Get hard-coded sensor algo_ver\n
+	///@returns algo_version
+	virtual const char *get_sensor_algo_ver();
+
+	///@brief Enable/disable sensor to generate PPG samples	\n
+	///@returns 0 on success, non 0 on failure
+	virtual int sensor_enable(int enable);
+
+	///@brief Enable/disable Automatic Gain Control \n
+	///
+	///On Entry:
+	///@param[in] enable - if it is 1, enable; otherwise disable
+	///
+	///On Exit:
+	///@returns 0 on success, non 0 on failure
+	virtual int agc_enable(int agc_enable);
+
+	///@brief Create list of register address/pair values
+	///@returns 0 on success, non 0 on failure
+	virtual int dump_registers(addr_val_pair *reg_vals);
+
+	///@brief Fill out ppg_sensor_report struct
+	///@param[in] sensor_report report to fill out
+	///@returns - on success, non 0 on failure
+	virtual int get_sensor_report(ppg_sensor_report &data_report);
+
+	//@brief Get status of the sensor: if PROX mode return true
+	unsigned char is_sensor_in_daq_mode();
+
+	//@brief set agc range
+	void set_agc_range(enum Max8614x_Agc_Range RangeLevel);
+
+	/**
+	* @brief	Get sensor ID.
+	*
+	* @returns	Sensor ID number.
+	*/
+	unsigned char get_sensor_id();
+
+
+	/* PUBLIC VARIABLES */
+	/// Interrupt object to handle DATA_RDY raise-up\n
+	InterruptIn m_ir;
+
+	 /*! Sensor output data to report */
+	 typedef struct {
+			uint32_t sample_cnt;
+			uint32_t ir;
+			uint32_t red;
+			uint32_t green;
+			float x;
+			float y;
+			float z;
+			float hr;
+			float spo2;
+			float resp_rate;
+			float hrv;
+	 } sensor_report;
+
+private:
+	/* PRIVATE CONST VARIABLES */
+	static const uint32_t MAX8614X_DATA_WORD_SIZE = 3;
+	static const uint32_t MAX8614X_MAX_FIFO_DEPTH = 128;
+	static const uint32_t MAX8614X_DATA_TYPE_MASK = (0x1F << 19);
+	static const uint32_t MAX8614X_COMMON_QUEUE_SIZE = 200;
+
+	/* PRIVATE TYPE DEFINITIONS	*/
+	enum LedSequence
+	{
+		DATA_SEQ_NONE,
+		DATA_SEQ_LED1,
+		DATA_SEQ_LED2,
+		DATA_SEQ_LED3,
+		DATA_SEQ_LED1_LED2,
+		DATA_SEQ_LED1_LED3,
+		DATA_SEQ_LED2_LED3,
+		DATA_SEQ_LED1_LED2_LED3,
+		DATA_SEQ_PILOT_LED1,
+		DATA_SEQ_AMBIENT,
+		DATA_SEQ_LED4_EXT_MUX,
+		DATA_SEQ_LED5_EXT_MUX,
+		DATA_SEQ_LED6_EXT_MUX,
+	};
+
+	enum DataTypes
+	{
+		DATA_TYPE_PPG1_LEDC1 = 0x01,
+		DATA_TYPE_PPG1_LEDC2,
+		DATA_TYPE_PPG1_LEDC3,
+		DATA_TYPE_PPG1_LEDC4,
+		DATA_TYPE_PPG1_LEDC5,
+		DATA_TYPE_PPG1_LEDC6,
+		DATA_TYPE_PPG2_LEDC1,
+		DATA_TYPE_PPG2_LEDC2,
+		DATA_TYPE_PPG2_LEDC3,
+		DATA_TYPE_PPG2_LEDC4,
+		DATA_TYPE_PPG2_LEDC5,
+		DATA_TYPE_PPG2_LEDC6,
+		DATA_TYPE_PPF1_LEDC1,
+		DATA_TYPE_PPF1_LEDC2,
+		DATA_TYPE_PPF1_LEDC3,
+		DATA_TYPE_PPF2_LEDC1 = 0x13,
+		DATA_TYPE_PPF3_LEDC2,
+		DATA_TYPE_PPF3_LEDC3,
+		DATA_TYPE_PROX1 = 0x19,
+		DATA_TYPE_PROX2,
+		DATA_TYPE_INVALID_DATA = 0x1E,
+		DATA_TYPE_TIME_STAMP,
+	};
+
+	enum PartIDs
+	{
+		MAX86140_PART_ID_VAL = 0x24,
+		MAX86141_PART_ID_VAL,
+		MAX86142_PART_ID_VAL,
+		MAX86143_PART_ID_VAL,
+	};
+
+	enum LedRanges
+	{
+		LED_RANGE_0_50,
+		LED_RANGE_50_100,
+		LED_RANGE_100_150,
+		LED_RANGE_150_200,
+	};
+
+	enum LedRangeSteps
+	{
+		LED_RANGE_STEP_25uA = 120,
+		LED_RANGE_STEP_50uA = 240,
+		LED_RANGE_STEP_75uA = 360,
+		LED_RANGE_STEP_100uA = 480,
+	};
+
+	typedef enum {
+		LED_1 = 0,
+		LED_2,
+		LED_3,
+		LED_4,
+		LED_5,
+		LED_6,
+		NUM_OF_LED,
+	} max8614x_led_t;
+
+	enum LED_CTRL_SM {
+		LED_PROX = 1,
+		LED_DATA_ACQ,
+	};
+
+	// AGC Range Parameter
+	uint8_t kMax8614xDefaultLedOutRange;
+
+	typedef union {
+		struct {
+			uint32_t val:19;
+			uint32_t type:5;
+			uint32_t:8;
+		};
+		uint32_t raw;
+	} fifo_data_t;
+
+	typedef union {
+		uint16_t val;
+		struct {
+			uint8_t tint;
+			uint8_t frac:4;
+			uint8_t:4;
+		};
+	} die_temp_t;
+
+	typedef union {
+		struct {
+			struct {
+				unsigned char pwr_rdy:1;
+				unsigned char vdd_oor:1;
+				unsigned char die_temp_rdy:1;
+				unsigned char led_compb:1;
+				unsigned char prox_int:1;
+				unsigned char alc_ovf:1;
+				unsigned char data_rdy:1;
+				unsigned char a_full:1;
+			};
+			struct {
+				unsigned char:7;
+				unsigned char sha_done:1;
+			};
+		};
+		uint8_t val[2];
+	} int_status_t;
+
+	union led_range {
+		struct {
+			uint8_t led1:2;
+			uint8_t led2:2;
+			uint8_t led3:2;
+			uint8_t:2;
+			uint8_t led4:2;
+			uint8_t led5:2;
+			uint8_t led6:2;
+			uint8_t:2;
+		};
+		uint8_t val[2];
+	};
+
+	typedef struct {
+		uint32_t green;
+		uint32_t ir;
+		uint32_t red;
+	} ppg_data_t;
+
+	struct led_control {
+		uint32_t diode_sum[NUM_OF_LED];
+		uint32_t state;
+		uint32_t prox_sum;
+		uint32_t prox_sample_cnt;
+		int32_t led_current[NUM_OF_LED];
+		uint32_t default_current[NUM_OF_LED];
+		int32_t agc_led_out_percent;
+		int32_t agc_corr_coeff;
+		int32_t agc_min_num_samples;
+		int32_t agc_sensitivity_percent;
+		int32_t change_by_percent_of_range[NUM_OF_LED];
+		int32_t change_by_percent_of_current_setting[NUM_OF_LED];
+		int32_t change_led_by_absolute_count[NUM_OF_LED];
+		uint32_t sample_cnt;
+		union led_range led_range_settings;
+		uint8_t led_ranges;
+		uint8_t agc_is_enabled;
+		uint8_t lpm_is_enabled;
+	};
+
+	/* PRIVATE VARIABLES */
+	SPI &m_spiBus;
+	DigitalOut m_cs;
+	std::queue<ppg_data_t> ppg_queue;
+	struct led_control led_ctrl;
+	int vdd_oor_cnt;
+	die_temp_t die_temp;
+	bool irq_triggered;
+
+	/* PRIVATE FUNCTION DECLARATIONS */
+	int reset();
+
+	int poweroff();
+
+	int enable_die_temp();
+
+	int read_die_temp();
+
+	int get_num_samples_in_fifo();
+
+	void irq();
+
+	int irq_handler();
+
+	int fifo_irq_handler();
+
+	int read_fifo_data(uint8_t *fifo_data, int num_samples);
+
+	/* AGC functions */
+	int max8614x_update_led_range(int new_range, uint8_t led_num,
+			union led_range *led_range_settings);
+
+	int max8614x_update_led_current(union led_range *led_range_settings,
+			int led_new_val, max8614x_led_t led_num);
+
+	void ppg_auto_gain_ctrl(struct led_control *led_ctrl,
+			uint32_t sample_cnt, int diode_data, max8614x_led_t led_num);
+
+	void max8614x_agc_handler(struct led_control *led_ctrl,
+			int *samples);
+
+	int led_control_sm(struct led_control *led_ctrl,
+			int diode_data, char lpm);
+
+	void led_control_reset(struct led_control *led_ctrl);
+
+	int led_prox_init(struct led_control *led_ctrl, char lpm);
+
+	int led_daq_init(struct led_control *led_ctrl, char lpm);
+
+	void led_control_init(struct led_control *led_ctrl);
+
+
+};
+
+#endif /* _MAX8614X_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MAX8614X/MAX8614X_agc.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,505 @@
+/*******************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#include "MAX8614X.h"
+#include <errno.h>
+#include "Peripherals.h"
+
+#define ARRAY_SIZE(array)			(sizeof(array)/sizeof(array[0]))
+
+#define ILLEGAL_OUTPUT_POINTER				1
+#define ILLEGAL_DIODE_OUTPUT_MIN_MAX_PAIR	2
+#define ILLEGAL_LED_SETTING_MIN_MAX_PAIR	3
+#define CONSTRAINT_VIOLATION				4
+
+#define MAX8614X_LED_DRIVE_CURRENT_FULL_SCALE		\
+		(MAX8614X_MAX_LED_DRIVE_CURRENT - MAX8614X_MIN_LED_DRIVE_CURRENT)
+
+// that parameter is moved to header file to enable modification
+//#define MAX8614X_AGC_DEFAULT_LED_OUT_RANGE			30
+#define MAX8614X_AGC_DEFAULT_CORRECTION_COEFF		50
+#define MAX8614X_AGC_DEFAULT_SENSITIVITY_PERCENT	10
+#define MAX8614X_AGC_DEFAULT_NUM_SAMPLES_TO_AVG		25
+
+#define MAX8614X_PROX_THRESHOLD_1			10000
+#define MAX8614X_PROX_THRESHOLD_2			40000
+#define MAX8614X_PROX_DEBOUNCE_SPS			2
+#define MAX8614X_DAQ_DEBOUNCE_SPS			20
+
+#define MAX8614X_DEFAULT_DAQ_LED_CURRENT_1	40000
+#define MAX8614X_DEFAULT_DAQ_LED_CURRENT_2	40000
+#define MAX8614X_DEFAULT_DAQ_LED_CURRENT_3	0
+#define MAX8614X_DEFAULT_PROX_LED_CURRENT_1	10000
+#define MAX8614X_DEFAULT_PROX_LED_CURRENT_2	0
+#define MAX8614X_DEFAULT_PROX_LED_CURRENT_3	0
+
+
+#define MAX8614X_MIN_LED_DRIVE_CURRENT		0
+#define MAX8614X_MAX_LED_DRIVE_CURRENT		60000
+
+#define MAX8614X_MAX_PPG_DIODE_VAL			((1 << 19) - 1)
+#define MAX8614X_MIN_PPG_DIODE_VAL			0
+
+#define MAX8614X_DEFAULT_CURRENT1			0x30
+#define MAX8614X_DEFAULT_CURRENT2			0
+#define MAX8614X_DEFAULT_CURRENT3			0
+
+
+int MAX8614X::max8614x_update_led_range(
+		int new_range, uint8_t led_num,
+		union led_range *led_range_settings)
+{
+	int old_range;
+	Registers reg_addr;
+
+	switch (led_num) {
+	case LED_1:
+		old_range = led_range_settings->led1;
+		led_range_settings->led1 = new_range;
+		reg_addr = MAX8614X_LED_RANGE1_REG;
+		break;
+	case LED_2:
+		old_range = led_range_settings->led2;
+		led_range_settings->led2 = new_range;
+		reg_addr = MAX8614X_LED_RANGE1_REG;
+		break;
+	case LED_3:
+		old_range = led_range_settings->led3;
+		led_range_settings->led3 = new_range;
+		reg_addr = MAX8614X_LED_RANGE1_REG;
+		break;
+	case LED_4:
+		old_range = led_range_settings->led4;
+		led_range_settings->led4 = new_range;
+		reg_addr = MAX8614X_LED_RANGE2_REG;
+		break;
+	case LED_5:
+		old_range = led_range_settings->led5;
+		led_range_settings->led5 = new_range;
+		reg_addr = MAX8614X_LED_RANGE2_REG;
+		break;
+	case LED_6:
+		old_range = led_range_settings->led6;
+		led_range_settings->led6 = new_range;
+		reg_addr = MAX8614X_LED_RANGE2_REG;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	if (old_range == new_range)
+		return 0;
+
+	return writeRegister( reg_addr,
+			led_range_settings->val[led_num < LED_4 ? 0 : 1]);
+}
+
+int MAX8614X::max8614x_update_led_current(
+		union led_range *led_range_settings,
+		int led_new_val,
+		max8614x_led_t led_num)
+{
+	int ret = 0;
+	Registers led_current_reg_addr;
+	int led_range;
+	uint8_t led_current_reg_val;
+	int	led_range_index = led_new_val / 25000;
+	const int led_range_steps[] = {
+		LED_RANGE_STEP_25uA,
+		LED_RANGE_STEP_50uA,
+		LED_RANGE_STEP_75uA,
+		LED_RANGE_STEP_100uA,
+		LED_RANGE_STEP_100uA, /* For led current greater than 100uA */
+	};
+
+	switch(led_num) {
+	case LED_1:
+		led_current_reg_addr = MAX8614X_LED1_PA_REG;
+		break;
+	case LED_2:
+		led_current_reg_addr = MAX8614X_LED2_PA_REG;
+		break;
+	case LED_3:
+		led_current_reg_addr = MAX8614X_LED3_PA_REG;
+		break;
+	case LED_4:
+		led_current_reg_addr = MAX8614X_LED4_PA_REG;
+		break;
+	case LED_5:
+		led_current_reg_addr = MAX8614X_LED5_PA_REG;
+		break;
+	case LED_6:
+		led_current_reg_addr = MAX8614X_LED6_PA_REG;
+		break;
+	default:
+		pr_err("Invalid led number: %d\n", led_num);
+		return -EINVAL;
+	}
+
+	if (led_new_val < MAX8614X_MIN_LED_DRIVE_CURRENT
+				|| led_new_val > MAX8614X_MAX_LED_DRIVE_CURRENT) {
+		pr_err("Invalid led value: %d\n", led_new_val);
+		return -EINVAL;
+	}
+
+	led_current_reg_val = led_new_val / led_range_steps[led_range_index];
+
+	pr_debug("Updating LED%d current to %d. led_rge_idx: %d, reg_val: %.2X",
+			led_num, led_new_val, led_range_index, led_current_reg_val);
+
+	ret = writeRegister(led_current_reg_addr, led_current_reg_val);
+	if (ret < 0)
+		return ret;
+
+
+	led_range = led_range_index;
+	pr_debug("Updating LED%d range to %d.", led_num, led_range);
+	if (led_range > 3)
+		led_range = 3;
+	ret = max8614x_update_led_range( led_range, led_num, led_range_settings);
+	if (ret < 0)
+		return ret;
+	return ret;
+}
+
+int32_t agc_adj_calculator(
+		int32_t *change_by_percent_of_range,
+		int32_t *change_by_percent_of_current_setting,
+		int32_t *change_led_by_absolute_count,
+		int32_t *set_led_to_absolute_count,
+		int32_t target_percent_of_range,
+		int32_t correction_coefficient,
+		int32_t allowed_error_in_percentage,
+		int32_t current_average,
+		int32_t number_of_samples_averaged,
+		int32_t led_drive_current_value)
+{
+	int32_t current_percent_of_range = 0;
+	int32_t delta = 0;
+	int32_t desired_delta = 0;
+	int32_t current_power_percent = 0;
+
+	if (change_by_percent_of_range == 0
+			|| change_by_percent_of_current_setting == 0
+			|| change_led_by_absolute_count == 0
+			|| set_led_to_absolute_count == 0)
+		return ILLEGAL_OUTPUT_POINTER;
+
+	if (target_percent_of_range > 90 || target_percent_of_range < 10)
+		return CONSTRAINT_VIOLATION;
+
+	if (correction_coefficient > 100 || correction_coefficient < 0)
+		return CONSTRAINT_VIOLATION;
+
+	if (allowed_error_in_percentage > 100
+			|| allowed_error_in_percentage < 0)
+		return CONSTRAINT_VIOLATION;
+
+#if ((MAX8614X_MAX_PPG_DIODE_VAL - MAX8614X_MIN_PPG_DIODE_VAL) <= 0 \
+			 || (MAX8614X_MAX_PPG_DIODE_VAL < 0) || (MAX8614X_MIN_PPG_DIODE_VAL < 0))
+	#error "Illegal diode Min/Max Pair"
+#endif
+
+#if ((MAX8614X_MAX_LED_DRIVE_CURRENT - MAX8614X_MIN_LED_DRIVE_CURRENT) <= 0 \
+		|| (MAX8614X_MAX_LED_DRIVE_CURRENT < 0) || (MAX8614X_MIN_LED_DRIVE_CURRENT < 0))
+	#error "Illegal LED Min/Max current Pair"
+#endif
+
+	if (led_drive_current_value > MAX8614X_MAX_LED_DRIVE_CURRENT
+			|| led_drive_current_value < MAX8614X_MIN_LED_DRIVE_CURRENT)
+		return CONSTRAINT_VIOLATION;
+
+	if (current_average < MAX8614X_MIN_PPG_DIODE_VAL
+			|| current_average > MAX8614X_MAX_PPG_DIODE_VAL)
+		return CONSTRAINT_VIOLATION;
+
+	current_percent_of_range = 100 *
+		(current_average - MAX8614X_MIN_PPG_DIODE_VAL) /
+		(MAX8614X_MAX_PPG_DIODE_VAL - MAX8614X_MIN_PPG_DIODE_VAL) ;
+
+	delta = current_percent_of_range - target_percent_of_range;
+	delta = delta * correction_coefficient / 100;
+
+	if (delta > -allowed_error_in_percentage
+			&& delta < allowed_error_in_percentage) {
+		*change_by_percent_of_range = 0;
+		*change_by_percent_of_current_setting = 0;
+		*change_led_by_absolute_count = 0;
+		*set_led_to_absolute_count = led_drive_current_value;
+		return 0;
+	}
+
+	current_power_percent = 100 *
+			(led_drive_current_value - MAX8614X_MIN_LED_DRIVE_CURRENT) /
+			(MAX8614X_MAX_LED_DRIVE_CURRENT - MAX8614X_MIN_LED_DRIVE_CURRENT);
+	if (delta < 0)
+		desired_delta = -delta * (100 - current_power_percent) /
+				(100 - current_percent_of_range);
+
+	if (delta > 0)
+		desired_delta = -delta * (current_power_percent)
+				/ (current_percent_of_range);
+
+	*change_by_percent_of_range = desired_delta;
+
+	*change_led_by_absolute_count =	(desired_delta
+			* MAX8614X_LED_DRIVE_CURRENT_FULL_SCALE / 100);
+	*change_by_percent_of_current_setting =
+			(*change_led_by_absolute_count * 100)
+			/ (led_drive_current_value);
+	*set_led_to_absolute_count  = led_drive_current_value
+			+ *change_led_by_absolute_count;
+
+	//If we are saturated, cut power in half
+	if (current_percent_of_range >= 100)
+	{
+		*change_by_percent_of_range = -100; //Unknown, set fake value
+		*change_by_percent_of_current_setting = -50;
+		*change_led_by_absolute_count = 0 - (led_drive_current_value / 2);
+		*set_led_to_absolute_count  = led_drive_current_value / 2;
+	}
+
+	return 0;
+}
+
+void MAX8614X::ppg_auto_gain_ctrl(
+		struct led_control *led_ctrl,
+		uint32_t sample_cnt, int diode_data, max8614x_led_t led_num)
+{
+	int ret;
+	int diode_avg;
+
+	if (led_num > LED_3) /* TODO: why3? */
+		return;
+
+	led_ctrl->diode_sum[led_num] += diode_data;
+	if (sample_cnt % led_ctrl->agc_min_num_samples == 0) {
+		diode_avg = led_ctrl->diode_sum[led_num]
+				/ led_ctrl->agc_min_num_samples;
+		led_ctrl->diode_sum[led_num] = 0;
+	} else
+		return;
+
+	ret = agc_adj_calculator(
+		&led_ctrl->change_by_percent_of_range[led_num],
+		&led_ctrl->change_by_percent_of_current_setting[led_num],
+		&led_ctrl->change_led_by_absolute_count[led_num],
+		&led_ctrl->led_current[led_num],
+		led_ctrl->agc_led_out_percent,
+		led_ctrl->agc_corr_coeff,
+		led_ctrl->agc_sensitivity_percent,
+		diode_avg,
+		led_ctrl->agc_min_num_samples,
+		led_ctrl->led_current[led_num]);
+	if (ret)
+		return;
+
+	if (led_ctrl->change_led_by_absolute_count[led_num] == 0)
+		return;
+
+	ret = max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[led_num], led_num);
+	if (ret < 0)
+		pr_err("%s failed", __func__);
+	return;
+}
+
+void MAX8614X::max8614x_agc_handler(struct led_control *led_ctrl,
+		int *samples)
+{
+	static int ret = -1;
+
+	if (!led_ctrl->agc_is_enabled)
+		return;
+
+	led_ctrl->sample_cnt++;
+	ret = led_control_sm(led_ctrl,
+		samples[DATA_TYPE_PPG1_LEDC1],
+		led_ctrl->lpm_is_enabled);
+
+	if (ret == LED_DATA_ACQ) {
+		ppg_auto_gain_ctrl(led_ctrl,
+				led_ctrl->sample_cnt,
+				samples[DATA_TYPE_PPG1_LEDC1],
+				LED_1);
+		ppg_auto_gain_ctrl(led_ctrl,
+				led_ctrl->sample_cnt,
+				samples[DATA_TYPE_PPG1_LEDC1],
+				LED_2);
+//		ppg_auto_gain_ctrl(led_ctrl,
+//				led_ctrl->sample_cnt,
+//				samples[DATA_TYPE_PPG1_LEDC3],
+//				LED_3);
+	}
+
+	return;
+}
+
+int MAX8614X::led_prox_init(struct led_control *led_ctrl, char lpm)
+{
+	int ret;
+	const RegisterMap low_pm_settings[] = {
+		{ MAX8614X_PPG_CFG1_REG, MAX8614X_PPG_LED_PW_115_2_US_MASK // PPG_LED_PW = 3 (115.2us)
+							   | MAX8614X_PPG1_ADC_RGE_32768_MASK // PPG1_ADC_RGE = 3(32768nA)
+							   | MAX8614X_PPG2_ADC_RGE_32768_MASK }, // PPG2_ADC_RGE = 3(32768nA)
+//		{ MAX8614X_PPG_CFG2_REG, MAX8614X_PPG_SR_25_SPS},
+		{ MAX8614X_INT_ENABLE1_REG, MAX8614X_INT1_EN_DATA_RDY_MASK },
+	};
+
+	led_ctrl->led_current[LED_1] = MAX8614X_DEFAULT_PROX_LED_CURRENT_1;
+	ret = max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_1], LED_1);
+
+	led_ctrl->led_current[LED_2] = MAX8614X_DEFAULT_PROX_LED_CURRENT_2;
+	ret |= max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_2], LED_2);
+
+	led_ctrl->led_current[LED_3] = MAX8614X_DEFAULT_PROX_LED_CURRENT_3;
+	ret |= max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_3], LED_3);
+
+	if (lpm)
+		ret |= writeBlock(low_pm_settings,
+				ARRAY_SIZE(low_pm_settings));
+	return ret;
+}
+
+int MAX8614X::led_daq_init(struct led_control *led_ctrl, char lpm)
+{
+	int ret;
+	const RegisterMap non_lpm_settings[] = {
+		{ MAX8614X_PPG_CFG1_REG, MAX8614X_PPG_LED_PW_115_2_US_MASK // PPG_LED_PW = 3 (115.2us)
+							   | MAX8614X_PPG1_ADC_RGE_32768_MASK // PPG1_ADC_RGE = 3(32768nA)
+							   | MAX8614X_PPG2_ADC_RGE_32768_MASK }, // PPG2_ADC_RGE = 3(32768nA)
+//		{ MAX8614X_PPG_CFG2_REG, MAX8614X_PPG_SR_25_SPS},
+		{ MAX8614X_INT_ENABLE1_REG, MAX8614X_INT1_EN_DATA_RDY_MASK },
+	};
+
+	led_ctrl->led_current[LED_1] = MAX8614X_DEFAULT_DAQ_LED_CURRENT_1;
+	ret = max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_1], LED_1);
+
+	led_ctrl->led_current[LED_2] = MAX8614X_DEFAULT_DAQ_LED_CURRENT_2;
+	ret |= max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_2], LED_2);
+
+	led_ctrl->led_current[LED_3] = MAX8614X_DEFAULT_DAQ_LED_CURRENT_3;
+	ret |= max8614x_update_led_current(&led_ctrl->led_range_settings,
+			led_ctrl->led_current[LED_3], LED_3);
+
+	if (lpm)
+		ret |= writeBlock(non_lpm_settings,
+				ARRAY_SIZE(non_lpm_settings));
+
+	return ret;
+}
+
+int MAX8614X::led_control_sm(struct led_control *led_ctrl, int diode_data, char lpm)
+{
+	int ret = led_ctrl->state;
+	int avg = 0;
+
+	led_ctrl->prox_sample_cnt++;
+	led_ctrl->prox_sum += diode_data;
+
+	switch (led_ctrl->state) {
+	case LED_PROX:
+		if (led_ctrl->prox_sample_cnt % MAX8614X_PROX_DEBOUNCE_SPS != 0)
+			break;
+
+		avg = led_ctrl->prox_sum / MAX8614X_PROX_DEBOUNCE_SPS;
+		if (avg >= MAX8614X_PROX_THRESHOLD_1) {
+			led_ctrl->state = LED_DATA_ACQ;
+			ret = led_daq_init(led_ctrl, lpm);
+			led_ctrl->prox_sample_cnt = 0;
+		}
+		led_ctrl->prox_sum = 0;
+		break;
+
+	case LED_DATA_ACQ:
+		if (led_ctrl->prox_sample_cnt % MAX8614X_DAQ_DEBOUNCE_SPS != 0)
+			break;
+
+		avg = led_ctrl->prox_sum / MAX8614X_DAQ_DEBOUNCE_SPS;
+		if (avg <= MAX8614X_PROX_THRESHOLD_2) {
+			led_ctrl->state = LED_PROX;
+			ret = led_prox_init(led_ctrl, lpm);
+			led_ctrl->prox_sample_cnt = 0;
+		}
+		led_ctrl->prox_sum = 0;
+		break;
+
+	default:
+		led_ctrl->state = LED_PROX;
+		led_ctrl->prox_sum = 0;
+		led_ctrl->prox_sample_cnt = 0;
+		return -EINVAL;
+	}
+
+	return ret;
+}
+
+void MAX8614X::led_control_reset(struct led_control *led_ctrl)
+{
+	led_ctrl->led_current[LED_1] = led_ctrl->default_current[LED_1];
+	led_ctrl->led_current[LED_2] = led_ctrl->default_current[LED_2];
+	led_ctrl->led_current[LED_3] = led_ctrl->default_current[LED_3];
+
+	memset(led_ctrl->change_by_percent_of_range, 0,
+			sizeof(led_ctrl->change_by_percent_of_range));
+	memset(led_ctrl->change_by_percent_of_current_setting, 0,
+			sizeof(led_ctrl->change_by_percent_of_range));
+	memset(led_ctrl->change_led_by_absolute_count, 0,
+			sizeof(led_ctrl->change_by_percent_of_range));
+	memset(led_ctrl->diode_sum, 0, sizeof(led_ctrl->diode_sum));
+
+	led_ctrl->agc_is_enabled = 1;
+	led_ctrl->prox_sum = 0;
+	led_ctrl->prox_sample_cnt = 0;
+	led_ctrl->sample_cnt = 0;
+	led_ctrl->state = LED_PROX;
+}
+
+void MAX8614X::led_control_init(struct led_control *led_ctrl)
+{
+	memset(led_ctrl, 0, sizeof(struct led_control));
+
+	led_ctrl->default_current[LED_1] = MAX8614X_DEFAULT_CURRENT1;
+	led_ctrl->default_current[LED_2] = MAX8614X_DEFAULT_CURRENT2;
+	led_ctrl->default_current[LED_3] = MAX8614X_DEFAULT_CURRENT3;
+	led_ctrl->agc_led_out_percent = kMax8614xDefaultLedOutRange;
+	led_ctrl->agc_corr_coeff = MAX8614X_AGC_DEFAULT_CORRECTION_COEFF;
+	led_ctrl->agc_min_num_samples = MAX8614X_AGC_DEFAULT_NUM_SAMPLES_TO_AVG;
+	led_ctrl->agc_sensitivity_percent = MAX8614X_AGC_DEFAULT_SENSITIVITY_PERCENT;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MaximSensor/MaximSensor.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,174 @@
+#include "MaximSensor.h"
+#include "Peripherals.h"
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	Reads from register.
+	* @details	Reads specific Maxim Sensor register via SPI bus.
+	*
+	* @param[in]	reg Beginning address of a register to be read.
+	* @param[out]	data Buffer space to save result value.
+	* @param[in]	len Number of consecutive bytes to be read.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+int MaximSensor::readRegister(uint8_t reg, uint8_t *data, int len){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+	/**
+	* @brief	Writes data to Maxim Sensor register.
+	* @details	Writes data to specific Maxim Sensor register via SPI bus.
+	*
+	* @param[in]	reg Address of a register to be wrote.
+	* @param[in]	data Data to write on register.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+int MaximSensor::writeRegister(uint8_t reg,	const uint8_t data){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+	/**
+	* @brief	Get Maxim Sensor part and revision info.
+	* @details	Reads Maxim Sensor part and revision info from device.
+	*
+	* @param[in]	reg Beginning address of a register to be read.
+	* @param[out]	data Buffer space to save result value.
+	* @param[in]	len Number of consecutive bytes to be read.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+int MaximSensor::get_part_info(uint8_t *part_id,	uint8_t *rev_id){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+	/**
+	* @brief	Enables Maxim Sensor.
+	* @details	Enable IRQ, enable LEDs, enable AGC
+	*
+	* @param[in]	enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+int MaximSensor::sensor_enable(int enable){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+	/**
+	* @brief	Enables AGC.
+	* @details	Enable Maxim Sensor automatic gain controller.
+	*	AGC automatically adjusts sampling rates and LED currents to save energy.
+	*
+	* @param[in]	agc_enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+int MaximSensor::agc_enable(int agc_enable){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+	/**
+	* @brief	Get sensor part name.
+	*
+	* @returns	Sensor part name string.
+	*/
+const char *MaximSensor::get_sensor_part_name(){
+	pr_err("Empty function is called");
+	return "";
+}
+#if 0
+int dump_registers(addr_val_pair *reg_values) {
+	pr_err("Empty function is called");
+	return 0;
+}
+#endif
+	/**
+	* @brief	Get sensor name.
+	*
+	* @returns	Sensor name string.
+	*/
+const char *MaximSensor::get_sensor_name(){
+	pr_err("Empty function is called");
+	return "";
+}
+
+
+/**
+* @brief	Get sensor ID.
+*
+* @returns	Sensor ID number.
+*/
+unsigned char MaximSensor::get_sensor_id() {
+
+	// Base class returns 255
+	return( 255 );
+
+}
+
+
+/**
+* @brief	Get sensor name.
+*
+* @returns	Sensor name string.
+*/
+const char *MaximSensor::get_sensor_algo_ver(){
+pr_err("Empty function is called");
+return "";
+}
+
+int MaximSensor::MS_Max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
+						 uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
+									 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+									 uint8_t Dhpf, uint8_t Dlpf){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int MaximSensor::MS_Max30001_ECG_Stop(){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int MaximSensor::MS_Max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
+										    uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
+											uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int MaximSensor::MS_Max30001_RtoR_Stop(){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+// Max30001 Interrupt Assignment Function
+int MaximSensor::MS_max30001_INT_assignment(uint8_t en_enint_loc,     uint8_t en_eovf_loc,  uint8_t en_fstint_loc,
+											uint8_t en_dcloffint_loc, uint8_t en_bint_loc,  uint8_t en_bovf_loc,
+									        uint8_t en_bover_loc,     uint8_t en_bundr_loc, uint8_t en_bcgmon_loc,
+									        uint8_t en_pint_loc,      uint8_t en_povf_loc,  uint8_t en_pedge_loc,
+									        uint8_t en_lonint_loc,    uint8_t en_rrint_loc, uint8_t en_samp_loc,
+									        uint8_t intb_Type,        uint8_t int2b_Type){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int  MaximSensor::MS_max30001readRegister(uint8_t addr, uint32_t *return_data){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int  MaximSensor::MS_max30001writeRegister(uint8_t addr, uint32_t data){
+	pr_err("Empty function is called");
+	return -1;
+}
+
+int MaximSensor::MS_max30001sync(){
+	pr_err("Empty MS_max30001sync is called");
+	return -1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/MaximSensor/MaximSensor.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,189 @@
+/*******************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#ifndef _MAXIMSENSOR_H_
+#define _MAXIMSENSOR_H_
+#include "mbed.h"
+#include <list>
+
+
+typedef struct {
+    uint8_t addr;
+    uint32_t val;
+} addr_val_pair;
+
+
+/**
+ * @brief	MaximSensor is Maxim Sensor base class.
+ * @details	MaximSensor includes base functions for to create new
+ *	sensor classes. All sensor classes should implement this class.
+ */
+class MaximSensor
+{
+public:
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	Reads from register.
+	* @details	Reads specific Maxim Sensor register via SPI bus.
+	*
+	* @param[in]	reg Beginning address of a register to be read.
+	* @param[out]	data Buffer space to save result value.
+	* @param[in]	len Number of consecutive bytes to be read.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int readRegister(uint8_t reg, uint8_t *data, int len);
+
+	/**
+	* @brief	Writes data to Maxim Sensor register.
+	* @details	Writes data to specific Maxim Sensor register via SPI bus.
+	*
+	* @param[in]	reg Address of a register to be wrote.
+	* @param[in]	data Data to write on register.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int writeRegister(uint8_t reg,	const uint8_t data);
+
+	/**
+	* @brief	Get Maxim Sensor part and revision info.
+	* @details	Reads Maxim Sensor part and revision info from device.
+	*
+	* @param[in]	reg Beginning address of a register to be read.
+	* @param[out]	data Buffer space to save result value.
+	* @param[in]	len Number of consecutive bytes to be read.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int get_part_info(uint8_t *part_id,	uint8_t *rev_id);
+
+	/**
+	* @brief	Enables Maxim Sensor.
+	* @details	Enable IRQ, enable LEDs, enable AGC
+	*
+	* @param[in]	enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int sensor_enable(int enable);
+
+	/**
+	* @brief	Enables AGC.
+	* @details	Enable Maxim Sensor automatic gain controller.
+	*	AGC automatically adjusts sampling rates and LED currents to save energy.
+	*
+	* @param[in]	agc_enable Any value to enable, 0 to disable.
+	*
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int agc_enable(int agc_enable);
+
+	/**
+	* @brief	Get sensor part name.
+	*
+	* @returns	Sensor part name string.
+	*/
+	virtual const char *get_sensor_part_name();
+
+	/**
+	* @brief	Get sensor algorithm version.
+	*
+	* @returns	Sensor algorithm version string.
+	*/
+	virtual const char *get_sensor_algo_ver();
+
+	/**
+	* @brief	Get sensor name.
+	*
+	* @returns	Sensor name string.
+	*/
+	virtual const char *get_sensor_name();
+
+	/**
+	* @brief	Get sensor ID.
+	*
+	* @returns	Sensor ID number.
+	*/
+	virtual unsigned char get_sensor_id();
+
+	/**
+	* @brief	Dump Maxim Sensor registers.
+	* @details	Print all Maxim Sensor register addresses and containing values.
+	*
+	* @param[in]    reg_values Pointer to array of 256 addr_val_pairs
+	* @returns	0 on success, negative error code on failure.
+	*/
+	virtual int dump_registers(addr_val_pair *reg_values)=0;
+
+	// *********************** Maxim Sensor ECG Max30001 related functions ***********************
+	virtual int MS_Max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
+						 uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
+										 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
+										 uint8_t Dhpf, uint8_t Dlpf);
+
+	virtual int MS_Max30001_ECG_Stop();
+
+	// ECG Max30001 RtoR Initialization Function
+	virtual  int MS_Max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
+			uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
+			uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint);
+
+	virtual int MS_Max30001_RtoR_Stop();
+
+	// Max30001 Interrupt Assignment Function
+	virtual int MS_max30001_INT_assignment(uint8_t en_enint_loc,     uint8_t en_eovf_loc,  uint8_t en_fstint_loc,
+										   uint8_t en_dcloffint_loc, uint8_t en_bint_loc,  uint8_t en_bovf_loc,
+										   uint8_t en_bover_loc,     uint8_t en_bundr_loc, uint8_t en_bcgmon_loc,
+										   uint8_t en_pint_loc,      uint8_t en_povf_loc,  uint8_t en_pedge_loc,
+										   uint8_t en_lonint_loc,    uint8_t en_rrint_loc, uint8_t en_samp_loc,
+										   uint8_t intb_Type,        uint8_t int2b_Type);
+
+	virtual int MS_max30001readRegister(uint8_t addr, uint32_t *return_data);
+
+	virtual int MS_max30001writeRegister(uint8_t addr, uint32_t data);
+
+	virtual int MS_max30001sync();
+
+	// *********************** end of Maxim Sensor ECG Max30001 related functions ****************
+
+
+
+	// *********************** Max30205 related functions ***********************
+
+
+	// *********************** end of Max30205 related functions ****************
+
+
+};
+
+#endif /* _MAXIMSENSOR_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/SPIBlockDevice/SPIFBlockDevice.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,338 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2016 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SPIFBlockDevice.h"
+
+
+// Read/write/erase sizes
+#define SPIF_READ_SIZE  1
+#define SPIF_PROG_SIZE  1
+#define SPIF_SE_SIZE    4096
+#define SPIF_TIMEOUT    10000
+
+// Debug available
+#define SPIF_DEBUG      0
+
+// MX25R Series Register Command Table. 
+enum ops {
+    SPIF_NOP  = 0x00, // No operation
+    SPIF_READ = 0x03, // Read data
+    SPIF_PROG = 0x02, // Program data
+    SPIF_SE   = 0x20, // 4KB Sector Erase 
+    SPIF_CE   = 0xc7, // Chip Erase 
+    SPIF_SFDP = 0x5a, // Read SFDP 
+    SPIF_WREN = 0x06, // Write Enable 
+    SPIF_WRDI = 0x04, // Write Disable
+    SPIF_RDSR = 0x05, // Read Status Register 
+    SPIF_RDID = 0x9f, // Read Manufacturer and JDEC Device ID 
+};
+
+// Status register from RDSR
+// [- stuff -| wel | wip ]
+// [-   6   -|  1  |  1  ]
+#define SPIF_WEL 0x2
+#define SPIF_WIP 0x1
+
+ 
+SPIFBlockDevice::SPIFBlockDevice(
+    PinName mosi, PinName miso, PinName sclk, PinName cs, int freq)
+    : _spi(mosi, miso, sclk), _cs(cs), _size(0)
+{
+    _cs = 1;
+    _spi.frequency(freq);
+}
+
+int SPIFBlockDevice::init()
+{
+    // Check for vendor specific hacks, these should move into more general
+    // handling when possible. RDID is not used to verify a device is attached.
+    uint8_t id[3];
+    _cmdread(SPIF_RDID, 0, 3, 0x0, id);
+
+    switch (id[0]) {
+        case 0xbf:
+            // SST devices come preset with block protection
+            // enabled for some regions, issue gbpu instruction to clear
+            _wren();
+            _cmdwrite(0x98, 0, 0, 0x0, NULL);
+            break;
+    }
+
+    // Check that device is doing ok 
+    int err = _sync();
+    if (err) {
+        return BD_ERROR_DEVICE_ERROR;
+    }
+
+    // Check JEDEC serial flash discoverable parameters for device
+    // specific info
+    uint8_t header[16];
+    _cmdread(SPIF_SFDP, 4, 16, 0x0, header);
+
+    // Verify SFDP signature for sanity
+    // Also check that major/minor version is acceptable
+    if (!(memcmp(&header[0], "SFDP", 4) == 0 && header[5] == 1)) {
+        return BD_ERROR_DEVICE_ERROR;
+    }
+
+    // The SFDP spec indicates the standard table is always at offset 0
+    // in the parameter headers, we check just to be safe
+    if (!(header[8] == 0 && header[10] == 1)) {
+        return BD_ERROR_DEVICE_ERROR;
+    }
+
+    // Parameter table pointer, spi commands are BE, SFDP is LE,
+    // also sfdp command expects extra read wait byte
+    uint32_t table_addr = (
+        (header[14] << 24) |
+        (header[13] << 16) |
+        (header[12] << 8 ));
+    uint8_t table[8];
+    _cmdread(SPIF_SFDP, 4, 8, table_addr, table);
+
+    // Check erase size, currently only supports 4kbytes
+    // TODO support erase size != 4kbytes?
+    // TODO support other erase opcodes from the sector descriptions
+    if ((table[0] & 0x3) != 0x1 || table[1] != SPIF_SE) {
+        return BD_ERROR_DEVICE_ERROR;
+    }
+
+    // Check address size, currently only supports 3byte addresses
+    // TODO support address > 3bytes?
+    // TODO check for devices larger than 2Gbits?
+    if ((table[2] & 0x4) != 0 || (table[7] & 0x80) != 0) {
+        return BD_ERROR_DEVICE_ERROR;
+    }
+
+    // Get device density, stored as size in bits - 1
+    uint32_t density = (
+        (table[7] << 24) |
+        (table[6] << 16) |
+        (table[5] << 8 ) |
+        (table[4] << 0 ));
+    _size = (density/8) + 1;
+
+    return 0;
+}
+
+int SPIFBlockDevice::deinit()
+{
+    // Latch write disable just to keep noise
+    // from changing the device
+    _cmdwrite(SPIF_WRDI, 0, 0, 0x0, NULL);
+
+    return 0;
+}
+
+void SPIFBlockDevice::_cmdread(
+        uint8_t op, uint32_t addrc, uint32_t retc,
+        uint32_t addr, uint8_t *rets)
+{
+
+	_cs = 0;
+    _spi.write(op);
+
+    for (uint32_t i = 0; i < addrc; i++) {
+        _spi.write(0xff & (addr >> 8*(addrc-1 - i)));
+    }
+
+    for (uint32_t i = 0; i < retc; i++) {
+        rets[i] = _spi.write(0);
+    }
+    _cs = 1;
+
+
+
+    if (SPIF_DEBUG) {
+        printf("spif <- %02x", op);
+        for (uint32_t i = 0; i < addrc; i++) {
+            if (i < addrc) {
+                printf("%02lx", 0xff & (addr >> 8*(addrc-1 - i)));
+            } else {
+                printf("  ");
+            }
+        }
+        printf(" ");
+        for (uint32_t i = 0; i < 16 && i < retc; i++) {
+            printf("%02x", rets[i]);
+        }
+        if (retc > 16) {
+            printf("...");
+        }
+        printf("\n");
+    }
+}
+
+void SPIFBlockDevice::_cmdwrite(
+        uint8_t op, uint32_t addrc, uint32_t argc,
+        uint32_t addr, const uint8_t *args)
+{
+    _cs = 0;
+    _spi.write(op);
+
+    for (uint32_t i = 0; i < addrc; i++) {
+        _spi.write(0xff & (addr >> 8*(addrc-1 - i)));
+    }
+
+    for (uint32_t i = 0; i < argc; i++) {
+        _spi.write(args[i]);
+    }
+    _cs = 1;
+
+    if (SPIF_DEBUG) {
+        printf("spif -> %02x", op);
+        for (uint32_t i = 0; i < addrc; i++) {
+            if (i < addrc) {
+                printf("%02lx", 0xff & (addr >> 8*(addrc-1 - i)));
+            } else {
+                printf("  ");
+            }
+        }
+        printf(" ");
+        for (uint32_t i = 0; i < 16 && i < argc; i++) {
+            printf("%02x", args[i]);
+        }
+        if (argc > 16) {
+            printf("...");
+        }
+        printf("\n");
+    }
+}
+
+int SPIFBlockDevice::_sync()
+{
+    for (int i = 0; i < SPIF_TIMEOUT; i++) {
+        // Read status register until write not-in-progress
+        uint8_t status;
+        _cmdread(SPIF_RDSR, 0, 1, 0x0, &status);
+
+        // Check WIP bit
+        if (!(status & SPIF_WIP)) {
+            return 0;
+        }
+
+        wait_ms(1);
+    }
+
+    return BD_ERROR_DEVICE_ERROR;
+}
+
+int SPIFBlockDevice::_wren()
+{
+    _cmdwrite(SPIF_WREN, 0, 0, 0x0, NULL);
+
+    for (int i = 0; i < SPIF_TIMEOUT; i++) {
+        // Read status register until write latch is enabled
+        uint8_t status;
+        _cmdread(SPIF_RDSR, 0, 1, 0x0, &status);
+
+        // Check WEL bit
+        if (status & SPIF_WEL) {
+            return 0;
+        }
+
+        wait_ms(1);
+    }
+
+    return BD_ERROR_DEVICE_ERROR;
+}
+
+int SPIFBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
+{
+    // Check the address and size fit onto the chip.
+    MBED_ASSERT(is_valid_read(addr, size));
+
+    _cmdread(SPIF_READ, 3, size, addr, static_cast<uint8_t *>(buffer));
+    return 0;
+}
+ 
+int SPIFBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size)
+{
+    // Check the address and size fit onto the chip.
+    MBED_ASSERT(is_valid_program(addr, size));
+
+    while (size > 0) {
+        int err = _wren();
+        if (err) {
+            return err;
+        }
+
+        // Write up to 256 bytes a page
+        // TODO handle unaligned programs
+        uint32_t off = addr % 256;
+        uint32_t chunk = (off + size < 256) ? size : (256-off);
+        _cmdwrite(SPIF_PROG, 3, chunk, addr, static_cast<const uint8_t *>(buffer));
+        buffer = static_cast<const uint8_t*>(buffer) + chunk;
+        addr += chunk;
+        size -= chunk;
+
+        wait_ms(1);
+
+        err = _sync();
+        if (err) {
+            return err;
+        }
+    }
+
+    return 0;
+}
+
+int SPIFBlockDevice::erase(bd_addr_t addr, bd_size_t size)
+{
+    // Check the address and size fit onto the chip.
+    MBED_ASSERT(is_valid_erase(addr, size));
+
+    while (size > 0) {
+        int err = _wren();
+        if (err) {
+            return err;
+        }
+    
+        // Erase 4kbyte sectors
+        // TODO support other erase sizes?
+        uint32_t chunk = 4096;
+        _cmdwrite(SPIF_SE, 3, 0, addr, NULL);
+        addr += chunk;
+        size -= chunk;
+
+        err = _sync();
+        if (err) {
+            return err;
+        }
+    }
+
+    return 0;
+}
+
+bd_size_t SPIFBlockDevice::get_read_size() const
+{
+    return SPIF_READ_SIZE;
+}
+
+bd_size_t SPIFBlockDevice::get_program_size() const
+{
+    return SPIF_PROG_SIZE;
+}
+
+bd_size_t SPIFBlockDevice::get_erase_size() const
+{
+    return SPIF_SE_SIZE;
+}
+
+bd_size_t SPIFBlockDevice::size() const
+{
+    return _size;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/SPIBlockDevice/SPIFBlockDevice.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,157 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2016 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_SPIF_BLOCK_DEVICE_H
+#define MBED_SPIF_BLOCK_DEVICE_H
+
+#include <mbed.h>
+#include "BlockDevice.h"
+
+ 
+/** BlockDevice for SPI based flash devices
+ *  such as the MX25R or SST26F016B
+ *
+ *  @code
+ *  // Here's an example using the MX25R SPI flash device on the K82F
+ *  #include "mbed.h"
+ *  #include "SPIFBlockDevice.h"
+ *  
+ *  // Create flash device on SPI bus with PTE5 as chip select
+ *  SPIFBlockDevice spif(PTE2, PTE4, PTE1, PTE5);
+ *  
+ *  int main() {
+ *      printf("spif test\n");
+ *  
+ *      // Initialize the SPI flash device and print the memory layout
+ *      spif.init();
+ *      printf("spif size: %llu\n",         spif.size());
+ *      printf("spif read size: %llu\n",    spif.get_read_size());
+ *      printf("spif program size: %llu\n", spif.get_program_size());
+ *      printf("spif erase size: %llu\n",   spif.get_erase_size());
+ *  
+ *      // Write "Hello World!" to the first block
+ *      char *buffer = (char*)malloc(spif.get_erase_size());
+ *      sprintf(buffer, "Hello World!\n");
+ *      spif.erase(0, spif.get_erase_size());
+ *      spif.program(buffer, 0, spif.get_erase_size());
+ *  
+ *      // Read back what was stored
+ *      spif.read(buffer, 0, spif.get_erase_size());
+ *      printf("%s", buffer);
+ *  
+ *      // Deinitialize the device
+ *      spif.deinit();
+ *  }
+ *  @endcode
+ */
+class SPIFBlockDevice : public BlockDevice {
+public:
+    /** Creates a SPIFBlockDevice on a SPI bus specified by pins
+     *
+     *  @param mosi     SPI master out, slave in pin
+     *  @param miso     SPI master in, slave out pin
+     *  @param sclk     SPI clock pin
+     *  @param csel     SPI chip select pin
+     *  @param freq     Clock speed of the SPI bus (defaults to 40MHz)
+     */
+    SPIFBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName csel, int freq=40000000);
+
+    /** Initialize a block device
+     *
+     *  @return         0 on success or a negative error code on failure
+     */
+    virtual int init();
+
+    /** Deinitialize a block device
+     *
+     *  @return         0 on success or a negative error code on failure
+     */
+    virtual int deinit();
+
+    /** Read blocks from a block device
+     *
+     *  @param buffer   Buffer to write blocks to
+     *  @param addr     Address of block to begin reading from
+     *  @param size     Size to read in bytes, must be a multiple of read block size
+     *  @return         0 on success, negative error code on failure
+     */
+    virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
+
+    /** Program blocks to a block device
+     *
+     *  The blocks must have been erased prior to being programmed
+     *
+     *  @param buffer   Buffer of data to write to blocks
+     *  @param addr     Address of block to begin writing to
+     *  @param size     Size to write in bytes, must be a multiple of program block size
+     *  @return         0 on success, negative error code on failure
+     */
+    virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
+
+    /** Erase blocks on a block device
+     *
+     *  The state of an erased block is undefined until it has been programmed
+     *
+     *  @param addr     Address of block to begin erasing
+     *  @param size     Size to erase in bytes, must be a multiple of erase block size
+     *  @return         0 on success, negative error code on failure
+     */
+    virtual int erase(bd_addr_t addr, bd_size_t size);
+
+    /** Get the size of a readable block
+     *
+     *  @return         Size of a readable block in bytes
+     */
+    virtual bd_size_t get_read_size() const;
+
+    /** Get the size of a programable block
+     *
+     *  @return         Size of a programable block in bytes
+     *  @note Must be a multiple of the read size
+     */
+    virtual bd_size_t get_program_size() const;
+
+    /** Get the size of a eraseable block
+     *
+     *  @return         Size of a eraseable block in bytes
+     *  @note Must be a multiple of the program size
+     */
+    virtual bd_size_t get_erase_size() const;
+
+    /** Get the total size of the underlying device
+     *
+     *  @return         Size of the underlying device in bytes
+     */
+    virtual bd_size_t size() const;
+    
+private:
+    // Master side hardware
+    SPI _spi;
+    DigitalOut _cs;
+
+    // Device configuration discovered through sfdp
+    bd_size_t _size;
+
+    // Internal functions
+    int _wren();
+    int _sync();
+    void _cmdread(uint8_t op, uint32_t addrc, uint32_t retc,
+            uint32_t addr, uint8_t *rets);
+    void _cmdwrite(uint8_t op, uint32_t addrc, uint32_t argc,
+            uint32_t addr, const uint8_t *args);
+};
+
+
+#endif  /* MBED_SPIF_BLOCK_DEVICE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/USBDevice.lib	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/MaximIntegrated/code/USBDevice/#dad310740b28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/USBMSD_BD/USBMSD_BD.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,165 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+/* Introduction
+ * ------------
+ * SD and MMC cards support a number of interfaces, but common to them all
+ * is one based on SPI. This is the one I'm implmenting because it means
+ * it is much more portable even though not so performant, and we already
+ * have the mbed SPI Interface!
+ *
+ * The main reference I'm using is Chapter 7, "SPI Mode" of:
+ *  http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
+ *
+ * SPI Startup
+ * -----------
+ * The SD card powers up in SD mode. The SPI interface mode is selected by
+ * asserting CS low and sending the reset command (CMD0). The card will
+ * respond with a (R1) response.
+ *
+ * CMD8 is optionally sent to determine the voltage range supported, and
+ * indirectly determine whether it is a version 1.x SD/non-SD card or
+ * version 2.x. I'll just ignore this for now.
+ *
+ * ACMD41 is repeatedly issued to initialise the card, until "in idle"
+ * (bit 0) of the R1 response goes to '0', indicating it is initialised.
+ *
+ * You should also indicate whether the host supports High Capicity cards,
+ * and check whether the card is high capacity - i'll also ignore this
+ *
+ * SPI Protocol
+ * ------------
+ * The SD SPI protocol is based on transactions made up of 8-bit words, with
+ * the host starting every bus transaction by asserting the CS signal low. The
+ * card always responds to commands, data blocks and errors.
+ *
+ * The protocol supports a CRC, but by default it is off (except for the
+ * first reset CMD0, where the CRC can just be pre-calculated, and CMD8)
+ * I'll leave the CRC off I think!
+ *
+ * Standard capacity cards have variable data block sizes, whereas High
+ * Capacity cards fix the size of data block to 512 bytes. I'll therefore
+ * just always use the Standard Capacity cards with a block size of 512 bytes.
+ * This is set with CMD16.
+ *
+ * You can read and write single blocks (CMD17, CMD25) or multiple blocks
+ * (CMD18, CMD25). For simplicity, I'll just use single block accesses. When
+ * the card gets a read command, it responds with a response token, and then
+ * a data token or an error.
+ *
+ * SPI Command Format
+ * ------------------
+ * Commands are 6-bytes long, containing the command, 32-bit argument, and CRC.
+ *
+ * +---------------+------------+------------+-----------+----------+--------------+
+ * | 01 | cmd[5:0] | arg[31:24] | arg[23:16] | arg[15:8] | arg[7:0] | crc[6:0] | 1 |
+ * +---------------+------------+------------+-----------+----------+--------------+
+ *
+ * As I'm not using CRC, I can fix that byte to what is needed for CMD0 (0x95)
+ *
+ * All Application Specific commands shall be preceded with APP_CMD (CMD55).
+ *
+ * SPI Response Format
+ * -------------------
+ * The main response format (R1) is a status byte (normally zero). Key flags:
+ *  idle - 1 if the card is in an idle state/initialising
+ *  cmd  - 1 if an illegal command code was detected
+ *
+ *    +-------------------------------------------------+
+ * R1 | 0 | arg | addr | seq | crc | cmd | erase | idle |
+ *    +-------------------------------------------------+
+ *
+ * R1b is the same, except it is followed by a busy signal (zeros) until
+ * the first non-zero byte when it is ready again.
+ *
+ * Data Response Token
+ * -------------------
+ * Every data block written to the card is acknowledged by a byte
+ * response token
+ *
+ * +----------------------+
+ * | xxx | 0 | status | 1 |
+ * +----------------------+
+ *              010 - OK!
+ *              101 - CRC Error
+ *              110 - Write Error
+ *
+ * Single Block Read and Write
+ * ---------------------------
+ *
+ * Block transfers have a byte header, followed by the data, followed
+ * by a 16-bit CRC. In our case, the data will always be 512 bytes.
+ *
+ * +------+---------+---------+- -  - -+---------+-----------+----------+
+ * | 0xFE | data[0] | data[1] |        | data[n] | crc[15:8] | crc[7:0] |
+ * +------+---------+---------+- -  - -+---------+-----------+----------+
+ */
+#include "USBMSD_BD.h"
+#include "mbed_debug.h"
+
+#define SD_COMMAND_TIMEOUT 5000
+
+#define SD_DBG             0
+
+USBMSD_BD::USBMSD_BD(BlockDevice* bd) {
+    _bd = bd;
+    //no init
+    _status = 0x01;
+    
+//    connect();
+}
+
+int USBMSD_BD::disk_initialize() {
+    _bd->init();
+    _ssize = _bd->get_erase_size();
+    _sectors = _bd->size() / _ssize;
+    
+    // OK
+    _status = 0x00;
+    
+    return 0;
+}
+
+int USBMSD_BD::disk_write(const uint8_t* buff, uint64_t sector, uint8_t count)
+{
+    bd_addr_t addr = (bd_addr_t)sector*_ssize;
+    bd_size_t size = (bd_size_t)count*_ssize;
+    int err = _bd->erase(addr, size);
+    err = _bd->program(buff, addr, size);
+    return err;
+}
+
+int USBMSD_BD::disk_read(uint8_t* buff, uint64_t sector, uint8_t count)
+{
+    bd_addr_t addr = (bd_addr_t)sector*_ssize;
+    bd_size_t size = (bd_size_t)count*_ssize;
+    int err = _bd->read(buff, addr, size);
+    return err;
+}
+
+int USBMSD_BD::disk_status() { return _status; }
+int USBMSD_BD::disk_sync() { return 0; }
+uint64_t USBMSD_BD::disk_sectors() { return _sectors; }
+uint64_t USBMSD_BD::disk_size() { return _bd->size(); }
+
+
+// PRIVATE FUNCTIONS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Drivers/USBMSD_BD/USBMSD_BD.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,74 @@
+/* mbed USBMSD_BD Library, for providing file access to Block Devices
+ * Copyright (c) 2008-2010, sford
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef USBMSD_BD_H
+#define USBMSD_BD_H
+
+#include "mbed.h"
+#include "BlockDevice.h"
+#include "USBMSD.h"
+
+/** Use the SDcard as mass storage device using the USBMSD class
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "USBMSD_BD.h"
+ *
+ * USBMSD_BD sd(p5, p6, p7, p8);
+ *
+ * int main() {
+ *   while(1);
+ * }
+ *
+ * @endcode
+ */
+class USBMSD_BD : public USBMSD {
+public:
+
+    /** Create the File System for accessing an SD Card using SPI
+     *
+     * @param mosi SPI mosi pin connected to SD Card
+     * @param miso SPI miso pin conencted to SD Card
+     * @param sclk SPI sclk pin connected to SD Card
+     * @param cs   DigitalOut pin used as SD Card chip select
+     * @param name The name used to access the virtual filesystem
+     */
+    USBMSD_BD(BlockDevice *bd);
+    virtual int disk_initialize();
+    virtual int disk_status();
+    virtual int disk_read(uint8_t * buffer, uint64_t block_number, uint8_t count);
+    virtual int disk_write(const uint8_t * buffer, uint64_t block_number, uint8_t count);
+    virtual int disk_sync();
+    virtual uint64_t disk_sectors();    
+    virtual uint64_t disk_size();
+
+protected:
+    
+    uint64_t _sectors;
+    bd_size_t _ssize;
+    
+    uint8_t _status;
+    
+    BlockDevice* _bd;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/DeviceStudio/DSInterface.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,719 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include <ctype.h>
+#include <string.h>
+#include "DSInterface.h"
+
+#include "../../Utilities/mxm_assert.h"
+#include "../version.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "Thread.h"
+#include "BLE_ICARUS.h"
+
+
+
+#define HR_ENABLED     1 << 0
+#define SPO2_ENABLED   1 << 1
+#define BPT_ENABLED    1 << 2
+#define WHRM_ENABLED   1 << 3
+#define WSPO2_ENABLED  1 << 4
+#define AEC_ENABLED    1 << 5
+#define SCD_ENABLED    1 << 6
+#define AGC_ENABLED    1 << 7
+
+
+
+typedef struct {
+        uint8_t  fwVersion[3];
+        uint16_t enAlgoDescBitField;
+        char me11ProductID;
+}fw_type_t;
+
+const static fw_type_t HUB_FW_TABLE[] = {
+
+		{{1,8,3},   HR_ENABLED   | SPO2_ENABLED  | AGC_ENABLED                             , 'A' },
+		{{20,1,1},  WHRM_ENABLED | SCD_ENABLED   | AEC_ENABLED                             , 'B' },
+		{{30,1,1},  WHRM_ENABLED | WSPO2_ENABLED | AGC_ENABLED | SCD_ENABLED | AEC_ENABLED , 'C' },
+		{{40,0,4},  BPT_ENABLED  | SPO2_ENABLED  | AGC_ENABLED                             , 'D' }
+
+};
+
+static const char* ActivAlgoInfo[32] = {
+		[0]   = "hr,",
+		[1]   = "spo2,",
+		[2]   = "bpt,",
+		[3]   = "whrm,",
+		[4]   = "wspo2,",
+		[5]   = "aec,",
+		[6]   = "scd,",
+		[7]   = "agc,",
+};
+
+
+static const char *glbl_cmds[] = {
+	"stop",
+	"get_device_info",
+	"silent_mode 0",
+	"silent_mode 1",
+	"pause 0",
+	"pause 1",
+	"enable console",
+	"disable console",
+    "set_cfg lcd time",
+    "set_cfg flash log",
+	"set_cfg stream ascii", // set streaming mode to ascii
+	"set_cfg stream bin",   // set streaming mode to binary
+	"set_cfg report 1",   	//set report mode to 1 (brief)
+	"set_cfg report 2"		// set report mode to 2 (long)
+};
+
+typedef enum {
+	stop=0,
+	get_device_info,
+	silent0_mode,
+	silent1_mode,
+	pause0_mode,
+	pause1_mode,
+	enable_console,
+	disable_console,
+    set_lcd_time,
+    set_flash_log,
+	enable_ascii_mode,
+	enable_bin_mode,
+	set_cfg_report_1,
+	set_cfg_report_2,
+	NUM_CMDS,
+} glbl_cmd_state;
+
+
+DSInterface::DSInterface(USBSerial* USB)
+	:flash_thread_(osPriorityNormal, 2 * 1024)
+{
+	cmd_idx = 0;
+	silent_mode = false;
+	pause_mode = false;
+
+	memset(sensor_list, 0, DS_MAX_NUM_SENSORCOMMS * sizeof(SensorComm*));
+	num_sensors = 0;
+
+	m_USB = USB;
+
+	ds_console_interface_exists_ = false;
+	recordingStarted = false;
+
+	ds_queue_flash_ = &ds_queue_one_;
+	ds_queue_fill_  = &ds_queue_two_;
+	queue_init(ds_queue_flash_, buffer_one_, FLASH_MESSAGE_SIZE, sizeof(buffer_one_));
+	queue_init(ds_queue_fill_, buffer_two_, FLASH_MESSAGE_SIZE, sizeof(buffer_two_));
+	flash_thread_.start(callback(&event_queue_, &EventQueue::dispatch_forever));
+}
+
+DSInterface::~DSInterface()
+{
+}
+
+void DSInterface::add_sensor_comm(SensorComm *s)
+{
+	mxm_assert_msg(num_sensors < DS_MAX_NUM_SENSORCOMMS, "Too many sensors added to DSInterface. Increase DS_MAX_NUM_SENSORCOMMS.");
+	sensor_list[num_sensors++] = s;
+}
+
+void DSInterface::enable_console_interface()
+{
+	ds_console_interface_exists_ = true;
+}
+
+void DSInterface::ds_set_ble_status(bool en){
+	SensorComm *p_sensor;
+	ds_ble_interface_exists_ = en;
+
+	for(int sensor_num = 0; sensor_num < num_sensors; ++sensor_num) {
+		p_sensor = sensor_list[sensor_num];
+		p_sensor->SensorComm_Set_Ble_Status(ds_ble_interface_exists_);
+	}
+}
+
+void DSInterface::ds_set_flash_rec_status(bool en) {
+	SensorComm *p_sensor;
+	recordingStarted = en;
+	for(int sensor_num = 0; sensor_num < num_sensors; ++sensor_num) {
+		p_sensor = sensor_list[sensor_num];
+		p_sensor->SensorComm_Set_Flash_Status(en);
+	}
+}
+
+void DSInterface::build_command(char ch)
+{
+	if (!this->silent_mode) /* BUG: POTENTIAL BUG, what uart port to echo, not only console */
+		m_USB->printf("%c", ch);
+
+	if (ch == 0x00) {
+		pr_err("Ignored char 0x00");
+		return;
+	}
+
+	if ((ch == '\n') || (ch == '\r')) {
+		if (cmd_idx < (int)CONSOLE_STR_BUF_SZ)
+		cmd_str[cmd_idx++] = '\0';
+		m_USB->printf("\r\n");
+		parse_command();
+
+		//Clear cmd_str
+		while (cmd_idx > 0) /* BUG: POTENTIAL BUG for multiple port access */
+			cmd_str[--cmd_idx] = '\0';
+
+	} else if ((ch == 0x08 || ch == 0x7F) && cmd_idx > 0) {
+		//Backspace character
+		if (cmd_idx > 0)
+			cmd_str[--cmd_idx] = '\0';
+	} else {
+		/* BUG: POTENTIAL BUG for multiple port access */
+		if (cmd_idx < (int)CONSOLE_STR_BUF_SZ)
+			cmd_str[cmd_idx++] = ch;
+	}
+
+}
+
+void DSInterface::stopcommand() {
+	for (int i = 0; i < num_sensors; i++) {
+		sensor_list[i]->stop();
+	}
+	ds_set_flash_rec_status(false);
+
+}
+
+void DSInterface::parse_command_str(const char* cmd ) {
+	strncpy(cmd_str, cmd , strlen(cmd) + 1);
+	parse_command();
+}
+
+void DSInterface::write_to_flash_thread_funct() {
+	//static Timer mytimer;
+	//mytimer.reset();
+	//mytimer.start();
+	fwrite((uint8_t*)ds_queue_flash_->base,  1, ds_queue_flash_->item_size * ds_queue_flash_->num_item,  flashFileHandle);
+	queue_reset(ds_queue_flash_);
+	//mytimer.stop();
+	//printf("%f seconds\n", mytimer.read());
+}
+
+void DSInterface::parse_command()
+{
+	int i;
+	glbl_cmd_state cmd;
+	char charbuf[512];
+	char tempbuf[32];
+	int data_len = 0;
+	int data_len_log=0;
+	int ret;
+	bool parsed_cmd = true;
+
+	printf("%s \n",cmd_str );
+
+	//If top level command, then handle it
+	for (i = 0; i < NUM_CMDS; i++) {
+		if (starts_with(&cmd_str[0], glbl_cmds[i])) {
+			cmd = (glbl_cmd_state)i;
+
+			switch (cmd) {
+				case (enable_ascii_mode): {
+					sensor_list[0]->AsciiEn = true;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (enable_bin_mode): {
+					sensor_list[0]->AsciiEn = false;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (stop): {
+					for (int i = 0; i < num_sensors; i++) {
+						sensor_list[i]->stop();
+					}
+
+    				ds_set_flash_rec_status(false);
+
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (get_device_info): {
+
+					data_len = snprintf(charbuf, sizeof(charbuf),
+						"\r\n%s platform=%s firmware_ver=%s sensors=", cmd_str, platform_name, FIRMWARE_VERSION);
+
+					//Add list of sensors
+					for (int i = 0; i < num_sensors; i++) {
+						if (sensor_list[i]->is_visible()) {
+							data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len,
+											"%s", sensor_list[i]->get_type());
+							if (i < (num_sensors - 1))
+								data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len, ",");
+						}
+					}
+
+
+					for (int i = 0; i < num_sensors; i++) {
+						SensorComm *s = sensor_list[i];
+						if (!s->is_visible())
+							continue;
+
+						//Add algo_ver
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len,
+											" algo_ver_%s=%s", s->get_type(), s->get_algo_ver());
+
+						//Add part name
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len,
+											" part_name_%s=%s", s->get_type(), s->get_part_name());
+
+						uint8_t part_id, part_rev;
+						ret = s->get_part_info(&part_id, &part_rev);
+
+						if (ret == 0) {
+							//Add part id
+							data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len,
+											" part_id_%s=%d", s->get_type(), part_id);
+
+							//Add rev id
+							data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len,
+											" part_rev_%s=%d", s->get_type(), part_rev);
+						}
+					}
+
+					if(firmware_version){
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len, " hub_firm_ver=%s", firmware_version);
+						if(algo_desc_strsz > 0)
+							data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len, "%s", algo_desc_string);
+					}
+
+					data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len, " err=0\r\n");
+
+				} break;
+				case (silent0_mode): {
+					silent_mode = false;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (silent1_mode): {
+					silent_mode = true;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (pause0_mode): {
+					pause_mode = false;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (pause1_mode): {
+					pause_mode = true;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (enable_console): {
+					ds_console_interface_exists_ = true;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				case (disable_console): {
+					ds_console_interface_exists_ = false;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+              case (set_lcd_time): {
+
+                while(1)
+                {
+                    if(cmd_str[17+lcd_time_count] == '\0')
+                    {
+                        lcd_time_str[lcd_time_count] = '\0';
+                        break;
+                    }
+                    lcd_time_str[lcd_time_count] = cmd_str[17+lcd_time_count];
+                    lcd_time_count++;
+                }
+
+                sscanf(lcd_time_str,"%d",&lcd_time_val);
+
+                set_time(lcd_time_val);
+
+                lcd_time_count=0;
+
+				data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+						"\r\n%s err=0\r\n", cmd_str);
+
+                } break;
+              case (set_flash_log): {
+
+
+
+                    if(cmd_str[18] == '1' )
+                    {
+
+
+
+                    	time_t seconds;
+                    	seconds = time(NULL);
+        				strftime(tempbuf, 32, "/fs/log-%I-%M-%S.maximlog", localtime(&seconds));
+
+                    	flashFileHandle = fopen(tempbuf, "w+");
+
+                        if ( flashFileHandle != NULL ) {
+
+                        	fprintf(flashFileHandle,"mxim");
+
+                        	//1 byte to indicate the version of the log
+                        	unsigned char vers = 0;
+                        	//4 bytes to indicate the number of bytes used to write the format
+                        	unsigned int NumByteBLE = 764;
+                        	unsigned int NumByteNoBLE = 659;
+
+                        	fwrite(&vers,sizeof(unsigned char),1,flashFileHandle);
+
+                        	if(BLE::Instance().gap().getState().connected){
+                				fwrite(&NumByteBLE,sizeof(unsigned int),1,flashFileHandle);
+                        	}
+                        	else
+                        		fwrite(&NumByteNoBLE,sizeof(unsigned int),1,flashFileHandle);
+
+                        	ds_set_flash_rec_status(true);
+
+                        	//Write the formats
+                        	data_len_log += snprintf(logbuf+data_len_log, sizeof(logbuf) - data_len_log- 1,"ppg 0 cs=1 format={smpleCnt,16},"
+                        			"{grnCnt,20},{grn2Cnt,20},{accelX,14,3},{accelY,14,3},"
+                        			"{accelZ,14,3},{hr,12},{hrconf,8},{r,11,1},{activity,8}\n"
+                        			"ppg 1 cs=1 format={smpleCnt,8},{irCnt,20},{redCnt,20},{accelX,14,3},"
+                        			"{accelY,14,3},{accelZ,14,3},{r,12,1},{wspo2conf,8},"
+                        			"{spo2,11,1},{wspo2percentcomplete,8},{wspo2lowSNR,1},{wspo2motion,1},{status,8}\n"
+                        			"bpt 0 cs=1 format={status,4},{irCnt,19},{hr,9},"
+                        			"{prog,9},{sys_bp,9},{dia_bp,9}\n"
+                        			"bpt 1 cs=1 format={status,4},{irCnt,19},{hr,9},"
+                        			"{prog,9},{sys_bp,9},{dia_bp,9}\n");
+                        	if(BLE::Instance().gap().getState().connected){
+                        		data_len_log += snprintf(logbuf+data_len_log, sizeof(logbuf) -data_len_log- 1,"ecg 1 cs=1 format={smpleCnt,8},{rtor,14},{rtorbpm,8},"
+                        				"{pTag.0,3},{eTag.0,3},{ecg.0,18},{pTag.1,3},{eTag.1,3},{ecg.1,18},"
+                        				"{pTag.2,3},{eTag.2,3},{ecg.2,18},{pTag.3,3},{eTag.3,3},{ecg.3,18}\n");
+                        	}else{
+                        		data_len_log += snprintf(logbuf+data_len_log, sizeof(logbuf) -data_len_log- 1,"ecg 1 cs=1 format={smpleCnt,8},{pTag,3},{eTag,3},"
+                        				"{ecg,18},{rtor,14},{rtorbpm,8}\n");
+                        	}
+                        	data_len_log += snprintf(logbuf+data_len_log, sizeof(logbuf)-data_len_log - 1,"ecg 2 cs=1 format={smplCnt,8},{rtor,15}\n");
+                        	data_len_log += snprintf(logbuf+data_len_log, sizeof(logbuf) -data_len_log-1,"temp 0 cs=1 format={smpleCnt,8},{temp,16,2}\n");
+
+
+                        	fprintf(flashFileHandle,logbuf,data_len_log);
+                        }
+                        else {
+                        	ds_set_flash_rec_status(false);
+                        }
+
+        				data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+        						"\r\n%s err=0\r\n", cmd_str);
+
+
+
+                    }
+
+                    else if (cmd_str[18] == '0'){
+                    	ds_set_flash_rec_status(false);
+                    	handle_file_close();
+                    	data_len += snprintf(charbuf, sizeof(charbuf) - 1,"\r\n%s err=0\r\n", cmd_str);
+                    }
+                    else{
+                    	//print cmd not recognized string
+                    	data_len += snprintf(charbuf, sizeof(charbuf) - 1,"\r\n%s err=-255\r\n", cmd_str);
+                    }
+
+                } break;
+				case (set_cfg_report_1): {
+					//m_USB->printf("\r\n MODE 1\r\n");
+					algo_report_mode = 1;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+					
+				} break;
+				case (set_cfg_report_2): {
+					//m_USB->printf("\r\n MODE 2\r\n");
+					algo_report_mode = 2;
+					data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=0\r\n", cmd_str);
+				} break;
+				default:
+					parsed_cmd = false;
+					break;
+			}
+
+			if (parsed_cmd) {
+				m_USB->printf(charbuf);
+
+				if (BLE::Instance().gap().getState().connected) {
+					BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+				}
+
+			}
+
+			return;
+		}
+	}
+
+	//Set the stream type to check the data streaming type later
+	if(starts_with(&cmd_str[0],"read ppg 0")){
+		stream_type=0x00;
+	}
+	else if(starts_with(&cmd_str[0],"read ppg 1")){
+		stream_type=0x01;
+	}
+	else if(starts_with(&cmd_str[0],"read bpt 0")){
+		stream_type=0x02;
+	}
+	else if(starts_with(&cmd_str[0],"read bpt 1")){
+		stream_type=0x03;
+	}
+	else if(starts_with(&cmd_str[0],"read ecg 1")){
+		stream_type=0x04;
+	}
+	else if(starts_with(&cmd_str[0],"read ecg 2")){
+		stream_type=0x05;
+	}
+	else if(starts_with(&cmd_str[0],"read temp 0")){
+		stream_type=0x06;
+	}
+
+	//Loop through each sensor in sensorList
+	//If sensor.get_type() is contained in cmd_str, pass cmd_str to that sensor's parser
+	for (int i = 0; i < num_sensors; i++) {
+		if (strstr(&cmd_str[0], sensor_list[i]->get_type())) {
+			if (sensor_list[i]->parse_command(cmd_str))
+				return;
+
+			break;
+		}
+	}
+
+	//If we still haven't found a way to parse the command,
+	//send it to every sensor until one handles it
+	for (int i = 0; i < num_sensors; i++) {
+		if (sensor_list[i]->parse_command(cmd_str))
+			return;
+	}
+	
+
+	//No one could handle the command, print cmd not recognized string
+	data_len += snprintf(charbuf, sizeof(charbuf) - 1,
+			"\r\n%s err=-255\r\n", cmd_str);
+	m_USB->printf(charbuf);
+
+	if (BLE::Instance().gap().getState().connected) {
+		BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+	}
+
+}
+
+void  DSInterface::swap_queues() {
+	if(flash_thread_.get_state() != Thread::WaitingEventFlag){
+		printf("overflow happened state %d\r\n", flash_thread_.get_state());
+		return;
+	}
+	queue_t * temp_queue = ds_queue_flash_;
+	ds_queue_flash_ = ds_queue_fill_;
+	ds_queue_fill_ = temp_queue;
+	event_queue_.call(Callback<void()>(this, &DSInterface::write_to_flash_thread_funct));
+}
+
+void DSInterface::handle_file_close() {
+	//if recording is enabled do not close the file
+	if(recordingStarted) {
+		return;
+	}
+	if(flashFileHandle != NULL) {
+		if(flash_thread_.get_state() != Thread::WaitingEventFlag)
+			return;
+
+		if(ds_queue_fill_->num_item){
+			swap_queues();
+			return;
+		}
+		printf("closing file\r\n");
+		fclose(flashFileHandle);
+		flashFileHandle = NULL;
+	}
+}
+
+
+void DSInterface::force_file_close() {
+	if(flashFileHandle != NULL) {
+		while(flash_thread_.get_state() != Thread::WaitingEventFlag) {
+			wait_ms(1);
+		}
+
+		if(ds_queue_fill_->num_item){
+			swap_queues();
+		}
+
+		while(flash_thread_.get_state() != Thread::WaitingEventFlag) {
+			wait_ms(1);
+		}
+
+		//printf("closing file\r\n");
+		fclose(flashFileHandle);
+		flashFileHandle = NULL;
+	}
+}
+
+#define ECGSENSOR_ID 0x02					//TODO:FIX THESE
+#define ECGSENSOR_DATA_REPORT_MODE 0x04		//TODO:FIX THESE
+void DSInterface::data_report_execute() {
+	char buffer[256];
+	int data_len = 0;
+	buffer[0] = '\0';
+	int ret;
+	bool all_sensors_disabled = true;
+
+	for (int i = 0; i < num_sensors; i++) {
+		//if ((*it)->is_enabled()) {
+
+		if(!recordingStarted)
+			data_len = sensor_list[i]->data_report_execute(buffer, sizeof(buffer));
+		else
+			data_len = sensor_list[i]->data_report_execute(buffer + FLASH_MESSAGE_OFFSET
+			, sizeof(buffer) - FLASH_MESSAGE_OFFSET);
+
+		if (!this->pause_mode && (data_len > 0)) {
+			all_sensors_disabled = false;
+
+			if ((flashFileHandle != NULL) && (recordingStarted)) {
+				if(data_len + FLASH_MESSAGE_OFFSET != ds_queue_flash_->item_size) {
+					printf("Reinit item size: %d\r\n", data_len);
+					queue_update_items_size(ds_queue_flash_, (data_len+ FLASH_MESSAGE_OFFSET));
+					queue_update_items_size(ds_queue_fill_, (data_len+ FLASH_MESSAGE_OFFSET));
+				}
+				//set stream type
+				buffer[0] = stream_type;
+
+				// enqueue data
+				ret = enqueue(ds_queue_fill_, buffer);
+				if(ret != 0) {
+					printf("enqueue has failed %d\r\n", ds_queue_fill_->num_item);
+				}
+				if(queue_is_full(ds_queue_fill_)) {
+					swap_queues();
+				}
+			}
+
+
+			if (BLE::Instance().gap().getState().connected & !recordingStarted) {
+				ds_console_interface_exists_ = false;
+				BLE_Icarus_AddtoQueue((uint8_t *)buffer, (int32_t)sizeof(buffer), data_len);
+			}
+
+			if (ds_console_interface_exists_ & !recordingStarted){
+				if(sensor_list[0]->AsciiEn){
+					m_USB->printf(buffer);
+				}
+				else{
+					m_USB->writeBlock((uint8_t*)buffer, data_len);
+				}
+			}
+			data_len = 0;
+		}
+	}
+
+	if(all_sensors_disabled)
+		handle_file_close();
+}
+
+void DSInterface::set_fw_version(const char* version)
+{
+    if (version && *version){
+        firmware_version = version;
+        algo_desc_strsz = get_fw_algorithms();
+    }
+}
+
+int DSInterface::get_fw_algorithms( void )
+{
+
+	int i, fwToReport;
+    char *start, *end;
+	uint8_t fwIdx[3];
+
+    start = (char*) firmware_version;
+
+    /*MYG: no need to optimize ,lib function call, just called once at start of execution*/
+
+    fwIdx[0] = (uint8_t) strtol(start,&end, 10)  ; start = end;
+    fwIdx[1] = (uint8_t) strtol(start+1,&end, 10); start = end;
+    fwIdx[2] = (uint8_t) strtol(start+1,&end, 10);
+
+    fwToReport = -1;
+    for( i = 0 ; i < sizeof(HUB_FW_TABLE)/ sizeof(fw_type_t); i++ ){
+
+    	if( HUB_FW_TABLE[i].fwVersion[0] == fwIdx[0]/* &
+    		HUB_FW_TABLE[i].fwVersion[1] == fwIdx[1] &
+			HUB_FW_TABLE[i].fwVersion[2] == fwIdx[2] */) {
+
+    		   fwToReport = i;
+               break;
+    	    }
+     }
+
+    if(fwToReport == -1){
+    	return -1;
+    }
+
+     i = ((fwToReport == -1)? 0:1) * ( /*32 bit*/ 32 - __builtin_clz(HUB_FW_TABLE[fwToReport].enAlgoDescBitField));
+
+     strcpy(&algo_desc_string[0], " fw_algos=");
+     int tail = strlen(" fw_algos=");
+
+     int descStrSz      = sizeof(algo_desc_string);
+     while(--i && tail < descStrSz) {
+
+    	 if(  (HUB_FW_TABLE[fwToReport].enAlgoDescBitField >> i) & 0x0001) {
+    		   strcpy( &algo_desc_string[tail], ActivAlgoInfo[i]);
+               tail += strlen(ActivAlgoInfo[i]);
+     	 }
+
+     }
+     strcpy( &algo_desc_string[tail-1]," ");
+
+     return tail;
+     //m_USB->printf("%d %s \r\n", tail , algo_desc_string);
+
+}
+
+void DSInterface::set_fw_platform(const char* platform)
+{
+    if (platform && *platform)
+        platform_name = platform;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/DeviceStudio/DSInterface.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _DSINTERFACE_H_
+#define _DSINTERFACE_H_
+
+#include "mbed.h"
+#include <stdint.h>
+#include "SensorComm.h"
+#include "MaximSensor.h"
+#include "USBSerial.h"
+#include "../../Utilities/queue.h"
+#include "FATFileSystem.h"
+
+
+#define COMM_SUCCESS        0
+#define COMM_GENERAL_ERROR  -1
+#define COMM_INVALID_PARAM  -254
+#define COMM_NOT_RECOGNIZED -255
+
+#define FLASH_ERR_GENERAL   -1
+#define FLASH_ERR_CHECKSUM  -2
+#define FLASH_ERR_AUTH      -3
+
+#define DS_MAX_NUM_SENSORCOMMS	8
+
+#define DS_BINARY_PACKET_START_BYTE	0xAA
+
+#define FLASH_MESSAGE_SIZE 	   32
+#define CIRCULAR_QUEUE_COUNT  256
+#define FLASH_MESSAGE_OFFSET    1
+
+
+/**
+ * @brief   DSInterface is Maxim's DeviceStudio Interface class
+ */
+class DSInterface
+{
+public:
+
+    /* PUBLIC FUNCTION DECLARATIONS */
+    /**
+    * @brief    DSInterface constructor.
+    *
+    * @param[in]    fw_version Firmware version number.
+    * @param[in]    fw_platform Firmware platform name.
+	* @param[in]	USB	Pointer to USBSerial device
+    */
+    DSInterface(USBSerial* USB);
+
+	/**
+    * @brief    DSInterface destructor.
+    *
+    */
+    virtual ~DSInterface();
+
+    /**
+    * @brief    Add SensorComm for DSInterface to pass commands to
+    *
+    * @param[in]    s SensorComm instance to handle sensor commands.
+    */
+    void add_sensor_comm(SensorComm *s);
+
+    /**
+    * @brief    Command builder from i/o device.
+    * @details  Reads character and builds command from DeviceStudio commands.
+    *
+    * @param[in]    ch Input character from i/o device.
+    */
+    void build_command(char ch);
+
+	/**
+	* @brief 	Prints latest sensor data to USB stream
+	* @details	Should be called on every pass thorugh the main loop in main.cpp
+	*
+	*/
+	void data_report_execute();
+
+	void handle_file_close();
+
+	void force_file_close();
+
+	void swap_queues();
+
+    /**
+    * @brief    Set the fw version which DSInterface will replay with for "get_device_info" command
+    *
+    * @param[in]    fw_version Firmware version number.
+    */
+    void set_fw_version(const char *fw_version);
+
+    /**
+     * @brief    get the algorithms define within sesnor hub fw version
+     *
+     * @param[out]    algorihm description string
+     */
+    int get_fw_algorithms( void );
+    /**
+    * @brief    Set the fw platform which DSInterface will replay with for "get_device_info" command
+    *
+    * @param[in]    fw_platform Firmware platform name.
+    */
+    void set_fw_platform(const char *fw_platform);
+
+	/**
+	 * @brief	Enable data output on the console interface (USB)
+	 */
+	void enable_console_interface();
+
+	void ds_set_ble_status(bool en);
+
+	void ds_set_flash_rec_status(bool en);
+
+	void stopcommand();
+    void parse_command_str(const char* cmd );
+	uint8_t  algo_report_mode = 1; // sets the mode for report 1/2
+
+
+ //   FATFileSystem *logfilesystem;
+    FILE *flashFileHandle;
+
+
+    bool recordingStarted;
+
+
+protected:
+
+    /* PROTECTED FUNCTION DECLARATIONS */
+    /**
+    * @brief    Parses DeviceStudio commands.
+    * @details  Parses and executes commands. Prints return code to i/o device.
+    */
+    void parse_command();
+
+    void write_to_flash_thread_funct();
+
+
+    /* PROTECTED VARIABLES */
+	USBSerial *m_USB;
+    Mutex comm_mutex;
+
+	int num_sensors;
+	SensorComm* sensor_list[DS_MAX_NUM_SENSORCOMMS];
+
+	volatile uint8_t ds_console_interface_exists_;
+	volatile uint8_t ds_ble_interface_exists_;
+
+    const char* platform_name;
+    const char* firmware_version;
+
+    char algo_desc_string[128];
+    int algo_desc_strsz;
+
+    static const uint32_t CONSOLE_STR_BUF_SZ = 1024;
+
+    char cmd_str[CONSOLE_STR_BUF_SZ];
+    int cmd_idx;
+    bool silent_mode;
+    bool pause_mode;
+    char lcd_time_str[30];
+    int lcd_time_count=0;
+    int lcd_time_val;
+
+    //buffer to hold string that will be written into the log file
+    char logbuf[1024];
+
+    //Flag to check which type of data streaming will occur
+    char stream_type;
+
+    // flash logging variables
+    queue_t ds_queue_one_;
+    queue_t ds_queue_two_;
+
+    queue_t *ds_queue_flash_;
+    queue_t *ds_queue_fill_;
+
+    unsigned char buffer_one_[CIRCULAR_QUEUE_COUNT * FLASH_MESSAGE_SIZE];
+    unsigned char buffer_two_[CIRCULAR_QUEUE_COUNT * FLASH_MESSAGE_SIZE];
+
+    EventQueue event_queue_;
+    Thread flash_thread_;
+};
+
+#endif /* _DSINTERFACE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/EcgComm/EcgComm.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,461 @@
+	/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include "EcgComm.h"
+#include "EcgComm_Defines.h"
+#include <ctype.h>
+#include "CRC8.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "MAX30001_Helper.h"
+#include "BLE_ICARUS.h"
+
+#define ECG_REG_COUNT 64
+
+const char *cmd_tbl_ecg[] = {
+	"int",
+	"get_format ecg 1",
+	"get_format ecg 2",
+	"read ecg 1",		//ecg
+	"read ecg 2",		//android app data streaming mode
+	"get_reg ecg",
+	"set_reg ecg",
+	"dump_reg ecg",
+	"set_cfg ecg invert"
+};
+
+typedef union {
+	struct {
+		uint32_t ptag     		:3;
+		uint32_t etag     		:3;
+		uint32_t ecg_data       :16;
+		uint32_t reserved       :8;
+	};
+	int32_t ecg_data_whole;
+} ecg_data_parser;
+
+EcgComm::EcgComm(USBSerial* USB):
+	SensorComm("ecg", true)
+{
+	m_USB = USB;
+}
+
+void EcgComm::stop()
+{
+	int ret;
+	comm_mutex.lock();
+	data_report_mode = 0;
+	comm_mutex.unlock();
+	sample_count = 0;
+	ret = sensor->sensor_enable(0);
+	if (ret < 0) {
+		pr_err("sensor_enable failed. ret: %d", ret);
+	}
+}
+
+bool EcgComm::parse_command(const char* cmd)
+{
+	int i;
+	int ret = EXIT_SUCCESS;
+	uint8_t reg_addr;
+	uint32_t reg_val = 0;
+	bool recognizedCmd = false;
+	uint8_t params[32];
+	char charbuf[768];
+	int data_len = 0;
+	addr_val_pair reg_vals[ECG_REG_COUNT];
+	int comma = 0;
+
+	if (sensor == NULL) {
+		pr_err("sensor object is invalid!");
+		return false;
+	}
+
+	for (i = 0; i < NUM_CMDS; i++) {
+		if (starts_with(cmd, cmd_tbl_ecg[i])) {
+			cmd_state_t user_cmd = (cmd_state_t)i;
+			recognizedCmd = true;
+			switch (user_cmd) {
+				case get_format_1:
+					if(AsciiEn)
+					{
+						m_USB->printf("\r\n%s format=smpleCnt,ecg err=0\r\n",
+								cmd);
+					}
+					else
+					{
+
+						if(BLE::Instance().gap().getState().connected) {
+							data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s enc=bin cs=1 format={smpleCnt,8},{rtor,14},{rtorbpm,8},"
+																		  "{pTag.0,3},{eTag.0,3},{ecg.0,18},"
+																		  "{pTag.1,3},{eTag.1,3},{ecg.1,18},"
+																		  "{pTag.2,3},{eTag.2,3},{ecg.2,18},"
+																		  "{pTag.3,3},{eTag.3,3},{ecg.3,18} err=0\r\n", cmd);
+						} else {
+							m_USB->printf("\r\n%s enc=bin cs=1 format={smpleCnt,8},{pTag,3},{eTag,3},"
+									"{ecg,18},{rtor,14},{rtorbpm,8} err=0\r\n", cmd);
+						}
+					}
+					break;
+				case get_format_2:
+					if(AsciiEn)
+					{
+						m_USB->printf("\r\n%s format=smpleCnt,rtor err=0\r\n",
+								cmd);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s enc=bin cs=1 format={smplCnt,8},{rtor,15} err=0\r\n",
+								 cmd);
+						m_USB->printf(charbuf);
+					}
+					break;
+				case ecg_mode:
+
+					comm_mutex.lock();
+					data_report_mode = ecg_mode;
+					comm_mutex.unlock();
+					ret = sensor->sensor_enable(1);
+					if (ret < 0) {
+						pr_err("sensor_enable failed. ret: %d", ret);
+					}
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+					break;
+				case ecg_mode_2:
+					comm_mutex.lock();
+					data_report_mode = ecg_mode_2;
+					comm_mutex.unlock();
+					ret = ((MAX30001_Helper*)sensor)->Max30001Helper_SetECGSampleRate(MAX30001_Helper::k128SPS);
+					ret |= sensor->sensor_enable(1);
+					if (ret < 0) {
+						pr_err("sensor_enable failed. ret: %d", ret);
+					}
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+					break;
+
+				case get_reg:
+					reg_addr = 0;
+					reg_val = 0;
+					ret = parse_get_reg_cmd(cmd, sensor_type, &reg_addr);
+					if (!ret) {
+						ret = sensor->MS_max30001readRegister(reg_addr, &reg_val);
+						if(ret == 0) {
+							data_len = snprintf(charbuf, sizeof(charbuf),
+									"\r\n%s reg_val=%08X err=%d\r\n", cmd, reg_val, ret);
+							m_USB->printf(charbuf);
+						}else {
+							data_len = snprintf(charbuf, sizeof(charbuf),
+									"\r\n%s err=%d\r\n", cmd, ret);
+							m_USB->printf(charbuf);
+						}
+					}else{
+						data_len = snprintf(charbuf, sizeof(charbuf),
+								"\r\n%s err=%d\r\n", cmd, ret);
+						m_USB->printf(charbuf);
+					}
+					break;
+				case set_reg:
+					reg_addr = 0;
+					reg_val = 0;
+					ret = parse_set_reg_cmd(cmd, sensor_type, &reg_addr, &reg_val);
+					if (!ret) {
+						ret = sensor->MS_max30001writeRegister(reg_addr, reg_val);
+						if(ret == 0) {
+							data_len = snprintf(charbuf, sizeof(charbuf),
+									"\r\n%s err=%d\r\n", cmd, ret);
+							m_USB->printf(charbuf);
+						}else {
+							data_len = snprintf(charbuf, sizeof(charbuf),
+									"\r\n%s err=%d\r\n", cmd, ret);
+							m_USB->printf(charbuf);
+						}
+					}else{
+						data_len = snprintf(charbuf, sizeof(charbuf),
+								"\r\n%s err=%d\r\n", cmd, ret);
+						m_USB->printf(charbuf);
+					}
+					break;
+				case dump_regs:
+					for (int j = 0; j < ECG_REG_COUNT; j++) {
+						reg_vals[j].addr = 0xFF;
+					}
+					ret = sensor->dump_registers(reg_vals);
+
+					if (ret) {
+						m_USB->printf("\r\n%s err=%d\n", cmd, ret);	
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\n", cmd, ret);
+					}
+					else {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s reg_val=", cmd);
+						comma = false;
+
+						for (int reg = 0; reg < ECG_REG_COUNT; reg++) {
+							if(reg_vals[reg].addr == 0xFF)
+								break;
+
+							if (comma) {
+                                data_len += snprintf(charbuf + data_len,
+                                        sizeof(charbuf) - data_len - 1, ",");
+							}
+                            data_len += snprintf(charbuf + data_len,
+                                    sizeof(charbuf) - data_len - 1,
+                                    "{%X,%X}", (unsigned int)reg_vals[reg].addr, (unsigned int)reg_vals[reg].val);
+							comma = 1;
+						}
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1, " err=0\r\n");
+						m_USB->printf(charbuf);
+					}
+					break;
+				case InterruptInit:
+					ret = ECG_Parse_Parameters_Single((cmd + strlen(cmd_tbl_ecg[i])), params, kInterruptParametersCount);
+					if(ret != 0){
+						printf("ECG_Parse_Parameters_Single has failed\n");
+						break;
+					}
+					ret = sensor->MS_max30001_INT_assignment(params[0], params[1], params[2],
+															 params[3], params[4], params[5],
+															 params[6], params[7], params[8],
+															 params[9], params[10], params[11],
+															 params[12], params[13], params[14],
+															 params[15], params[16]);
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, ret == 0 ? 0 : -255);
+					break;
+
+				case set_cfg_ecg_invert: {
+					ret = ((MAX30001_Helper*)sensor)->MAX30001_Helper_Invert_Waveform();
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, ret);
+				} break;
+
+				default:
+					break;
+			}
+
+
+	if (BLE::Instance().gap().getState().connected) {
+		BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+	}
+
+
+		}
+	}
+
+	return recognizedCmd;
+}
+
+int EcgComm::data_report_execute(char* buf, int size)
+{
+	int ret = 0;
+	int16_t data_len = 0;
+	uint8_t tmp_report_mode;
+	ecg_sensor_report sensor_report = {0};
+	ecg_sensor_report sensor_report_2 = {0};
+	ecg_sensor_report sensor_report_3 = {0};
+	ecg_sensor_report sensor_report_4 = {0};
+	ecg1_comm_packet* data_packet;
+	ecg_comm_packet_ble* data_packet_ble;
+
+	if(!is_enabled())
+		return 0;
+
+	if (sensor == NULL)
+		return 0;
+
+	comm_mutex.lock();
+	tmp_report_mode = data_report_mode;
+	comm_mutex.unlock();
+
+	if(((MAX30001_Helper*)sensor)->Max30001Helper_getInterruptStatus()) {
+		((MAX30001_Helper*)sensor)->Max30001Helper_max30001_int_handler();
+		((MAX30001_Helper*)sensor)->Max30001Helper_setInterruptStatus(false);
+	}
+
+	switch(tmp_report_mode) {
+		case ecg_mode:
+		case ecg_mode_2:
+if(AsciiEn){
+
+			ret = ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report);
+
+			if (ret < 0)
+				return 0;
+			data_len = snprintf(buf, size - 1,
+				"%lu,%ld,%d,%d,%.3f,%.3f,%.3f\r\n",
+				sample_count++,
+				sensor_report.ecg,
+				sensor_report.rtor,
+				sensor_report.rtor_bpm,
+				sensor_report.x,
+				sensor_report.y,
+				sensor_report.z);
+}
+else{
+			if((m_sensorcomm_ble_interface_exists_ | m_sensorcomm_flash_rec_started_) && (((MAX30001_Helper*)sensor)->MAX30001_Helper_Queue_Size() >= m_ecg_ble_packet_count_)) {
+
+				ret = ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report);
+				ret |= ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report_2);
+				ret |= ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report_3);
+				ret |= ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report_4);
+
+				if (ret < 0)
+					return 0;
+				data_packet_ble = (ecg_comm_packet_ble*)buf;
+				data_packet_ble->start_byte = 0xAA;
+				data_packet_ble->sample_count = sample_count;
+				sample_count += m_ecg_ble_packet_count_;
+				data_packet_ble->ecg = sensor_report.ecg;
+				data_packet_ble->ecg_2 = sensor_report_2.ecg;
+				data_packet_ble->ecg_3 = sensor_report_3.ecg;
+				data_packet_ble->ecg_4 = sensor_report_4.ecg;
+				data_packet_ble->rtor = (sensor_report.rtor | sensor_report_2.rtor | sensor_report_3.rtor | sensor_report_4.rtor);
+				data_packet_ble->rtor_bpm = (sensor_report.rtor_bpm | sensor_report_2.rtor_bpm | sensor_report_3.rtor_bpm | sensor_report_4.rtor_bpm);
+				data_packet_ble->crc8 = crc8((uint8_t*)data_packet_ble, sizeof(*data_packet_ble) - sizeof(uint8_t));
+				data_len = sizeof(*data_packet_ble);
+			} else if((m_sensorcomm_ble_interface_exists_ == 0) & (m_sensorcomm_flash_rec_started_ == 0)) {
+
+				ret = ((MAX30001_Helper*)sensor)->get_sensor_report(sensor_report);
+
+				if (ret < 0)
+					return 0;
+				data_packet = (ecg1_comm_packet*)buf;
+				data_packet->start_byte = 0xAA;
+				data_packet->sample_count = sample_count++;
+				data_packet->ecg = sensor_report.ecg;
+				data_packet->rtor = sensor_report.rtor;
+				data_packet->rtor_bpm = sensor_report.rtor_bpm;
+				data_packet->crc8 = crc8((uint8_t*)data_packet, sizeof(*data_packet) - sizeof(uint8_t));
+				data_len = sizeof(*data_packet);
+			}
+}
+			break;
+		default:
+			break;
+	}
+
+	if (data_len < 0) {
+		pr_err("snprintf buf failed");
+	} else if (data_len > size) {
+		pr_err("buffer is insufficient to hold data");
+	}
+
+	return data_len;
+}
+
+// this function parses the parameters for max30001_ECG_InitStart function
+int EcgComm::ECG_Parse_Parameters(char *substring, uint8_t parameters[], uint8_t parameters_len){
+	char *pt_ch = substring;
+
+	if(strlen(pt_ch) < (parameters_len*2)){
+		pr_err("Wrong number of params");
+		return -1;
+	}else{
+		if(ConvertHexString2Decimal(pt_ch, parameters, parameters_len) != 0)
+			return -1;
+		for(int i = 0; i < parameters_len; ++i){
+			printf("%d\n", parameters[i]);
+		}
+	}
+	return 0;
+}
+
+// this function parses the parameters for max30001_ECG_InitStart function for single digits
+int EcgComm::ECG_Parse_Parameters_Single(const char *substring, uint8_t parameters[], uint8_t parameters_len){
+	const char *pt_ch = substring;
+	int i = 0;
+	unsigned char num_found = 0;
+
+	if(strlen(pt_ch) < (parameters_len)){
+		pr_err("Wrong number of params");
+		return -1;
+	}else{
+		for(i = 0; i < parameters_len; ++i){
+			if(getHexDigit(pt_ch[i], &num_found)){
+				parameters[i] = num_found;
+			}
+			else{
+				pr_err("parsing of parameters failed");
+				return -1;
+			}
+		}
+		for(i = 0; i < parameters_len; ++i){
+			printf("%d\n", parameters[i]);
+		}
+	}
+	return 0;
+
+}
+
+char getHexDigit(char ch_hex, uint8_t *bt_hex)
+{
+	if (ch_hex >= '0' && ch_hex <= '9')
+		*bt_hex = ch_hex - '0';
+	else if (ch_hex >= 'A' && ch_hex <= 'F')
+		*bt_hex = ch_hex - 'A' + 10;
+	else if (ch_hex >= 'a' && ch_hex <= 'f')
+		*bt_hex = ch_hex - 'a' + 10;
+	else
+		return false;
+	return true;
+}
+
+
+int ConvertHexString2Decimal(char *pt_ch, uint8_t *bt_hex, int len){
+
+	if(strlen(pt_ch) < ((uint32_t)len * 2))
+		return -1;
+
+	for(int i = 0; i < len; ++i){
+		uint8_t hex_digit;
+		// Get most significant hex digit
+		if (!getHexDigit(*(pt_ch++), &hex_digit))
+			return -1;
+		else
+		{
+			hex_digit <<= 4;
+			bt_hex[i] = hex_digit;
+		}
+		// Get least significant digit
+		if (!getHexDigit(*(pt_ch++), &hex_digit))
+			return -1;
+		else{
+			bt_hex[i] |= hex_digit;
+		}
+	}
+	return 0;
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/EcgComm/EcgComm.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _ECGCOMM_H_
+#define _ECGCOMM_H_
+
+#include "mbed.h"
+#include "SensorComm.h"
+#include "USBSerial.h"
+
+/**
+ * @brief	EcgComm ECG sensor command handler class.
+ * @details
+ */
+class EcgComm:	public SensorComm
+{
+public:
+
+	static const uint8_t kEcgInitParametersCount = 11;
+
+	static const uint8_t kRtoRInitParametersCount = 9;
+
+	static const uint8_t kInterruptParametersCount = 17;
+
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	EcgComm constructor.
+	*
+	*/
+	EcgComm(USBSerial* USB);
+
+	/* PROTECTED FUNCTION DECLARATIONS */
+	/**
+	* @brief	Parses DeviceStudio commands.
+	* @details	Parses and executes commands. Prints return code to i/o device.
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	bool parse_command(const char* cmd);
+
+	/**
+	* @brief	 Fill in buffer with sensor data
+	*
+	* @param[in]	 buf Buffer to fill data into
+	* @param[in]	 size Maximum size of buffer
+	* @param[out]	Number of bytes written to buffer
+	*/
+	int data_report_execute(char* buf, int size);
+
+
+	/**
+	* @brief	Stop collecting data and disable sensor
+	*/
+	void stop();
+
+	// this function parses the parameters for max30001_ECG_InitStart function
+	int ECG_Parse_Parameters(char *substring, uint8_t parameters[], uint8_t parameters_len);
+
+	// this function parses the parameters for max30001_ECG_InitStart function for single digits
+	virtual int ECG_Parse_Parameters_Single(const char *substring, uint8_t parameters[], uint8_t parameters_len);
+
+
+private:
+	/* PRIVATE TYPE DEFINITIONS */
+	typedef enum _cmd_state_t {
+		InterruptInit=0,
+		get_format_1,
+		get_format_2,
+		ecg_mode,
+		ecg_mode_2,		//android app data stream mode
+		get_reg,
+		set_reg,
+		dump_regs,
+		set_cfg_ecg_invert,
+		NUM_CMDS,
+	} cmd_state_t;
+
+	typedef struct __attribute__((packed)) {
+		uint32_t start_byte		:8;
+		uint32_t sample_count	:8;		//Represent 0-127
+		uint32_t ecg			:24;	//ECG ADC data
+		uint32_t rtor			:14;	//R to R data
+		uint32_t rtor_bpm		:8;
+		uint8_t 				:0;		//Needed to align crc to byte boundary
+		uint8_t crc8			:8;
+	} ecg1_comm_packet;
+
+	typedef struct __attribute__((packed)) {
+		uint32_t start_byte		:8;
+		uint32_t sample_count	:8;
+		uint32_t rtor			:14;	//R to R data
+		uint32_t rtor_bpm		:8;
+		uint32_t ecg			:24;	//ECG ADC data
+		uint32_t ecg_2			:24;	//ECG ADC data 2
+		uint32_t ecg_3			:24;	//ECG ADC data 2
+		uint32_t ecg_4			:24;	//ECG ADC data 2
+		uint8_t 				:0;		//Needed to align crc to byte boundary
+		uint8_t crc8			:8;
+	} ecg_comm_packet_ble;
+	static const uint8_t m_ecg_ble_packet_count_ = 4;	//how many ecg info in a ble struct
+
+
+
+	/* PRIVATE VARIABLES */
+	USBSerial *m_USB;
+};
+
+char getHexDigit(char ch_hex, uint8_t *bt_hex);
+
+int ConvertHexString2Decimal(char *ch_hex, uint8_t *bt_hex, int len);
+
+		/*! Sensor output data to report */
+typedef struct {
+	int32_t ecg;
+	uint16_t rtor;
+	uint8_t rtor_bpm;
+	uint8_t reserved;
+	float x;
+	float y;
+	float z;
+} ecg_sensor_report;
+
+#endif /* _PPGCOMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/EcgComm/EcgComm_Defines.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,65 @@
+#ifndef _ECGCOMM_DEFINES_H
+#define _ECGCOMM_DEFINES_H
+
+
+
+
+/// Initialization values for ECG_InitStart()
+#define EN_ECG	 	  0b1
+#define OPENP	 	  0b0
+#define OPENN	 	  0b0
+#define POL			  0b0
+#define CALP_SEL     0b00
+#define CALN_SEL     0b00
+#define E_FIT	       15
+#define RATE	        2
+#define GAIN	     0b00
+#define DHPF	     0b01
+#define DLPF	     0b01
+
+// Default Initialization Parameters for RtoR_InitStart
+#define EN_RTOR     0x01
+#define WNDW		0x03
+#define GAIN_RTOR	0x0F
+#define PAVG		0x02
+#define PTSF		0x03
+#define HOFF		0x20
+#define RAVG		0x02
+#define RHSF		0x04
+#define CLR_RRINT	0x01
+
+// Optimal Initialization Parameters for RtoR_InitStart
+#define EN_RTOR_OP     0x01
+#define WNDW_OP		0x02
+#define GAIN_RTOR_OP	0x06
+#define PAVG_OP		0x01
+#define PTSF_OP		0x06
+#define HOFF_OP		0x1E
+#define RAVG_OP		0x02
+#define RHSF_OP		0x00
+#define CLR_RRINT_OP	0x01
+
+
+// Default Initialization Parameters for INT_assignment
+#define EN_ENINT_LOC		0x01
+#define EN_EOVF_LOC			0x00
+#define EN_FSTINT_LOC		0x00
+#define EN_DCLOFFINT_LOC	0x02
+#define EN_BINT_LOC			0x01
+#define EN_BOVF_LOC			0x00
+#define EN_BOVER_LOC		0x02
+#define EN_BUNDR_LOC		0x02
+#define EN_BCGMON_LOC		0x00
+#define EN_PINT_LOC			0x00
+#define EN_POVF_LOC			0x00
+#define EN_PEDGE_LOC		0x00
+#define EN_LONINT_LOC		0x00
+#define EN_RRINT_LOC		0x02
+#define EN_SAMP_LOC			0x00
+#define INTB_TYPE			0x03
+#define INT2B_TYPE			0x03
+
+
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SensorComm/SensorComm.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,201 @@
+  /***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include <ctype.h>
+#include "SensorComm.h"
+#include "Peripherals.h"
+#include "BLE_ICARUS.h"
+
+//define and initialize the static AsciiEn which is declared in the header
+bool SensorComm::AsciiEn=false;
+
+SensorComm::SensorComm(const char *type, bool visible)
+{
+	sensor = NULL;
+	sensor_type = type;
+	vis = visible;
+}
+
+SensorComm::~SensorComm()
+{
+}
+
+void SensorComm::comm_init(MaximSensor *s)
+{
+	sensor = s;
+}
+
+const char* SensorComm::get_type()
+{
+	return sensor_type;
+}
+
+unsigned char SensorComm::get_sensor_id() {
+
+	if (sensor!= NULL)
+		return( sensor->get_sensor_id());
+	else
+		return(255);
+}
+
+const char* SensorComm::get_part_name()
+{
+	if (sensor != NULL)
+	{
+		return sensor->get_sensor_part_name();
+	}
+	else
+	{
+		return "unknown";
+	}
+}
+
+const char* SensorComm::get_algo_ver()
+{
+	if (sensor != NULL)
+	{
+		return sensor->get_sensor_algo_ver();
+	}
+	else
+	{
+		return "unknown";
+	}
+}
+
+int SensorComm::get_part_info(uint8_t *part_id, uint8_t *rev_id)
+{
+	if (sensor != NULL) {
+		return sensor->get_part_info(part_id, rev_id);
+	} else {
+		*part_id = 0xFF;
+		*rev_id = 0xFF;
+		return -1;
+	}
+}
+
+bool SensorComm::is_enabled()
+{
+	return (data_report_mode != 0);
+}
+
+uint8_t SensorComm::get_data_report_mode()
+{
+	return (data_report_mode);
+}
+
+
+int SensorComm::sensor_get_reg(char *ptr_ch, uint8_t *reg_addr, uint8_t *value)
+{
+	int ret = EXIT_FAILURE;
+	uint8_t num_found;
+	int which_reg;
+	*value = 0;
+
+	while (*ptr_ch) {
+		if (isxdigit((int)*ptr_ch)) {
+			num_found = (uint8_t)sscanf(ptr_ch, "%x", &which_reg);
+			if (num_found == 1) {
+				*reg_addr = which_reg;
+				ret = sensor->readRegister(*reg_addr, value, 1);
+			}
+			break;
+		} else {
+			ptr_ch++;
+		}
+	}
+	return ret;
+}
+
+int SensorComm::sensor_set_reg(char *ptr_ch)
+{
+	int ret = EXIT_FAILURE;
+	uint8_t num_found;
+	unsigned int reg_addr, value;
+	char *ptr_char;
+
+	ptr_char = ptr_ch;
+	while (*ptr_char) {
+		if (isxdigit((int)*ptr_char)) {
+			num_found = (uint8_t)sscanf(ptr_char, "%x %x", &reg_addr, &value);
+			if (num_found == 2) {
+				ret = sensor->writeRegister(reg_addr, (uint8_t)value);
+			}
+			break;
+		} else {
+			ptr_char++;
+		}
+	}
+	return ret;
+}
+
+
+int SensorComm::InsertRegValuesIntoBleQeueu(addr_val_pair *reg_values, uint8_t reg_count){
+	Reg_Val_BLE values = {0};
+	int ret = 0;
+
+	if (!BLE::Instance().gap().getState().connected)
+		return 0;
+
+	while(reg_count >= kMaxRegisterInOneStruct){
+		for(uint8_t i = 0; i < kMaxRegisterInOneStruct; ++i){
+			values.reg_adresses[i] = reg_values[i].addr;
+			values.reg_values[i] = reg_values[i].val;
+		}
+		ret |= BLE_Icarus_AddtoQueue((uint8_t *)(&values), sizeof(Reg_Val_BLE), sizeof(Reg_Val_BLE));
+		reg_count -= kMaxRegisterInOneStruct;
+	}
+
+	if(reg_count){
+		for(uint8_t i = 0; i < reg_count; ++i){
+			values.reg_adresses[i] = reg_values[i].addr;
+			values.reg_values[i] = reg_values[i].val;
+		}
+		ret |= BLE_Icarus_AddtoQueue((uint8_t *)(&values), sizeof(Reg_Val_BLE), sizeof(Reg_Val_BLE));
+	}
+
+	return ret;
+}
+
+void SensorComm::stop() { }
+
+bool SensorComm::parse_command(const char* cmd) { return false; }
+
+int SensorComm::data_report_execute(char* buf, int size) { return 0; }
+
+void SensorComm::SensorComm_Set_Ble_Status(bool status) {
+	m_sensorcomm_ble_interface_exists_ = status;
+}
+
+void SensorComm::SensorComm_Set_Flash_Status(bool status) {
+	m_sensorcomm_flash_rec_started_ = status;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SensorComm/SensorComm.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _SENSORCOMM_H_
+#define _SENSORCOMM_H_
+
+#include "mbed.h"
+#include <stdint.h>
+#include "MaximSensor.h"
+
+/**
+ * @brief	SensorComm is Maxim Sensor Studio GUI command handler base class.
+ * @details	SensorComm includes base functions and data structures for to
+ *	create new command handler classes. All command handler classes should
+ *	implement this class.
+ */
+class SensorComm
+{
+public:
+
+	//Flag to check if ascii is enabled
+	static bool AsciiEn;
+
+	const static uint8_t kMaxRegisterInOneStruct = 4;
+
+	// size of that struct is 20 bytes(checked)
+	typedef struct{
+		uint8_t reg_adresses[4];
+		uint32_t reg_values[4];
+	}Reg_Val_BLE;
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	SensorComm constructor.
+	*
+	* @param[in]	sensorType Name of sensor (ie "ppg")
+	* @param[in]	visible	Whether this sensor should be visible to users in DeviceStudio
+	*/
+	SensorComm(const char *type, bool visible);
+
+	/**
+	* @brief	SensorComm destructor.
+	*
+	*/
+	virtual ~SensorComm();
+
+	/**
+	* @brief	Initializer for SensorComm.
+	*
+	* @param[in]	s MaximSensor instance to handle sensor commands.
+	*/
+	void comm_init(MaximSensor *s);
+
+	/**
+	* @brief	Get the type of the sensor
+	*
+	* @param[out]	char* to name of type (ie "ppg")
+	*/
+	const char* get_type();
+
+	/**
+	* @brief	Get the maxim part name of the sensor
+	*
+	* @param[out]	char* to name (ie "max86140")
+	*/
+	virtual const char* get_part_name();
+
+	/**
+	* @brief	Get the maxim algorithm version of the sensor
+	*
+	* @param[out]	char* to name (ie "max86140")
+	*/
+	virtual const char* get_algo_ver();
+
+	/**
+	* @brief	Get the id and revision of the part
+	*
+	*/
+	int get_part_info(uint8_t *part_id, uint8_t *part_rev);
+
+	/**
+	* @brief	Returns whether the sensor should be visible to users in DeviceStudio
+	*/
+	bool is_visible() { return vis; }
+
+	/**
+	* @brief	Get whether or not the sensor is enabled
+	*
+	* @param[out] true if the sensor is enabled
+	*/
+	bool is_enabled();
+
+	/**
+	* @brief	Get data report mode of the sensor
+	*
+	* @param[out] data report mode
+	*/
+	uint8_t get_data_report_mode();
+
+
+
+	/**
+	* @brief	Stop collecting data and disable sensor
+	*/
+	virtual void stop();
+
+	/**
+	* @brief	Parses DeviceStudio commands.
+	* @details	Parses and executes commands. Prints return code to i/o device.
+	*
+	* @param[in] cmd - Command to parse
+	*
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	virtual bool parse_command(const char* cmd);
+
+	/**
+	* @brief	 Fill in buffer with sensor data
+	*
+	* @param[in]	 buf Buffer to fill data into
+	* @param[in]	 size Maximum size of buffer
+	* @param[out]	Number of bytes written to buffer
+	*/
+	virtual int data_report_execute(char* buf, int size);
+
+	/**
+	 *
+	 * @param status
+	 */
+	void SensorComm_Set_Ble_Status(bool status);
+
+	void SensorComm_Set_Flash_Status(bool status);
+
+	int InsertRegValuesIntoBleQeueu(addr_val_pair *reg_values, uint8_t reg_count);
+
+	virtual unsigned char get_sensor_id();
+
+protected:
+
+	/* PROTECTED VARIABLES */
+	Mutex comm_mutex;
+
+	MaximSensor *sensor;
+
+	int sensor_get_reg(char *ptr_ch, uint8_t *reg_addr, uint8_t *value);
+	int sensor_set_reg(char *ptr_ch);
+
+	volatile uint8_t data_report_mode;
+	volatile uint8_t console_interface_exists;
+	volatile bool m_sensorcomm_ble_interface_exists_;
+	volatile bool m_sensorcomm_flash_rec_started_;
+
+	const char* sensor_type;
+	bool vis;
+	int sample_count;
+};
+
+#endif /* _SENSORCOMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSBootloader/SSBootloaderComm.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,615 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "DSInterface.h"
+#include "SSBootloaderComm.h"
+
+#include "../../../../Utilities/mxm_assert.h"
+#include "SSInterface.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "BLE_ICARUS.h"
+
+
+static bool flag_image_on_ram = false;
+
+static const char* const cmd_tbl[] = {
+    "bootldr",
+    "exit",
+    "reset",
+    "page_size",
+    "num_pages",
+    "set_iv",
+    "set_auth",
+    "erase",
+    "page_erase",
+    "flash",
+	"set_cfg bl enter_mode",
+	"set_cfg bl enter_pin",
+	"set_cfg bl enter_pol",
+	"set_cfg bl exit_mode",
+	"set_cfg bl exit_to",
+	"set_cfg bl save",
+	"image_on_ram",
+	"set_cfg host ebl",
+	"set_cfg host cdf", /* bootloader comm_delay_factor */
+	"get_cfg host",
+};
+
+SSBootloaderComm::SSBootloaderComm(USBSerial *USB, SSInterface* ssInterface, DSInterface* dsInterface)
+	:SensorComm("bl", false), m_USB(USB), ss_int(ssInterface), ds_int(dsInterface)
+{
+	bl_comm_delay_factor = 1;
+}
+
+int SSBootloaderComm::parse_auth(const char* cmd, uint8_t *auth_bytes)
+{
+    char cmdStr[] = "set_auth ";
+    int length = strlen(cmd);
+    int expected_length = strlen(cmdStr) + 2*AES_AUTH_SIZE;
+    if (length != expected_length) {
+        pr_err("Couldn't parse Auth bytes, incorrect number of characters (len:%d, expected:%d)\n",
+            length, expected_length);
+        return COMM_INVALID_PARAM;
+    }
+
+    const char* macPtr = cmd + strlen(cmdStr);
+
+	int num_found;
+	int byteVal;
+	for (int aidx = 0; aidx < AES_AUTH_SIZE; aidx++) {
+		num_found = sscanf(macPtr, "%2X", &byteVal);
+
+		if (num_found != 1 || byteVal > 0xFF) {
+			pr_err("Couldn't parse byte %d of Auth\n", aidx);
+			return COMM_INVALID_PARAM;
+		}
+
+		auth_bytes[aidx] = (uint8_t)byteVal;
+		macPtr += 2;
+	}
+
+	return COMM_SUCCESS;
+}
+
+int SSBootloaderComm::parse_iv(const char* cmd, uint8_t* iv_bytes)
+{
+    char cmdStr[] = "set_iv ";
+    int length = strlen(cmd);
+    int expected_length = strlen(cmdStr) + 2*AES_NONCE_SIZE;
+    if (length != expected_length) {
+        pr_err("Couldn't parse IV, incorrect number of characters (len:%d, expected:%d)\n",
+               length, expected_length);
+        return COMM_INVALID_PARAM;
+    }
+
+    const char* ivPtr = cmd + strlen(cmdStr);
+
+	int num_found;
+	int byteVal;
+	for (int ividx = 0; ividx < AES_NONCE_SIZE; ividx++) {
+		num_found = sscanf(ivPtr, "%2X", &byteVal);
+
+		if (num_found != 1 || byteVal > 0xFF) {
+			pr_err("Couldn't parse byte %d of IV\n", ividx);
+			return COMM_INVALID_PARAM;
+		}
+		iv_bytes[ividx] = (uint8_t)byteVal;
+		ivPtr += 2;
+	}
+
+	return COMM_SUCCESS;
+}
+
+bool SSBootloaderComm::parse_command(const char* cmd)
+{
+    int ret = EXIT_SUCCESS;
+    bool recognizedCmd = false;
+	char charbuf[768];
+	int data_len = 0;
+	bool flash_flag=false;
+
+	if (!ss_int) {
+		pr_err("No SmartSensor Interface defined!");
+		return false;
+	}
+	if (!ds_int) {
+		pr_err("No DeviceStudio Interface defined!");
+		return false;
+	}
+
+    for (int i = 0; i < NUM_CMDS; i++) {
+        if (starts_with(cmd, cmd_tbl[i])) {
+            cmd_state_t user_cmd = (cmd_state_t)i;
+            recognizedCmd = true;
+
+            switch (user_cmd) {
+                case cmd_enter_bootldr:
+                {
+					SS_STATUS status;
+					status = ss_int->reset_to_bootloader();
+					if (status == SS_SUCCESS){
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+	                    m_USB->printf(charbuf);
+					}
+					else{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+	                    m_USB->printf(charbuf);
+					}
+
+                    ds_int->set_fw_platform(ss_int->get_ss_platform_name());
+                    ds_int->set_fw_version(ss_int->get_ss_fw_version());
+                    got_page_size = false;
+                    sent_num_pages = false;
+                } break;
+
+                case cmd_exit_bootldr:
+                {
+					SS_STATUS status = ss_int->reset_to_main_app();
+                    if (status == SS_SUCCESS){
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                        m_USB->printf(charbuf);
+                    }
+                    else{
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                        m_USB->printf(charbuf);
+                    }
+
+                    ds_int->set_fw_platform(ss_int->get_ss_platform_name());
+                    ds_int->set_fw_version(ss_int->get_ss_fw_version());
+
+		} break;
+
+                case cmd_reset:
+                {
+					SS_STATUS status = ss_int->reset();
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                    m_USB->printf("\r\n%s err=%d\r\n", cmd, ret);
+
+                    ds_int->set_fw_platform(ss_int->get_ss_platform_name());
+                    ds_int->set_fw_version(ss_int->get_ss_fw_version());
+
+                } break;
+
+                case cmd_page_size:
+                {
+                    uint8_t cmd_bytes[] = { SS_FAM_R_BOOTLOADER, SS_CMDIDX_PAGESIZE };
+                    uint8_t rxbuf[3];
+
+                    SS_STATUS status = ss_int->read_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0,
+                            &rxbuf[0], ARRAY_SIZE(rxbuf));
+
+                    if (status == SS_SUCCESS) {
+                        //rxbuf holds page size in big-endian format
+                        page_size = (256*(int)rxbuf[1]) + rxbuf[2];
+                        mxm_assert_msg(page_size <= MAX_PAGE_SIZE, "Page size exceeds maximum allowed");
+
+                        data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%d err=%d\r\n", cmd, page_size, COMM_SUCCESS);
+                        m_USB->printf(charbuf);
+                        got_page_size = true;
+
+                    } else {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                        m_USB->printf(charbuf);
+                    }
+                } break;
+
+                case cmd_num_pages:
+                {
+                    int num_tok = sscanf(cmd, "num_pages %d", &num_pages);
+                    if (num_tok != 1) {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%d err=%d\r\n", cmd, 0, COMM_INVALID_PARAM);
+                        m_USB->printf(charbuf);
+						break;
+                    }
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_SETNUMPAGES };
+                    //num pages = 256*MSB + LSB
+                    uint8_t data[] = { (uint8_t)((num_pages >> 8) & 0xFF), (uint8_t)(num_pages & 0xFF) };
+
+                    SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            &data[0], ARRAY_SIZE(data));
+
+                    if (status == SS_SUCCESS) {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                        m_USB->printf(charbuf);
+                        sent_num_pages = true;
+
+                    } else {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                        m_USB->printf(charbuf);
+                    }
+                } break;
+
+                case cmd_set_iv:
+                {
+                    uint8_t iv_bytes[AES_NONCE_SIZE];
+                    ret = parse_iv(cmd, &iv_bytes[0]);
+                    if (ret != COMM_SUCCESS) {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+                        m_USB->printf(charbuf);
+                    }
+                    else
+                    {
+                        uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_SETIV };
+
+                        SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            &iv_bytes[0], ARRAY_SIZE(iv_bytes));
+
+                        if (status == SS_SUCCESS) {
+                        	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                            m_USB->printf(charbuf);
+
+                        } else {
+                        	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                            m_USB->printf(charbuf);
+                        }
+                    }
+                } break;
+
+                case cmd_set_auth:
+                {
+                    uint8_t auth_bytes[AES_AUTH_SIZE];
+                    ret = parse_auth(cmd, &auth_bytes[0]);
+                    if (ret != COMM_SUCCESS) {
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+                        m_USB->printf(charbuf);
+                    }
+                    else
+                    {
+                        uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_SETAUTH };
+
+                        SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            &auth_bytes[0], ARRAY_SIZE(auth_bytes));
+
+                        if (status == SS_SUCCESS) {
+                        	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                            m_USB->printf(charbuf);
+
+                        } else {
+                        	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                            m_USB->printf(charbuf);
+                        }
+                    }
+                } break;
+
+                case cmd_erase:
+                {
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_ERASE };
+
+                    SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0,
+							SS_BOOTLOADER_ERASE_DELAY);
+                    if (status == SS_SUCCESS){
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                        m_USB->printf(charbuf);
+                    }
+                    else{
+                    	data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                        m_USB->printf(charbuf);
+                    }
+                } break;
+
+                case cmd_page_erase:
+                {
+					int page_num_to_erase;
+                    int num_tok = sscanf(cmd, "page_erase %d", &page_num_to_erase);
+                    if (num_tok != 1) {
+                        m_USB->printf("\r\n%s value=%d err=%d\r\n", cmd, 0, COMM_INVALID_PARAM);
+						break;
+                    }
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_ERASE_PAGE };
+                    //num pages = 256*MSB + LSB
+                    uint8_t data[] = { (uint8_t)((page_num_to_erase >> 8) & 0xFF), (uint8_t)(page_num_to_erase & 0xFF) };
+
+                    SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            &data[0], ARRAY_SIZE(data), 50);
+
+			if (status == SS_SUCCESS) {
+				m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+				sent_num_pages = true;
+			} else {
+				m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+			}
+		} break;
+
+                case cmd_flash:
+                {
+                	if (got_page_size && sent_num_pages) {
+                		data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                		m_USB->printf(charbuf);
+
+                		if (BLE::Instance().gap().getState().connected) {
+                			BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+                			BLE_Icarus_TransferDataFromQueue();
+                		}
+                		BLE::Instance().waitForEvent();
+
+                		flash_page_data();
+                		flash_flag=true;
+                	} else {
+                		pr_err("Can't enter flash mode. Need number of pages, and size of page"
+                				"(num_pages, page_size, commands)\r\n");
+                		data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+                		m_USB->printf(charbuf);
+                	}
+		} break;
+
+				case cmd_setcfg_bl_enter_mode:
+				{
+					uint8_t mode;
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &mode, 1, false);
+					if (ret != 1) {
+						pr_err("parse_cmd_data=%d\r\n", ret);
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_ENTRY, SS_BL_CFG_ENTER_BL_MODE, mode };
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+		} break;
+
+				case cmd_setcfg_bl_ebl_pin:
+				{
+					uint8_t pin[2];
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &pin[0], 2, false);
+					if (ret != 2) {
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_ENTRY, SS_BL_CFG_EBL_PIN,
+											pin[0], pin[1]};
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+		} break;
+
+				case cmd_setcfg_bl_ebl_pol:
+				{
+					uint8_t mode;
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &mode, 1, false);
+					if (ret != 1) {
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_ENTRY, SS_BL_CFG_EBL_POL, mode };
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+		} break;
+
+				case cmd_setcfg_bl_exit_mode:
+				{
+					uint8_t mode;
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &mode, 1, false);
+					if (ret != 1) {
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_EXIT, SS_BL_CFG_EXIT_BL_MODE, mode };
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+				} break;
+				case cmd_setcfg_bl_timeout:
+				{
+					uint8_t to;
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &to, 1, false);
+					if (ret != 1) {
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_EXIT, SS_BL_CFG_TIMEOUT, to };
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+				} break;
+				case cmd_setcfg_bl_save:
+				{
+                    uint8_t cmd_bytes[] = { SS_FAM_W_BOOTLOADER_CFG, SS_CMDIDX_BL_SAVE };
+
+					SS_STATUS status = ss_int->write_cmd(
+                            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+                            0, 0, 50);
+                    if (status == SS_SUCCESS)
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+                    else
+                        m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+
+		} break;
+				case cmd_image_on_ram:
+				{
+					uint8_t mode = 0;
+					ret = parse_cmd_data(cmd, cmd_tbl[i], &mode, 1, false);
+					if (ret != 1) {
+						m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+					/* TODO: Implement effects of this */
+					flag_image_on_ram = !!mode;
+					pr_info("flag_image_on_ram: %d, mode: %d\n", flag_image_on_ram, mode);
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+					break;
+				} break;
+				case cmd_setcfg_host_ebl:
+				{
+					uint8_t tmp; /* 0: Command bootloader, 1: No command, trigger GPIO */
+
+					int ret = parse_cmd_data(cmd, cmd_tbl[i], &tmp, 1, false);
+					if (ret != 1) {
+						m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+					if (ss_int->set_ebl_mode(tmp) == SS_SUCCESS)
+						m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+					else
+						m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+					break;
+				} break;
+				case cmd_setcfg_host_cdf:
+				{
+					uint8_t tmp;
+
+					int ret = parse_cmd_data(cmd, cmd_tbl[i], &tmp, 1, false);
+					if (ret != 1) {
+						m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						break;
+					}
+
+					/* TODO: Implement effects of this */
+					bl_comm_delay_factor = tmp;
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+					break;
+				} break;
+				case cmd_getcfg_host:
+				{
+					m_USB->printf("\r\n%s ebl=%d cdf=%d err=%d\r\n", cmd, ss_int->get_ebl_mode(), bl_comm_delay_factor, COMM_SUCCESS);
+				} break;
+                default:
+                {
+                	mxm_assert_msg(false, "Invalid switch case!");
+                }
+            }
+
+
+				if (BLE::Instance().gap().getState().connected) {
+					if(flash_flag==false)
+					{
+						BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+					}
+				}
+
+
+        }
+    }
+
+    return recognizedCmd;
+}
+
+void SSBootloaderComm::flash_page_data(void)
+{
+    int totalBytes = 0;
+    int currentPage = 1;
+	char charbuf_flash[256];
+	int data_len_flash = 0;
+
+	static uint8_t tx_buf[MAX_PAGE_SIZE + CHECKBYTES_SIZE + 2] = { SS_FAM_W_BOOTLOADER, SS_CMDIDX_SENDPAGE };
+	uint8_t *data_buffer = &tx_buf[2];
+
+	while (currentPage <= num_pages) {
+		pr_info("Waiting for page %d/%d data (%d bytes)...", currentPage, num_pages, page_size);
+
+        //Collect page data + checksum from PC/Android
+//		totalBytes = 100;
+        while (totalBytes < (page_size + CHECKBYTES_SIZE)) {
+            data_buffer[totalBytes++] = m_USB->_getc();
+            //Here we should be able to take the data over BLE
+        }
+
+		pr_info("Done\r\n");
+
+        //Send data to SmartSensor
+        SS_STATUS status = ss_int->write_cmd(tx_buf, page_size + CHECKBYTES_SIZE + 2, 2000 /*bl_comm_delay_factor * PAGE_WRITE_DELAY_MS*/);
+		pr_err("status: %d\r\n", status);
+
+        //Inform PC/Andoid of status
+        if (status == SS_ERR_BTLDR_CHECKSUM) {
+            pr_err("Verify checksum failed!\r\n");
+            data_len_flash = snprintf(charbuf_flash, sizeof(charbuf_flash), "\r\npageFlashDone err=%d\r\n", FLASH_ERR_CHECKSUM);
+            m_USB->printf(charbuf_flash);
+        } else if (status != SS_SUCCESS) {
+            pr_err("Page flash failed!\r\n");
+            data_len_flash = snprintf(charbuf_flash, sizeof(charbuf_flash), "\r\npageFlashDone err=%d\r\n", FLASH_ERR_GENERAL);
+            m_USB->printf(charbuf_flash);
+        } else {
+            currentPage++;
+            pr_err("Page flash successful!\r\n");
+            data_len_flash = snprintf(charbuf_flash, sizeof(charbuf_flash), "\r\npageFlashDone err=%d\r\n", COMM_SUCCESS);
+            m_USB->printf(charbuf_flash);
+        }
+
+		totalBytes = 0;
+
+				if (BLE::Instance().gap().getState().connected) {
+					BLE_Icarus_AddtoQueue((uint8_t *)charbuf_flash, (int32_t)sizeof(charbuf_flash), data_len_flash);
+					BLE_Icarus_TransferDataFromQueue();
+				}
+				BLE::Instance().waitForEvent();
+
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSBootloader/SSBootloaderComm.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _SSBOOTLOADERCOMM_H_
+#define _SSBOOTLOADERCOMM_H_
+
+#include "mbed.h"
+#include "SensorComm.h"
+#include "USBSerial.h"
+#include "SSInterface.h"
+
+#define SS_BOOTLOADER_ERASE_DELAY	2000
+
+#define PAGE_WRITE_DELAY_MS         700
+#define MAX_PAGE_NUMBER             31
+
+/**
+ * @brief	SSBootloaderComm Command handler class for bootloader routines on SmartSensor
+ * @details
+ */
+class SSBootloaderComm:	public SensorComm
+{
+public:
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	SSBootloaderComm constructor.
+	*
+	*/
+	SSBootloaderComm(USBSerial* USB, SSInterface* ssInterface, DSInterface* dsInterface);
+
+	/**
+	* @brief	Parses DeviceStudio-style commands.
+	* @details  Parses and executes commands. Prints return code to i/o device.
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	bool parse_command(const char* cmd);
+
+private:
+
+    /* PRIVATE METHODS */
+    int parse_auth(const char* cmd, uint8_t *auth_bytes);
+    int parse_iv(const char* cmd, uint8_t* iv_bytes);
+    void flash_page_data(void);
+
+	/* PRIVATE TYPE DEFINITIONS */
+	typedef enum _cmd_state_t {
+		cmd_enter_bootldr=0,
+		cmd_exit_bootldr,
+		cmd_reset,
+		cmd_page_size,
+		cmd_num_pages,
+		cmd_set_iv,
+		cmd_set_auth,
+		cmd_erase,
+		cmd_page_erase,
+		cmd_flash,
+		cmd_setcfg_bl_enter_mode,
+		cmd_setcfg_bl_ebl_pin,
+		cmd_setcfg_bl_ebl_pol,
+		cmd_setcfg_bl_exit_mode,
+		cmd_setcfg_bl_timeout,
+		cmd_setcfg_bl_save,
+		cmd_image_on_ram,
+		cmd_setcfg_host_ebl,
+		cmd_setcfg_host_cdf,
+		cmd_getcfg_host,
+		NUM_CMDS,
+	} cmd_state_t;
+
+	/* PRIVATE VARIABLES */
+	USBSerial *m_USB;
+	SSInterface *ss_int;
+    DSInterface *ds_int;
+
+    char bootldr_version[128];
+
+    int num_pages;
+    int page_size;
+    int bl_comm_delay_factor;
+
+    bool got_page_size;
+    bool sent_num_pages;
+
+    /* PRIVATE CONST VARIABLES */
+    static const int AES_NONCE_SIZE = 11;
+    static const int AES_AUTH_SIZE = 16;
+    static const int MAX_PAGE_SIZE = 8192;
+    static const int CHECKBYTES_SIZE = 16;
+
+};
+
+#endif /* _SSBOOTLOADERCOMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSGenericCmd/SSGenericCmd.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "DSInterface.h"
+#include "SSGenericCmd.h"
+
+#include "../../../../Utilities/mxm_assert.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "CRC8.h"
+
+static const char* const cmd_tbl[] = {
+	"ss_write",
+	"ss_read",
+};
+
+SSGenericCmd::SSGenericCmd(USBSerial *USB, SSInterface* ssInterface, DSInterface* dsInterface)
+    :SensorComm("ss_test", false), m_USB(USB), ss_int(ssInterface), ds_int(dsInterface)
+{
+}
+
+bool SSGenericCmd::parse_command(const char* cmd)
+{
+    SS_STATUS status;
+    bool recognizedCmd = false;
+	char response[1024];
+	int ridx = 0;
+
+    if (!ss_int) {
+        pr_err("No SmartSensor Interface defined!");
+        return false;
+    }
+    if (!ds_int) {
+        pr_err("No DeviceStudio Interface defined!");
+        return false;
+    }
+
+    for (int i = 0; i < NUM_CMDS; i++) {
+        if (starts_with(cmd, cmd_tbl[i])) {
+            cmd_state_t user_cmd = (cmd_state_t)i;
+            recognizedCmd = true;
+
+            switch (user_cmd) {
+				case (ss_write):
+				{
+					uint8_t cmd_bytes[256];
+					int num_cmd_bytes = parse_cmd_data(cmd, cmd_tbl[i], &cmd_bytes[0], sizeof(cmd_bytes), true);
+					if (num_cmd_bytes <= 0) {
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"\r\n%s err=%d", cmd, num_cmd_bytes);
+						break;
+					}
+
+					status = ss_int->write_cmd(&cmd_bytes[0], num_cmd_bytes,
+														0, 0, 500);
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"\r\n%s err=0\r\n", cmd);
+
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"\r\nWrote: { ");
+					for (int i = 0; i < num_cmd_bytes; i++) {
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"%02X ", cmd_bytes[i]);
+					}
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"}\r\n");
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"Status: { %02X }\r\n", (uint8_t)status);
+
+				} break;
+
+				case (ss_read):
+				{
+					uint8_t cmd_bytes[256];
+					uint8_t read_bytes[256];
+
+
+					int num_cmd_bytes = parse_cmd_data(cmd, cmd_tbl[i], &cmd_bytes[0], sizeof(cmd_bytes), true);
+					if (num_cmd_bytes <= 0) {
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"\r\n%s err=%d", cmd, num_cmd_bytes);
+						break;
+					}
+
+					//Last space separated value is the number of bytes to read
+					uint8_t num_rx_bytes = cmd_bytes[num_cmd_bytes - 1];
+					if (num_rx_bytes > sizeof(read_bytes)) {
+        				pr_err("Can read up to %d bytes", num_rx_bytes);
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"\r\n%s err=-1", cmd);
+						break;
+					}
+
+					status = ss_int->read_cmd(&cmd_bytes[0], num_cmd_bytes - 1,
+														0, 0,
+														&read_bytes[0], num_rx_bytes,
+														500);
+
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+										"\r\n%s err=0\r\n", cmd);
+
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"\r\nWrote: { ");
+					for (int i = 0; i < num_cmd_bytes; i++) {
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"%02X ", cmd_bytes[i]);
+					}
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"}\r\n");
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"Read: { ");
+					for (int i = 0; i < num_rx_bytes; i++) {
+						ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+								"%02X ", read_bytes[i]);
+					}
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"}\r\n");
+					ridx += snprintf(response + ridx, sizeof(response) - ridx - 1,
+							"Status: { %02X }\r\n", (uint8_t)status);
+
+				} break;
+
+                default:
+                {
+					recognizedCmd = false;
+					mxm_assert_msg(false, "Invalid switch case!");
+                } break;
+
+            }
+			break;
+        }
+    }
+
+	if (recognizedCmd) {
+		m_USB->printf(response);
+	}
+
+    return recognizedCmd;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSGenericCmd/SSGenericCmd.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _SSGENERICCMD_H_
+#define _SSGENERICCMD_H_
+
+#include "mbed.h"
+#include "SensorComm.h"
+#include "USBSerial.h"
+#include "SSInterface.h"
+#include "queue.h"
+
+/*
+ * Include this class to use "ss_read" and "ss_write" commands to read and write arbitrary
+ * SmartSensor data:
+ *
+ * ss_write [cmdByte0] [cmdByte1] ... [cmdByteN]
+ * ss_read [cmdByte0] [cmdByte1] ... [cmdByteN] <bytes_to_read_in_hex>
+ *
+ * Example: Read SS firmware version
+ * "ss_read FF 03 4"
+ *
+ * Example: Set MAX30101 register 8 to 1F
+ * "ss_write 40 03 8 1F"
+ *
+ * Example: Read MAX30101 register 1F
+ * "ss_read 40 03 8 2"
+ *
+ */
+
+
+/**
+ * @brief	SSMAX30101Comm Command handler class for communication with MAX30101 on SmartSensor board
+ * @details
+ */
+class SSGenericCmd:	public SensorComm
+{
+public:
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	SSMAX30101Comm constructor.
+	*
+	*/
+	SSGenericCmd(USBSerial* USB, SSInterface* ssInterface, DSInterface* dsInterface);
+
+	/**
+	* @brief	Parses DeviceStudio-style commands.
+	* @details  Parses and executes commands. Prints return code to i/o device.
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	bool parse_command(const char* cmd);
+
+private:
+	typedef enum _cmd_state_t {
+		ss_write,
+		ss_read,
+		NUM_CMDS,
+	} cmd_state_t;
+
+	/* PRIVATE VARIABLES */
+	USBSerial *m_USB;
+	SSInterface *ss_int;
+	DSInterface *ds_int;
+
+};
+
+#endif /* _SSMAX30101COMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSMAX8614X/SSMAX8614XComm.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1428 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "DSInterface.h"
+#include "SSMAX8614XComm.h"
+
+#include "../../../../Utilities/mxm_assert.h"
+#include "flc.h"
+#include "flc_regs.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "CRC8.h"
+
+
+#include "BLE_ICARUS.h"
+
+
+
+
+// By default, host accel is enabled
+
+//#define FORCE_RESET_WHEN_FAILED
+
+#define MAX_NUM_WR_ACC_SAMPLES			5
+#define BMI160_SAMPLE_RATE				25
+
+static const char* const cmd_tbl[] = {
+    "get_format ppg 0",
+    "read ppg 0", 		// moved here to match parser index "3"
+	"get_reg ppg",
+	"set_reg ppg",
+	"dump_reg ppg",
+	"set_cfg ppg agc 0",
+	"set_cfg ppg agc 1",
+	"self_test ppg os58",
+	"self_test ppg acc",
+	"set_cfg whrmaecscd aecenable",
+	"get_cfg whrmaecscd aecenable",
+	"set_cfg whrmaecscd scdenable",
+	"get_cfg whrmaecscd scdenable",
+	"set_cfg whrmaecscd adjpdperiod",
+	"get_cfg whrmaecscd adjpdperiod",
+	"set_cfg whrmaecscd debouncewin",
+	"get_cfg whrmaecscd debouncewin",
+	"set_cfg whrmaecscd motionthreshold",
+	"get_cfg whrmaecscd motionthreshold",
+	"set_cfg whrmaecscd minpdcurrent",
+	"get_cfg whrmaecscd minpdcurrent",
+	"set_cfg whrmaecscd pdconfig",
+	"get_cfg whrmaecscd pdconfig",
+	"set_cfg whrmaecscd ledconfig",
+	"get_cfg whrmaecscd ledconfig",	
+	"send_raw",  // write raw data to I2C (Slave address will be perpended)
+	"set_cfg accel_sh 0",   // disables sensorhub accel, host accel is used 
+	"set_cfg accel_sh 1",   // enables sensorhub accel, host accel is not used
+	"set_cfg whrm conf_level", //sets the conf level coming from the GUI inside the internal flash
+	"set_cfg whrm hr_expiration", ////sets the expiration dfuration coming from the GUI inside the internal flash
+
+};
+
+SSMAX8614XComm::SSMAX8614XComm(USBSerial *USB, SSInterface* ssInterface, DSInterface* dsInterface)
+    :SensorComm("ppg", true), m_USB(USB), ss_int(ssInterface), ds_int(dsInterface), agc_enabled(true)
+{
+	max8614x_mode1_data_req.data_size = SSMAX8614X_MODE1_DATASIZE;
+	max8614x_mode1_data_req.callback = callback(this, &SSMAX8614XComm::max8614x_data_rx);
+
+	whrm_mode1_data_req.data_size = SSWHRM_MODE1_DATASIZE;
+	whrm_mode1_data_req.callback = callback(this, &SSMAX8614XComm::whrm_data_rx_mode1);
+
+	whrm_mode2_data_req.data_size = SSWHRM_MODEX_DATASIZE;
+	whrm_mode2_data_req.callback = callback(this, &SSMAX8614XComm::whrm_data_rx_mode2);
+	
+	accel_mode1_data_req.data_size = SSACCEL_MODE1_DATASIZE;
+	accel_mode1_data_req.callback = callback(this, &SSMAX8614XComm::accel_data_rx);
+
+	agc_mode1_data_req.data_size = SSAGC_MODE1_DATASIZE;
+	agc_mode1_data_req.callback = callback(this, &SSMAX8614XComm::agc_data_rx);
+
+	queue_init(&max8614x_queue, max8614x_queue_buf, sizeof(max8614x_mode1_data), sizeof(max8614x_queue_buf));
+	queue_init(&whrm_queue, whrm_queue_buf, sizeof(whrm_modeX_data), sizeof(whrm_queue_buf));
+
+	queue_init(&accel_output_queue, accel_output_queue_buf, sizeof(accel_mode1_data), sizeof(accel_output_queue_buf));
+	queue_init(&accel_input_queue, accel_input_queue_buf, sizeof(accel_mode1_data), sizeof(accel_input_queue_buf));
+
+	
+	sensor_algo_en_dis_.sensorhub_accel = 1;   // enable sensor hub accel by default
+
+    m_bmi160 = 0;
+
+	input_fifo_size = 0;
+	sensor_data_from_host = false;
+}
+
+void SSMAX8614XComm::stop()
+{
+	status_algo_sensors_st sensor_algo_en_dis_temp;
+	comm_mutex.lock();
+	ss_int->disable_irq();
+	data_report_mode = 0;
+	sample_count = 0;
+
+	if (sensor_algo_en_dis_.max8614x_enabled) {
+		ss_int->disable_sensor(SS_SENSORIDX_MAX86140);
+		queue_reset(&max8614x_queue);
+	}
+
+	if (sensor_algo_en_dis_.accel_enabled) {
+		ss_int->disable_sensor(SS_SENSORIDX_ACCEL);
+		queue_reset(&accel_output_queue);
+	}
+
+	if (sensor_algo_en_dis_.whrm_enabled) {
+		ss_int->disable_algo(SS_ALGOIDX_WHRM);
+		queue_reset(&whrm_queue);
+	}
+
+	// store a copy of settings
+	sensor_algo_en_dis_temp.status_vals = sensor_algo_en_dis_.status_vals;
+	// clear all settings
+	sensor_algo_en_dis_.status_vals = 0;
+	//recover settings that need to be maintained
+	sensor_algo_en_dis_.sensorhub_accel = sensor_algo_en_dis_temp.sensorhub_accel;
+	ss_int->ss_clear_interrupt_flag();
+	ss_int->enable_irq();
+
+	if(sensor_algo_en_dis_.sensorhub_accel==0){
+		m_bmi160->reset();
+		queue_reset(&accel_input_queue);
+	}
+
+
+	comm_mutex.unlock();
+	input_fifo_size = 0;
+	sensor_data_from_host = false;
+}
+
+int SSMAX8614XComm::parse_cal_str(const char *ptr_ch, const char *cmd, uint8_t *cal_data, int cal_data_sz)
+{
+	char ascii_byte[] = { 0, 0, 0 };
+	const char* sptr = ptr_ch + strlen(cmd);
+	int found = 0;
+	int ssfound;
+	unsigned int val32;
+
+	//Eat spaces after cmd
+	while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+	if (*sptr == '\0')
+		return -1;
+	sptr++;
+
+	while (found < cal_data_sz) {
+		if (*sptr == '\0')
+			break;
+		ascii_byte[0] = *sptr++;
+		ascii_byte[1] = *sptr++;
+		ssfound = sscanf(ascii_byte, "%x", &val32);
+		if (ssfound != 1)
+			break;
+		*(cal_data + found) = (uint8_t)val32;
+		//pr_err("cal_data[%d]=%d\r\n", found, val32);
+		found++;
+	}
+
+	//pr_err("total found: %d\r\n", found);
+	if (found < cal_data_sz)
+		return -1;
+	return 0;
+}
+
+int SSMAX8614XComm::parse_str(const char *ptr_ch, const char *cmd, uint8_t *data, int data_sz)
+{
+	char ascii_byte[] = { 0, 0, 0 };
+	const char* sptr = ptr_ch + strlen(cmd);
+	int found = 0;
+	int ssfound;
+	unsigned int val32;
+
+	//Eat spaces after cmd
+	while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+	if (*sptr == '\0')
+		return -1;
+	sptr++;
+
+	while (found < data_sz) {
+		if (*sptr == '\0')
+			break;
+		ascii_byte[0] = *sptr++;
+		ascii_byte[1] = *sptr++;
+		ssfound = sscanf(ascii_byte, "%x", &val32);
+		if (ssfound != 1)
+			return -1;
+		*(data + found) = (uint8_t)val32;
+		pr_err("cal_data[%d]=%d\r\n", found, val32);
+		found++;
+	}
+
+	pr_err("total found: %d\r\n", found);
+	return found;
+}
+
+
+void SSMAX8614XComm::setBMI160(BMI160_I2C *pbmi160)
+{
+	if (pbmi160) {
+		m_bmi160 = pbmi160;
+		m_bmi160->reset();
+	}
+}
+
+
+int SSMAX8614XComm::get_sensor_xyz(accel_data_t &accel_data) {
+	int ret = 0;
+if(sensor_algo_en_dis_.sensorhub_accel==0){
+	BMI160::SensorData stacc_data = {0};
+	if (m_bmi160) {
+		ret = m_bmi160->getSensorXYZ(stacc_data, BMI160::SENS_2G);
+		if (ret < 0)
+			return ret;
+	}
+
+	accel_data.x = stacc_data.xAxis.scaled;
+	accel_data.y = stacc_data.yAxis.scaled;
+	accel_data.z = stacc_data.zAxis.scaled;
+
+	accel_data.x_raw = stacc_data.xAxis.raw;
+	accel_data.y_raw = stacc_data.yAxis.raw;
+	accel_data.z_raw = stacc_data.zAxis.raw;
+
+}
+
+	return ret;
+}
+
+bool SSMAX8614XComm::parse_command(const char* cmd)
+{
+	int ret;
+    SS_STATUS status;
+    bool recognizedCmd = false;
+	int data_len = 0;
+	char charbuf[768];
+	addr_val_pair reg_vals[64];
+
+    if (!ss_int) {
+        pr_err("No SmartSensor Interface defined!");
+        return false;
+    }
+    if (!ds_int) {
+        pr_err("No DeviceStudio Interface defined!");
+        return false;
+    }
+
+    for (int i = 0; i < NUM_CMDS; i++) {
+        if (starts_with(cmd, cmd_tbl[i])) {
+            cmd_state_t user_cmd = (cmd_state_t)i;
+            recognizedCmd = true;
+
+            switch (user_cmd) {
+				case set_cfg_accel_sh_dis:
+				{
+					sensor_algo_en_dis_.sensorhub_accel = 0;
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+
+				} break;
+				case set_cfg_accel_sh_en:
+				{
+					sensor_algo_en_dis_.sensorhub_accel = 1;
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+
+				} break;
+				case set_cfg_ppg_conf_level:
+				{
+					int j=24;
+					char temp_buf[4];
+					uint32_t PpgConfLevel[2];
+					while(cmd[j]!='\0'){
+						temp_buf[j-24] = cmd[j];
+						j++;
+					}
+					temp_buf[j-24]='\0';
+					sscanf(temp_buf,"%u",&PpgConfLevel[0]);
+
+					PpgConfLevel[1] = (*(uint32_t *)PPG_EXPIRE_DURATION_FLASH_ADDRESS);
+
+					if(FLC_Init()!=0){
+						m_USB->printf("\r\n%s err=Initializing flash\r\n", cmd);
+						break;
+					}
+					if( FLC_PageErase(PPG_CONF_LEVEL_FLASH_ADDRESS, MXC_V_FLC_ERASE_CODE_PAGE_ERASE, MXC_V_FLC_FLSH_UNLOCK_KEY)!=0 ){
+						m_USB->printf("\r\n%s err=Erasing page\r\n", cmd);
+						break;
+					}
+					if(FLC_Write(PPG_CONF_LEVEL_FLASH_ADDRESS,PpgConfLevel,sizeof(PpgConfLevel),MXC_V_FLC_FLSH_UNLOCK_KEY)!=0){
+						m_USB->printf("\r\n%s err=Writing flash\r\n", cmd);
+						break;
+					}
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+
+				} break;
+				case set_cfg_ppg_expire_duration:
+				{
+					int j=27;
+					char temp_buf[4];
+					uint32_t PpgExpireDuration[2];
+					while(cmd[j]!='\0'){
+						temp_buf[j-27] = cmd[j];
+						j++;
+					}
+					temp_buf[j-27]='\0';
+					sscanf(temp_buf,"%u",&PpgExpireDuration[1]);
+
+					PpgExpireDuration[0] = (*(uint32_t *)PPG_CONF_LEVEL_FLASH_ADDRESS);
+
+					if(FLC_Init()!=0){
+						m_USB->printf("\r\n%s err=Initializing flash\r\n", cmd);
+						break;
+					}
+					if( FLC_PageErase(PPG_EXPIRE_DURATION_FLASH_ADDRESS, MXC_V_FLC_ERASE_CODE_PAGE_ERASE, MXC_V_FLC_FLSH_UNLOCK_KEY)!=0 ){
+						m_USB->printf("\r\n%s err=Erasing page\r\n", cmd);
+						break;
+					}
+					if(FLC_Write(PPG_CONF_LEVEL_FLASH_ADDRESS,PpgExpireDuration,sizeof(PpgExpireDuration),MXC_V_FLC_FLSH_UNLOCK_KEY)!=0){
+						m_USB->printf("\r\n%s err=Writing flash\r\n", cmd);
+						break;
+					}
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+
+				} break;
+				case get_format_ppg_0:
+				{
+					if(AsciiEn)
+					{
+						if (ds_int->algo_report_mode == 1){
+							m_USB->printf("\r\n%s format=smpleCnt,grnCnt,led2,led3,grn2Cnt,led5,led6,"
+									"accelX,accelY,accelZ,hr,hrconf,r,activity err=0\r\n", cmd);
+						}
+						else { // report mode 2
+							m_USB->printf("\r\n%s format=smpleCnt,grnCnt,led2,led3,grn2Cnt,led5,led6,"
+									"accelX,accelY,accelZ,hr,hrconf,r,rconf,activity,walkSteps,runSteps,"
+									"energyKcal,stepCadence,isLedCurrentAdj,adjLedCurrent,isTAdj,adjT,isFAdj,"
+									"adjF,aecSmpAve,aecState,isAECMotion,scdStatus err=0\r\n", cmd);
+						}
+					}
+					else{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s enc=bin cs=1 format={smpleCnt,16},"
+								"{grnCnt,20},{grn2Cnt,20},{accelX,14,3},{accelY,14,3},"
+								"{accelZ,14,3},{hr,12},{hrconf,8},{r,11,1},{activity,8} err=0\r\n", cmd);
+						m_USB->printf(charbuf);
+					}
+				} break;
+
+				case read_ppg_0:
+				{
+					sample_count = 0;
+
+					status = ss_int->get_input_fifo_size(&input_fifo_size);
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d\n", __LINE__);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					status = ss_int->set_data_type(SS_DATATYPE_BOTH, false);
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d, set DATA_TYPE\n, ", __LINE__);
+#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+									"\r\nReset!\r\n");
+#endif
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					status = ss_int->set_fifo_thresh(5);
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d, set thresh\n", __LINE__);
+#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+									"\r\nReset!\r\n");
+#endif
+						m_USB->printf(charbuf);
+						break;
+					}
+
+
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d - agc_enabled: %d\n", __LINE__, agc_enabled);
+						ss_int->enable_irq();
+
+#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+									"\r\nReset!\r\n");
+#endif
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					ss_int->disable_irq();
+
+					status = ss_int->enable_sensor(SS_SENSORIDX_MAX86140, 1, &max8614x_mode1_data_req);
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d, enable max86140\n", __LINE__);
+						ss_int->enable_irq();
+	#ifdef FORCE_RESET_WHEN_FAILED
+						ret = ss_int->reset();
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"\r\nReset!\r\n");
+	#endif
+						m_USB->printf(charbuf);
+						break;
+					}
+					sensor_algo_en_dis_.max8614x_enabled = 1;
+
+
+
+					if (sensor_algo_en_dis_.sensorhub_accel) {
+						status = ss_int->enable_sensor(SS_SENSORIDX_ACCEL, 1, &accel_mode1_data_req, SH_INPUT_DATA_DIRECT_SENSOR);
+						if (status != SS_SUCCESS) {
+							data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d\n", __LINE__);
+							ss_int->enable_irq();
+	#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"\r\nReset!\r\n");
+	#endif
+							m_USB->printf(charbuf);
+							break;
+						}
+						sensor_algo_en_dis_.accel_enabled = 1;
+					}
+					else {
+						m_bmi160->BMI160_DefaultInitalize();
+						if (m_bmi160->setSampleRate(BMI160_SAMPLE_RATE) != 0) {
+							pr_err("Unable to set BMI160's sample rate\n");
+							data_len = snprintf(charbuf , sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d\n", __LINE__);
+							ss_int->enable_irq();
+	#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"\r\nReset!\r\n");
+	#endif
+							m_USB->printf(charbuf);
+							break;
+						}
+
+						ret = m_bmi160->enable_data_ready_interrupt();
+						if(ret != E_SUCCESS){
+							pr_err("Unable to enable BMI160 Interrupt, ret: %d\n", ret);
+							break;
+						}
+
+
+
+						status = ss_int->enable_sensor(SS_SENSORIDX_ACCEL, 1, &accel_mode1_data_req, SH_INPUT_DATA_FROM_HOST);
+						if (status != SS_SUCCESS) {
+							data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d\n", __LINE__);
+							ss_int->enable_irq();
+	#ifdef FORCE_RESET_WHEN_FAILED
+							ret = ss_int->reset();
+							data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"\r\nReset!\r\n");
+	#endif
+							m_USB->printf(charbuf);
+							break;
+						}
+						sensor_data_from_host = true;
+						sensor_algo_en_dis_.accel_enabled = 1;
+					}
+
+
+					if (ds_int->algo_report_mode == 2)
+						status = ss_int->enable_algo(SS_ALGOIDX_WHRM, 2, &whrm_mode2_data_req);
+					else // default is mode 1
+						status = ss_int->enable_algo(SS_ALGOIDX_WHRM, 1, &whrm_mode1_data_req);
+					if (status != SS_SUCCESS) {
+						data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"FAILED at line %d, enable whrm\n", __LINE__);
+						ss_int->enable_irq();
+	#ifdef FORCE_RESET_WHEN_FAILED
+						ret = ss_int->reset();
+						data_len += snprintf(charbuf+data_len, sizeof(charbuf)- data_len - 1,
+								"\r\nReset!\r\n");
+	#endif
+						m_USB->printf(charbuf);
+						break;
+					}
+					sensor_algo_en_dis_.whrm_enabled = 1;
+
+
+					comm_mutex.lock();
+					data_report_mode = read_ppg_0;
+					comm_mutex.unlock();
+					data_len = snprintf(charbuf, sizeof(charbuf) - 1,
+							"\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+					ss_int->enable_irq();
+				} break;
+
+				case get_reg_ppg:
+				{
+					uint8_t addr;
+					uint32_t val;
+
+					ret = parse_get_reg_cmd(cmd, sensor_type, &addr);
+					if (!ret) {
+						status = ss_int->get_reg(SS_SENSORIDX_MAX86140, addr, &val);
+						if (status == SS_SUCCESS) {
+							data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s reg_val=%02X err=%d\r\n", cmd, (uint8_t)val, COMM_SUCCESS);
+							m_USB->printf(charbuf);
+						} else {
+							data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+							m_USB->printf(charbuf);
+						}
+					} else {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case set_reg_ppg:
+				{
+					uint8_t addr;
+					uint8_t val;
+
+					ret = parse_set_reg_cmd(cmd, sensor_type, &addr, &val);
+					if (!ret) {
+						status = ss_int->set_reg(SS_SENSORIDX_MAX86140, addr, val, SSMAX8614X_REG_SIZE);
+						if (status == SS_SUCCESS) {
+							data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+							m_USB->printf(charbuf);
+						} else {
+							data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+							m_USB->printf(charbuf);
+						}
+					} else {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case dump_reg_ppg:
+				{
+					int num_regs;
+					status = ss_int->dump_reg(SS_SENSORIDX_MAX86140, &reg_vals[0], ARRAY_SIZE(reg_vals), &num_regs);
+					if (status == SS_SUCCESS) {
+						bool comma = false;
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1, "\r\n%s reg_val=", cmd);
+						for (int reg = 0; reg < num_regs; reg++) {
+							if (comma) {
+								data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1, ",");
+							}
+							data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1,
+											"{%X,%lX}", reg_vals[reg].addr, reg_vals[reg].val);
+							comma = true;
+						}
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1, " err=%d\r\n", COMM_SUCCESS);
+						m_USB->printf(charbuf);
+
+					} else {
+						data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1,
+								"\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case set_agc_en:
+				{
+					agc_enabled = true;
+					status = ss_int->enable_algo(SS_ALGOIDX_AGC, 1, &agc_mode1_data_req);
+					sensor_algo_en_dis_.agc_enabled = 1;
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+				} break;
+
+				case set_agc_dis:
+				{
+					agc_enabled = false;
+					status = ss_int->disable_algo(SS_ALGOIDX_AGC);
+					sensor_algo_en_dis_.agc_enabled = 0;
+					m_USB->printf("\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+				} break;
+
+				case self_test_ppg_os58:
+				{
+					ret = selftest_max8614x();
+					data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1,
+							"%s selftest_max8614x: err=<%d>\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+				} break;
+
+				case self_test_ppg_acc:
+				{
+					ret = selftest_accelerometer();
+					data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1,
+							"%s selftest_accelerometer: err=<%d>\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+				} break;
+
+				//--------- WHRM_AEC_SCD AEC ENABLE
+				case set_cfg_whrmaecscd_aecenable:
+				{
+					uint8_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[1] = { (uint8_t)(val[0]) };
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_AEC_ENABLE, &Temp[0], 1);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_aecenable:
+				{
+					uint8_t rxBuff[1+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_AEC_ENABLE, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD SCD ENABLE
+				case set_cfg_whrmaecscd_scdenable:
+				{
+					uint8_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[1] = { (uint8_t)(val[0]) };
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_SCD_ENABLE, &Temp[0], 1);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_scdenable:
+				{
+					uint8_t rxBuff[1+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_SCD_ENABLE, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD ADJ TARGET PD PERIOD
+				case set_cfg_whrmaecscd_adjpdperiod:
+				{
+					uint16_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[2] = { (uint8_t)((val[0] >> (1*8)) & 0xFF),  (uint8_t)((val[0] >> (0*8)) & 0xFF)};
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_ADJ_TARGET_PD_CURRENT_PERIOD, &Temp[0], 2);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_adjpdperiod:
+				{
+					uint8_t rxBuff[2+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_ADJ_TARGET_PD_CURRENT_PERIOD, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD DEBOUNCE WINDOW
+				case set_cfg_whrmaecscd_debouncewin:
+				{
+					uint16_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[2] = { (uint8_t)((val[0] >> (1*8)) & 0xFF),  (uint8_t)((val[0] >> (0*8)) & 0xFF)};
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_SCD_DEBOUNCE_WINDOW, &Temp[0], 2);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_debouncewin:
+				{
+					uint8_t rxBuff[2+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_SCD_DEBOUNCE_WINDOW, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD MOTION MAG THRESHOLD
+				case set_cfg_whrmaecscd_motionthreshold:
+				{
+					uint16_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[2] = { (uint8_t)((val[0] >> (1*8)) & 0xFF),  (uint8_t)((val[0] >> (0*8)) & 0xFF)};
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_MOTION_MAG_THRESHOLD, &Temp[0], 2);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_motionthreshold:
+				{
+					uint8_t rxBuff[2+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_MOTION_MAG_THRESHOLD, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD MIN PD CURRENT
+				case set_cfg_whrmaecscd_minpdcurrent:
+				{
+					uint16_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[2] = { (uint8_t)((val[0] >> (1*8)) & 0xFF),  (uint8_t)((val[0] >> (0*8)) & 0xFF)};
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_MIN_PD_CURRENT, &Temp[0], 2);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_minpdcurrent:
+				{
+					uint8_t rxBuff[2+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_MIN_PD_CURRENT, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD PD CONFIG
+				case set_cfg_whrmaecscd_pdconfig:
+				{
+					uint8_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[1] = { (uint8_t)(val[0]) };
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_PD_CONFIG, &Temp[0], 1);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_pdconfig:
+				{
+					uint8_t rxBuff[1+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_PD_CONFIG, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//--------- WHRM_AEC_SCD LED CONFIG
+				case set_cfg_whrmaecscd_ledconfig:
+				{
+					uint8_t val[1];
+					ret = (parse_cmd_data(cmd, cmd_tbl[i], &val[0], 1, true) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_INVALID_PARAM);
+						m_USB->printf(charbuf);
+						break;
+					}
+
+					uint8_t Temp[1] = { (uint8_t)(val[0]) };
+
+					status = ss_int->set_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_LED_CONFIG, &Temp[0], 1);
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+
+				case get_cfg_whrmaecscd_ledconfig:
+				{
+					uint8_t rxBuff[1+1];  // first byte is status
+					char outstr[2*sizeof(rxBuff)];
+					int str_idx = 0;
+					uint8_t *Temp = &rxBuff[1];
+					uint8_t val[1];
+
+					status = ss_int->get_algo_cfg(SS_ALGOIDX_WHRM, SS_CFGIDX_WHRM_LED_CONFIG, &rxBuff[0], sizeof(rxBuff));
+					for (int i = 0; i < sizeof(rxBuff)-1; i++)
+						str_idx += snprintf(outstr + str_idx, sizeof(outstr) - str_idx - 1, "%02X", Temp[i]);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s value=%s err=%d\r\n", cmd, outstr, COMM_SUCCESS);
+					m_USB->printf(charbuf);
+
+				} break;
+
+				//---------  SEND RAW
+				case send_raw:
+				{
+					int size=0;
+					uint8_t data[256];  // max size of command
+
+					size = parse_str(cmd, cmd_tbl[i], data, sizeof(data));
+					status = ss_int->send_raw(data, size);
+
+					if (status == SS_SUCCESS)
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_SUCCESS);
+						m_USB->printf(charbuf);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, COMM_GENERAL_ERROR);
+						m_USB->printf(charbuf);
+					}
+
+				} break;
+				//--------------------------------------------------------
+
+                default:
+                {
+                    mxm_assert_msg(false, "Invalid switch case!");
+                } break;
+
+            }
+			
+
+	if (BLE::Instance().gap().getState().connected) {
+		BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+	}
+
+
+            break;
+
+        }
+    }
+
+    return recognizedCmd;
+}
+
+void SSMAX8614XComm::max8614x_data_rx(uint8_t* data_ptr)
+{
+	max8614x_mode1_data sample;
+	sample.led1 = (data_ptr[0] << 16) | (data_ptr[1] << 8) | data_ptr[2];
+	sample.led2 = (data_ptr[3] << 16) | (data_ptr[4] << 8) | data_ptr[5];
+	sample.led3 = (data_ptr[6] << 16) | (data_ptr[7] << 8) | data_ptr[8];
+	sample.led4 = (data_ptr[9] << 16) | (data_ptr[10] << 8) | data_ptr[11];
+	sample.led5 = (data_ptr[12] << 16) | (data_ptr[13] << 8) | data_ptr[14];
+	sample.led6 = (data_ptr[15] << 16) | (data_ptr[16] << 8) | data_ptr[17];
+
+	pr_info("led1=%.6X led2=%.6X led3=%.6X led4=%.6X led5=%.6X led6=%.6X\r\n",
+			sample.led1, sample.led2, sample.led3, sample.led4, sample.led5, sample.led6);
+
+	enqueue(&max8614x_queue, &sample);
+}
+
+void SSMAX8614XComm::whrm_data_rx_mode1(uint8_t* data_ptr)
+{
+	whrm_modeX_data sample;
+
+	sample.hr = (data_ptr[0] << 8) | data_ptr[1];
+	sample.hr_conf = data_ptr[2];
+	sample.rr = (data_ptr[3] << 8) | data_ptr[4];
+	sample.activity_class = data_ptr[5];
+	//m_USB->printf("\r\n Md1- hr:%d  conf:%d  rr:%d  act:%d\r\n", sample.hr,sample.hr_conf,sample.rr,sample.activity_class );
+	enqueue(&whrm_queue, &sample);
+	pr_info("hr=%.1f conf=%d rr=%.1f rr_conf=%d status=%d\r\n", (float)sample.hr / 10.0, sample.hr_conf, (float)sample.rr/10, sample.rr_conf,sample.activity_class);	
+}
+
+void SSMAX8614XComm::whrm_data_rx_mode2(uint8_t* data_ptr)
+{
+	whrm_modeX_data sample;
+
+	sample.hr = (data_ptr[0] << 8) | data_ptr[1];
+	sample.hr_conf = data_ptr[2];
+	sample.rr = (data_ptr[3] << 8) | data_ptr[4];
+	sample.activity_class = data_ptr[5];
+	sample.rr_conf = data_ptr[6];	
+	sample.walk_steps = (data_ptr[7] << 24) | (data_ptr[8] << 16) |(data_ptr[9] << 8) | data_ptr[10];
+	sample.run_steps = (data_ptr[11] << 24) | (data_ptr[12] << 16) |(data_ptr[13] << 8) | data_ptr[14];			
+	sample.kcal = (data_ptr[15] << 24) | (data_ptr[16] << 16) |(data_ptr[17] << 8) | data_ptr[18];			
+	sample.cadence = (data_ptr[19] << 24) | (data_ptr[20] << 16) |(data_ptr[21] << 8) | data_ptr[22];			
+	sample.is_led_cur_adj = data_ptr[23];
+	sample.adj_led_cur = (data_ptr[24] << 8) | data_ptr[25];
+	sample.is_t_int_cur_adj = data_ptr[26];
+	sample.adj_t_int_cur = (data_ptr[27] << 8) | data_ptr[28];
+	sample.is_f_smp_adj = data_ptr[29];
+	sample.adj_f_smp = data_ptr[30];		
+	sample.smp_ave = data_ptr[31];
+	sample.state = data_ptr[32];
+	sample.is_high_motion = data_ptr[33];
+	sample.status = data_ptr[34];
+
+	//m_USB->printf("\r\nMd2- hr:%d  conf:%d  rr:%d  act:%d\r\n", sample.hr,sample.hr_conf,sample.rr,sample.activity_class );
+	enqueue(&whrm_queue, &sample);
+	pr_info("hr=%.1f conf=%d rr=%.1f rr_conf=%d status=%d\r\n", (float)sample.hr / 10.0, sample.hr_conf, (float)sample.rr/10, sample.rr_conf,sample.activity_class);	
+}
+
+
+void SSMAX8614XComm::accel_data_rx(uint8_t* data_ptr)
+{
+	//See API doc for data format
+	accel_mode1_data sample;
+	sample.x = (data_ptr[0] << 8) | data_ptr[1];
+	sample.y = (data_ptr[2] << 8) | data_ptr[3];
+	sample.z = (data_ptr[4] << 8) | data_ptr[5];
+
+	enqueue(&accel_input_queue, &sample);
+}
+
+void SSMAX8614XComm::agc_data_rx(uint8_t* data_ptr)
+{
+	//NOP: AGC does not collect data
+}
+
+int SSMAX8614XComm::data_report_execute(char* buf, int size)
+{
+	uint8_t tmp_report_mode;
+	max8614x_mode1_data max8614x_sample = { 0 };
+	whrm_modeX_data whrm_sample_modeX = { 0 };
+	//wspo2_modeX_data wspo2_sample_modeX = { 0 };
+	accel_mode1_data accel_sample = { 0 };
+
+
+	accel_data_t accel_data = {0};
+
+	int16_t data_len = 0;
+
+	static uint8_t isReportEnabled = 0;
+
+	if (size <= 0)
+	{
+		m_USB->printf("\r\nError: RepSize = %d\r\n", size);
+		return 0;
+	}
+
+	if (isReportEnabled != is_enabled())
+	{
+		isReportEnabled = is_enabled();
+		m_USB->printf("\r\nRep Enable = %d \r\n",isReportEnabled);
+	}
+
+	if (!is_enabled())
+	{
+		return 0;
+	}
+
+	ss_int->ss_execute_once();
+
+	comm_mutex.lock();
+    tmp_report_mode = data_report_mode;
+    comm_mutex.unlock();
+
+
+	while (sensor_data_from_host) {
+		accel_data_t accel_data = {0};
+
+		int ret;
+		ret = get_sensor_xyz(accel_data);
+		if (ret < 0)
+			break;
+
+		accel_mode1_data acc_sample;
+		acc_sample.x = (int16_t)(accel_data.x*1000);
+		acc_sample.y = (int16_t)(accel_data.y*1000);
+		acc_sample.z = (int16_t)(accel_data.z*1000);
+
+		if (enqueue(&accel_output_queue, &acc_sample) < 0)
+			pr_err("Thrown an accel sample\n");
+
+		if (queue_len(&accel_output_queue) < MAX_NUM_WR_ACC_SAMPLES)
+			break;
+
+		int num_bytes = 0;
+		SS_STATUS status = ss_int->get_num_bytes_in_input_fifo(&num_bytes);
+		if (status != SS_SUCCESS) {
+			pr_err("Unable to read num bytes in input fifo\r\n");
+			break;
+		}
+
+		int num_tx = input_fifo_size - num_bytes;
+		mxm_assert_msg((num_tx >= 0), "num_tx can't be negative");
+		if (num_tx <= 0)
+			break;
+
+		int num_samples = num_tx / sizeof(accel_mode1_data);
+		num_samples = min(num_samples, MAX_NUM_WR_ACC_SAMPLES);
+		num_tx = num_samples * sizeof(accel_mode1_data);
+
+		if (num_samples == 0) {
+			pr_err("Input FIFO is Full\n");
+			break;
+		}
+
+		accel_mode1_data peek_buf[num_samples];
+		ret = queue_front_n(&accel_output_queue, peek_buf, num_samples, num_samples * sizeof(accel_mode1_data));
+		if (ret < 0)
+			mxm_assert_msg((num_tx >= 0), "Unable to peek samples from accel queue. Something is wrong.");
+
+		uint8_t tx_buf[2 + num_tx]; /* 2 bytes were allocated for commands */
+		for (int i = 2, j = 0; j < num_samples; i+= sizeof(accel_mode1_data), j++) {
+			acc_sample = peek_buf[j];
+
+			tx_buf[i] = acc_sample.x;
+			tx_buf[i + 1] = acc_sample.x >> 8;
+
+			tx_buf[i + 2] = acc_sample.y;
+			tx_buf[i + 3] = acc_sample.y >> 8;
+
+			tx_buf[i + 4] = acc_sample.z;
+			tx_buf[i + 5] = acc_sample.z >> 8;
+
+		}
+
+    	int num_wr_bytes = 0;
+		int nb_expected = num_tx;
+		status = ss_int->feed_to_input_fifo(tx_buf, num_tx + 2, &num_wr_bytes);
+		if (status != SS_SUCCESS) {
+			pr_err("Unable to write accel data. num_tx: %d. status: %d\r\n", num_tx, status);
+			break;
+		}
+
+		int num_written_samples = num_wr_bytes / sizeof(accel_mode1_data);
+		if (num_written_samples == 0)
+			break;
+
+		ret = queue_pop_n(&accel_output_queue, num_written_samples);
+		if (ret < 0)
+			mxm_assert_msg((num_tx >= 0), "Unable to popped samples out from accel queue. Something is wrong.");
+
+		break;
+	}
+
+
+	switch (tmp_report_mode) {
+		case read_ppg_0:
+		{
+			if (1
+
+
+				&& (queue_len(&max8614x_queue) > 0 && sensor_algo_en_dis_.max8614x_enabled)
+
+
+
+				&& (queue_len(&accel_input_queue) > 0 && sensor_algo_en_dis_.accel_enabled)
+
+
+
+				&& (queue_len(&whrm_queue) > 0 && sensor_algo_en_dis_.whrm_enabled)
+
+				)
+			{
+
+				if(sensor_algo_en_dis_.max8614x_enabled)
+					dequeue(&max8614x_queue, &max8614x_sample);
+
+
+
+				if(sensor_algo_en_dis_.accel_enabled)
+					dequeue(&accel_input_queue, &accel_sample);
+
+
+
+				if(sensor_algo_en_dis_.whrm_enabled){
+					dequeue(&whrm_queue, &whrm_sample_modeX);
+					instant_hr = whrm_sample_modeX.hr * 0.1;
+					instant_hr_conf = whrm_sample_modeX.hr_conf;
+					instant_hr_activityClass = whrm_sample_modeX.activity_class;
+				}
+
+
+				if (AsciiEn) {
+					// mode 2 only for ASCII
+					if (ds_int->algo_report_mode == 2){
+						data_len = snprintf(buf, size - 1, 
+						"%u,%lu,%lu,%lu,%lu,%lu,%lu,%.3f,%.3f,%.3f,%.1f,%d,%.1f,%d,%d,%lu,%lu,%lu,%lu,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",
+							sample_count++,
+							max8614x_sample.led1,max8614x_sample.led2,max8614x_sample.led3,max8614x_sample.led4,max8614x_sample.led5,max8614x_sample.led6,
+							accel_sample.x * 0.001,accel_sample.y * 0.001,accel_sample.z * 0.001,
+							whrm_sample_modeX.hr * 0.1, whrm_sample_modeX.hr_conf, whrm_sample_modeX.rr * 0.1,whrm_sample_modeX.rr_conf,whrm_sample_modeX.activity_class,
+							whrm_sample_modeX.walk_steps, whrm_sample_modeX.run_steps, whrm_sample_modeX.kcal, whrm_sample_modeX.cadence,
+							whrm_sample_modeX.is_led_cur_adj, whrm_sample_modeX.adj_led_cur, whrm_sample_modeX.is_t_int_cur_adj, whrm_sample_modeX.adj_t_int_cur,
+							whrm_sample_modeX.is_f_smp_adj, whrm_sample_modeX.adj_f_smp,
+							whrm_sample_modeX.smp_ave, whrm_sample_modeX.state, whrm_sample_modeX.is_high_motion, whrm_sample_modeX.status);						
+					}
+					else {
+						data_len = snprintf(buf, size - 1, "%u,%lu,%lu,%lu,%lu,%lu,%lu,%.3f,%.3f,%.3f,%.1f,%d,%.1f,%d\r\n",
+							sample_count++,
+							max8614x_sample.led1,
+							max8614x_sample.led2,
+							max8614x_sample.led3,
+							max8614x_sample.led4,
+							max8614x_sample.led5,
+							max8614x_sample.led6,
+							accel_sample.x * 0.001,
+							accel_sample.y * 0.001,
+							accel_sample.z * 0.001,
+							whrm_sample_modeX.hr * 0.1,
+							whrm_sample_modeX.hr_conf,
+							whrm_sample_modeX.rr * 0.1,
+							whrm_sample_modeX.activity_class);
+					}
+				}
+				else { // bin report
+
+
+					mxm_assert_msg(((uint32_t)size > sizeof(ds_pkt_data_mode2_compact)), "data_report_execute buffer too small");
+					ds_pkt_data_mode2_compact* data_packet = (ds_pkt_data_mode2_compact*)buf;
+					data_packet->start_byte = DS_BINARY_PACKET_START_BYTE;
+					data_packet->sample_cnt = sample_count++;
+					data_packet->grnCnt = max8614x_sample.led1;
+					data_packet->grn2Cnt = max8614x_sample.led4;
+					data_packet->hr = (whrm_sample_modeX.hr * 0.1);
+					data_packet->x = (int16_t)(accel_sample.x);
+					data_packet->y = (int16_t)(accel_sample.y);
+					data_packet->z = (int16_t)(accel_sample.z);
+					data_packet->hr_confidence = whrm_sample_modeX.hr_conf;
+					data_packet->rr = whrm_sample_modeX.rr;
+					data_packet->status = whrm_sample_modeX.activity_class;
+					data_packet->crc8 = crc8((uint8_t*)data_packet, sizeof(*data_packet) - sizeof(uint8_t));
+					data_len = sizeof(*data_packet);
+				}
+			}
+			else
+			{
+				//m_USB->printf("\r\nError Printing: max8614x_q:%d, max8614x_enabled:%d,  \r\n",queue_len(&max8614x_queue), sensor_algo_en_dis_.max8614x_enabled );
+				//m_USB->printf("\r\n                accel_q:%d,    accel_enabled:%d,  \r\n",queue_len(&accel_input_queue), sensor_algo_en_dis_.accel_enabled);
+				//m_USB->printf("\r\n                whrm_queue:%d,whrm_enabled:%d,  \r\n",queue_len(&whrm_queue) , sensor_algo_en_dis_.whrm_enabled);
+
+			}
+		} break;
+
+		default:
+		{
+			m_USB->printf("\r\nError tmp_report_mode=%d\r\n", tmp_report_mode);
+			return 0;
+		}
+	}
+
+    if (data_len < 0) {
+		pr_err("snprintf console_tx_buf failed");
+	} else if (data_len > size) {
+		pr_err("buffer is insufficient to hold data");
+	}
+
+	return data_len;
+}
+
+// TODO: convert this to PPG sensor test
+int SSMAX8614XComm::selftest_max8614x(){
+	int ret;
+	uint8_t test_result;
+	bool test_failed = false;
+	m_USB->printf("starting selftest_max8614x\r\n");
+	// configure mfio pin for self test
+	ss_int->mfio_selftest();
+	ret = ss_int->self_test(SS_SENSORIDX_MAX86140, &test_result, 1000);
+	if(ret != SS_SUCCESS){
+		m_USB->printf("ss_int->self_test(SS_SENSORIDX_MAX86140, &test_result) has failed err<-1>\r\n");
+		test_failed = true;
+	}
+	// reset mfio pin to old state
+	if(!ss_int->reset_mfio_irq()){
+		m_USB->printf("smart sensor reset_mfio_irq has failed err<-1>\r\n");
+		test_failed = true;
+	}
+	// reset the sensor to turn off the LED
+	ret = ss_int->reset();
+	if(test_failed | !self_test_result_evaluate("selftest_max8614x", test_result)){
+		return -1;
+	}else{
+		return SS_SUCCESS;
+	}
+}
+
+int SSMAX8614XComm::selftest_accelerometer(){
+	int ret;
+	uint8_t test_result;
+	bool test_failed = false;
+	m_USB->printf("starting selftest_accelerometer\r\n");
+	ret = ss_int->self_test(SS_SENSORIDX_ACCEL, &test_result, 1000);
+	if(ret != SS_SUCCESS){
+		m_USB->printf("ss_int->self_test(SS_SENSORIDX_ACCEL, &test_result) has failed err<-1>\r\n");
+		test_failed = true;
+	}
+	// reset the sensor to turn off the LED
+	ret = ss_int->reset();
+	if(ret != SS_SUCCESS){
+		m_USB->printf("smart sensor reset has failed err<-1>\r\n");
+		test_failed = true;
+	}
+	if(test_failed | !self_test_result_evaluate("selftest_accelerometer", test_result)){
+		return -1;
+	}else{
+		return SS_SUCCESS;
+	}
+}
+
+bool SSMAX8614XComm::self_test_result_evaluate(const char *message, uint8_t result){
+	// check i2c response status
+	if(result != 0x00){
+		m_USB->printf("%s has failed % 02X err<-1>\r\n", message, result);
+		if((result & FAILURE_COMM))
+			m_USB->printf("%s communication has failed err<-1>\r\n", message);
+		if(result & FAILURE_INTERRUPT)
+			m_USB->printf("%s interrupt pin check has failed err<-1>\r\n", message);
+		return false;
+	}
+	return true;
+}
+
+unsigned char SSMAX8614XComm::get_sensor_id() {
+	return SENSOR_ID_SSMAX8614X; //TODO: assign the correct number
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/SmartSensorComm/SSMAX8614X/SSMAX8614XComm.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,306 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _SSMAX8614XCOMM_H_
+#define _SSMAX8614XCOMM_H_
+
+#include "mbed.h"
+#include "SensorComm.h"
+#include "USBSerial.h"
+#include "SSInterface.h"
+#include "queue.h"
+#include "bmi160.h"
+
+#define	SENSOR_ID_SSMAX8614X	0x04
+
+#define PPG_CONF_LEVEL_FLASH_ADDRESS 0x0010F100
+#define PPG_EXPIRE_DURATION_FLASH_ADDRESS 0x0010F104
+
+
+/**
+ * @brief	SSMAX8614XComm Command handler class for communication with MAX30101 on SmartSensor board
+ * @details
+ */
+class SSMAX8614XComm:	public SensorComm
+{
+public:
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	SSMAX8614XComm constructor.
+	*
+	*/
+	SSMAX8614XComm(USBSerial* USB, SSInterface* ssInterface, DSInterface* dsInterface);
+
+	/**
+	* @brief	Parses DeviceStudio-style commands.
+	* @details  Parses and executes commands. Prints return code to i/o device.
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	bool parse_command(const char* cmd);
+
+	/**
+	 * @brief	 Fill in buffer with sensor data
+	 *
+	 * @param[in]	 buf Buffer to fill data into
+	 * @param[in]	 size Maximum size of buffer
+	 * @param[out]   Number of bytes written to buffer
+	 */
+	int data_report_execute(char* buf, int size);
+
+	/**
+	 * @brief	Stop collecting data and disable sensor
+	 */
+	void stop();
+
+	/**
+	 * @brief Get the maxim part number of the device
+	 */
+	const char* get_part_name() { return "max8614x"; }
+
+	/**
+	 * @brief  Execute the smart sensor self test routine
+	 *
+	 * @return SS_SUCCESS or error code
+	 */
+	int selftest_max8614x();
+
+	/**
+	 * @brief  Execute the accelerometer self test routine
+	 * @return SS_SUCCESS or error code
+	 */
+	int selftest_accelerometer();
+
+	/**
+	 * @brief Evaluate the accelerometer self test routine
+	 *
+	 * @param message - message to be printed in the failure cases
+	 * @param value - result of the self test passed as parameter
+	 * @return true if result is SUCCESSFULL false otherwise
+	 */
+	bool self_test_result_evaluate(const char *message, uint8_t value);
+
+	unsigned char get_sensor_id();
+
+	void setBMI160(BMI160_I2C *pbmi160);
+
+	uint16_t instant_hr;
+	uint16_t instant_hr_conf;
+	uint8_t  instant_hr_activityClass;
+
+	uint16_t instant_spo2;
+	uint16_t instant_spo2_conf;
+	uint8_t  instant_spo2_percentage;
+	uint8_t  instant_lowSignalQualityFlag;
+
+private:
+	/* PRIVATE TYPE DEFINITIONS */
+	typedef enum _cmd_state_t {
+		get_format_ppg_0,
+		read_ppg_0,		  // moved here to match parser index "3"
+		get_reg_ppg,
+		set_reg_ppg,
+		dump_reg_ppg,
+		set_agc_dis,
+		set_agc_en,
+		self_test_ppg_os58,
+		self_test_ppg_acc,
+		//---------------------------WHRM_AEC_SCD -------	
+		set_cfg_whrmaecscd_aecenable,
+		get_cfg_whrmaecscd_aecenable,
+		set_cfg_whrmaecscd_scdenable,
+		get_cfg_whrmaecscd_scdenable,
+		set_cfg_whrmaecscd_adjpdperiod,
+		get_cfg_whrmaecscd_adjpdperiod,
+		set_cfg_whrmaecscd_debouncewin,
+		get_cfg_whrmaecscd_debouncewin,
+		set_cfg_whrmaecscd_motionthreshold,
+		get_cfg_whrmaecscd_motionthreshold,
+		set_cfg_whrmaecscd_minpdcurrent,
+		get_cfg_whrmaecscd_minpdcurrent,
+		set_cfg_whrmaecscd_pdconfig,
+		get_cfg_whrmaecscd_pdconfig,
+		set_cfg_whrmaecscd_ledconfig,
+		get_cfg_whrmaecscd_ledconfig,	
+		//------------------------------------------------
+		send_raw,
+		set_cfg_accel_sh_dis,
+		set_cfg_accel_sh_en,
+		set_cfg_ppg_conf_level,
+		set_cfg_ppg_expire_duration,
+		NUM_CMDS,
+	} cmd_state_t;
+
+
+	typedef struct {
+		uint32_t led1;
+		uint32_t led2;
+		uint32_t led3;
+		uint32_t led4;
+		uint32_t led5;
+		uint32_t led6;
+	} max8614x_mode1_data;
+
+	typedef struct __attribute__((packed)){  
+		uint16_t hr;         	// mode 1 & 2
+		uint8_t hr_conf;     	// mode 1 & 2
+		uint16_t rr;         	// mode 1 & 2
+		uint8_t activity_class; // mode 1 & 2
+		uint8_t rr_conf;		// mode 2
+		uint32_t walk_steps;	// mode 2
+		uint32_t run_steps;		// mode 2
+		uint32_t kcal;			// mode 2
+		uint32_t cadence;		// mode 2
+		uint8_t is_led_cur_adj;	// mode 2
+		uint16_t adj_led_cur;	// mode 2
+		uint8_t is_t_int_cur_adj;// mode 2
+		uint16_t adj_t_int_cur;	// mode 2
+		uint8_t is_f_smp_adj;	// mode 2
+		uint8_t adj_f_smp;		// mode 2
+		uint8_t smp_ave;		// mode 2
+		uint8_t state;			// mode 2
+		uint8_t is_high_motion;	// mode 2
+		uint8_t status;			// mode 2
+	} whrm_modeX_data;
+
+	typedef struct {
+		int16_t x;
+		int16_t y;
+		int16_t z;
+	} accel_mode1_data;
+
+
+	typedef struct __attribute__((packed)) {
+		uint32_t start_byte	:8;
+
+		uint32_t sample_cnt	:32;
+		uint32_t led1	:20;
+		uint32_t led2	:20;
+		uint32_t led3	:20;
+		uint32_t led4	:20;
+		uint32_t led5	:20;
+		uint32_t led6	:20;
+		uint32_t x	:14;	//Represent values of 0.000 through 8.191
+		uint32_t y	:14;	//Represent values of 0.000 through 8.191
+		uint32_t z	:14;	//Represent values of 0.000 through 8.191
+		uint32_t hr	:12;	//Represent values of 0.0 through 204.7
+		uint32_t spo2	:11;	//Represent values of 0.0 through 102.3 (only need up to 100.0)
+		uint32_t status	:8;
+
+		uint8_t	:0;			//Align CRC byte on byte boundary
+		uint8_t crc8:8;
+	} ds_pkt_data_mode1;
+
+
+	typedef struct __attribute__((packed)) {
+		uint32_t start_byte	:8;
+		uint32_t sample_cnt	:16;
+		uint32_t grnCnt		:20;
+		uint32_t grn2Cnt	:20;
+		uint32_t x	:14;				//Represent values of 0.000 through 8.191
+		uint32_t y	:14;				//Represent values of 0.000 through 8.191
+		uint32_t z	:14;				//Represent values of 0.000 through 8.191
+		uint32_t hr	:12;				//Represent values of 0.0 through 204.7
+		uint32_t hr_confidence  :8;		//Represent values of 0.0 through 100
+		uint32_t rr	:11;	//Represent values of 0.0 through 102.3 (only need up to 100.0)
+		uint32_t status	:8;
+		uint8_t	:0;			//Align CRC byte on byte boundary
+		uint8_t crc8:8;
+	} ds_pkt_data_mode2_compact;
+
+	typedef struct _accel_data_t {
+		float x;
+		float y;
+		float z;
+		int16_t x_raw;
+		int16_t y_raw;
+		int16_t z_raw;
+	} accel_data_t;
+
+	/* PRIVATE VARIABLES */
+	int input_fifo_size;
+	bool sensor_data_from_host;
+
+	BMI160_I2C *m_bmi160;
+
+	USBSerial *m_USB;
+	SSInterface *ss_int;
+	DSInterface *ds_int;
+
+	queue_t max8614x_queue;
+	uint8_t max8614x_queue_buf[64 * sizeof(max8614x_mode1_data)];
+
+	queue_t whrm_queue;
+	uint8_t whrm_queue_buf[64 * sizeof(whrm_modeX_data)]; // use the bigger of model and 2
+
+	queue_t accel_output_queue;
+	uint8_t accel_output_queue_buf[64 * sizeof(accel_mode1_data)];
+
+	queue_t accel_input_queue;
+	uint8_t accel_input_queue_buf[64 * sizeof(accel_mode1_data)];
+
+
+	ss_data_req max8614x_mode1_data_req;
+	ss_data_req whrm_mode1_data_req;
+	ss_data_req whrm_mode2_data_req;
+
+	ss_data_req accel_mode1_data_req;
+	ss_data_req agc_mode1_data_req;
+
+
+	bool agc_enabled;
+
+	// sensor and algo status
+	status_algo_sensors_st sensor_algo_en_dis_;
+
+	/* PRIVATE CONST VARIABLES */
+	static const int SSMAX8614X_REG_SIZE = 1;
+	static const int SSMAX8614X_MODE1_DATASIZE = 18;	//Taken from API doc
+	static const int SSWHRM_MODE1_DATASIZE = 6;			//Taken from API doc
+	static const int SSWHRM_MODEX_DATASIZE  = 35;       // For WHRM_AEC_SCD
+    static const int SSACCEL_MODE1_DATASIZE = 6;		//Taken from API doc
+	static const int SSAGC_MODE1_DATASIZE = 0;			//Taken from API doc
+	
+
+	/* PRIVATE METHODS */
+	void max8614x_data_rx(uint8_t *data_ptr);
+	void whrm_data_rx_mode1(uint8_t *data_ptr);
+	void whrm_data_rx_mode2(uint8_t *data_ptr);
+	void accel_data_rx(uint8_t *data_ptr);
+	void agc_data_rx(uint8_t *data_ptr);
+	int get_sensor_xyz(accel_data_t&);
+	int parse_cal_str(const char *ptr_ch, const char *cmd, uint8_t *cal_data, int cal_data_sz);
+	int parse_str(const char *ptr_ch, const char *cmd, uint8_t *data, int data_sz);
+};
+
+#endif /* _SSMAX8614XCOMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/TempComm/TempComm.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,298 @@
+  /***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include <ctype.h>
+#include "TempComm.h"
+#include "mxc_errors.h"
+#include "MAX30205.h"
+#include "CRC8.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "BLE_ICARUS.h"
+
+#define TP_REG_COUNT   64
+
+
+
+
+
+#define MINIMUM_PERIOD_SECOND 0.5
+
+const char *cmd_tbl_tp[] = {
+	"get_format temp 0",
+	"read temp 0",	/* raw */
+	"set_cfg temp sr", //set sample rate
+	"get_reg temp",
+	"set_reg temp",
+	"dump_reg temp",
+};
+
+TempComm::TempComm(USBSerial* USB): 
+	SensorComm("temp", true)
+{
+	m_USB = USB;
+	TempComm_Set_ReadTempStatus(false);
+	ticker_period_second_ = MINIMUM_PERIOD_SECOND;
+	sampling_period_ms_ = MINIMUM_PERIOD_SECOND * 1000;
+
+}
+
+void TempComm::stop()
+{
+	int ret;
+	comm_mutex.lock();
+	data_report_mode = 0;
+	comm_mutex.unlock();
+	ret = sensor->sensor_enable(0);
+	m_tempcomm_ticker_.detach();
+	TempComm_Set_ReadTempStatus(false);
+	if (ret < 0) {
+		pr_err("sensor_enable failed. ret: %d", ret);
+	}
+}
+
+bool TempComm::parse_command(const char* cmd)
+{
+	int i;
+	int ret = EXIT_SUCCESS;
+	uint8_t reg_addr;
+	uint16_t val;
+	bool recognizedCmd = false;
+	int data_len = 0;
+	char charbuf[512];
+	addr_val_pair reg_vals[TP_REG_COUNT];
+	bool comma;
+
+	if (sensor == NULL) {
+		pr_err("sensor object is invalid!");
+		return false;
+	}
+
+	for (i = 0; i < NUM_CMDS; i++) {
+		if (starts_with(cmd, cmd_tbl_tp[i])) {
+			cmd_state_t user_cmd = (cmd_state_t)i;
+			recognizedCmd = true;
+			switch (user_cmd) {
+				case get_tp_format_mode0:
+					if(AsciiEn)
+					{
+						m_USB->printf("\r\n%s format=smpleCnt,temp err=0\r\n",
+								cmd);
+					}
+					else
+					{
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s enc=bin cs=1 format={smpleCnt,8},{temp,16,2} err=0\r\n",
+								cmd);
+						m_USB->printf(charbuf);
+					}
+					break;
+				case read_tp_mode0:
+					comm_mutex.lock();
+					data_report_mode = read_tp_mode0;
+					comm_mutex.unlock();
+					sample_count = 0;
+					ret = sensor->sensor_enable(1);
+					if (ret < 0) {
+						pr_err("sensor_enable failed. ret: %d\r\n", ret);
+					}
+
+					m_tempcomm_ticker_.detach();
+					m_tempcomm_ticker_.attach(callback(this,&TempComm::TempComm_Set_ReadTempStatus_Ticker), ticker_period_second_);
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+					break;
+				case set_cfg_sr:
+					ret = (parse_cmd_data(cmd, cmd_tbl_tp[i], &sampling_period_ms_, 1, false) != 1);
+					if (ret) {
+						data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, -1);
+						m_USB->printf(charbuf);
+						break;
+					}
+					ticker_period_second_ = sampling_period_ms_/ 1000.0;
+					if(ticker_period_second_ < MINIMUM_PERIOD_SECOND){
+						pr_err("minimum value is less than 0.5\r\n");
+						sampling_period_ms_ = MINIMUM_PERIOD_SECOND * 1000;
+						ticker_period_second_ = MINIMUM_PERIOD_SECOND;
+						ret = -1;
+					}
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+					break;
+				case get_reg:
+					reg_addr = 0;
+					val = 0;
+					ret = parse_get_reg_cmd(cmd, sensor_type, &reg_addr);
+					if (!ret) {
+						ret = ((MAX30205*)sensor)->readRegister(static_cast<MAX30205::Registers_e> (reg_addr), val);
+					}
+
+					reg_vals[0].addr = reg_addr;
+					reg_vals[0].val = val;
+					InsertRegValuesIntoBleQeueu(reg_vals, 1);
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s reg_val=%02X err=%d\r\n", cmd, val, ret);
+					m_USB->printf(charbuf);
+					break;
+				case set_reg:
+					ret = parse_set_reg_cmd(cmd, sensor_type, &reg_addr, &val);
+					if (!ret) {
+						ret = ((MAX30205*)sensor)->writeRegister(static_cast<MAX30205::Registers_e> (reg_addr), val);
+					}
+
+					data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\r\n", cmd, ret);
+					m_USB->printf(charbuf);
+					break;
+				case dump_regs:
+					for (int i = 0; i < TP_REG_COUNT; i++) {
+                        reg_vals[i].addr = 0xFF;
+                    }
+
+                    ret = sensor->dump_registers(reg_vals);
+
+                    if (ret) {
+                        m_USB->printf("\r\n%s err=%d\n", cmd, ret);
+
+                        data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s err=%d\n", cmd, ret);
+                    }
+                    else {
+                        data_len = snprintf(charbuf, sizeof(charbuf), "\r\n%s reg_val=", cmd);
+                        comma = false;
+                        for (int i = 0; i < TP_REG_COUNT; i++) {
+                            if(reg_vals[i].addr == 0xFF)
+                                break;
+                            if (comma) {
+                                data_len += snprintf(charbuf + data_len,
+                                        sizeof(charbuf) - data_len - 1, ",");
+                            }
+                            data_len += snprintf(charbuf + data_len,
+                                    sizeof(charbuf) - data_len - 1,
+                                    "{%X,%X}", (unsigned int)reg_vals[i].addr, (unsigned int)reg_vals[i].val);
+                            comma = true;
+                        }
+                        data_len += snprintf(charbuf + data_len, sizeof(charbuf) - data_len - 1, " err=0\r\n");
+
+                        m_USB->printf(charbuf);
+
+                    }
+
+                    break;
+
+				default:
+					break;
+			}
+
+
+				if (BLE::Instance().gap().getState().connected) {
+					BLE_Icarus_AddtoQueue((uint8_t *)charbuf, (int32_t)sizeof(charbuf), data_len);
+				}
+
+
+		}
+	}
+
+	return recognizedCmd;
+}
+
+int TempComm::data_report_execute(char* buf, int size)
+{
+	int16_t data_len = 0;
+	uint8_t tmp_report_mode;
+	uint16_t tp_val;
+	uint32_t ret;
+	uint32_t tp_val_ext;
+	float Celsius;
+
+	tp0_comm_packet *data_packet;
+
+	if (sensor == NULL)
+		return 0;
+
+	if(!is_enabled())
+		return 0;
+
+	comm_mutex.lock();
+	tmp_report_mode = data_report_mode;
+	comm_mutex.unlock();
+
+	switch(tmp_report_mode) {
+	case read_tp_mode0:
+		if ( (m_can_read_temp_) ) {
+			TempComm_Set_ReadTempStatus(false);
+			ret = ((MAX30205*)sensor)->readTemperature(tp_val);
+
+
+		    if (ret != 0)
+				return 0;
+			tp_val_ext = (uint32_t)tp_val;
+			Celsius = ((MAX30205*)sensor)->toCelsius(tp_val_ext);
+			tp_val = Celsius*100;
+			TempComm_instant_temp_celsius = Celsius;
+
+if(AsciiEn)
+{
+			data_len = snprintf(buf, size - 1,
+					"%lu,%2.3f\r\n",
+					sample_count++,
+					Celsius);
+}
+else{
+			data_packet = (tp0_comm_packet *)buf;
+			data_packet->start_byte = 0xAA;
+			data_packet->smpleCnt = sample_count++;
+			data_packet->tp = tp_val;
+			data_packet->crc8 = crc8((uint8_t*)data_packet, sizeof(*data_packet) - sizeof(uint8_t));
+			data_len = sizeof(*data_packet);
+}
+		}
+		break;
+
+	default:
+		return 0;
+	}
+
+	if (data_len < 0) {
+		pr_err("snprintf buf failed");
+	} else if (data_len > size) {
+		pr_err("buffer is insufficient to hold data");
+	}
+
+	return data_len;
+}
+
+void TempComm::TempComm_Set_ReadTempStatus(bool en){
+	m_can_read_temp_ = en;
+}
+
+void TempComm::TempComm_Set_ReadTempStatus_Ticker(){
+	m_can_read_temp_ = true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SensorComm/TempComm/TempComm.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _TEMPCOMM_H_
+#define _TEMPCOMM_H_
+
+#include "mbed.h"
+#include "SensorComm.h"
+#include "USBSerial.h"
+#include "MAX30205.h"
+
+/**
+ * @brief	TempComm Temperature sensor command handler class.
+ * @details
+ */
+class TempComm:	public SensorComm
+{
+public:
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+	/**
+	* @brief	TempComm constructor.
+	*
+	*/
+	TempComm(USBSerial* USB);
+
+	/* PROTECTED FUNCTION DECLARATIONS */
+	/**
+	* @brief	Parses Sensor Studio commands.
+	* @details	Parses and executes commands. Prints command result to i/o device.
+	* @returns true if sensor acted upon the command, false if command was unknown
+	*/
+	bool parse_command(const char* cmd);
+
+	/**
+	* @brief	  Fill in buffer with sensor data
+	*
+	* @param[in]	  buf Buffer to fill data into
+	* @param[in]	  size Maximum size of buffer
+	* @param[out]	Number of bytes written to buffer
+	*/
+	int data_report_execute(char* buf, int size);
+
+	/**
+	* @brief	Stop collecting data and disable sensor
+	*/
+	void stop();
+
+	//sc... track whether the temperature can be read
+	void TempComm_Set_ReadTempStatus(bool en);
+
+	//sc... track whether the temperature can be read
+	void TempComm_Set_ReadTempStatus_Ticker();
+
+	volatile float TempComm_instant_temp_celsius;
+
+private:
+	/* PRIVATE TYPE DEFINITIONS */
+	typedef enum _cmd_state_t {
+		get_tp_format_mode0=0,
+		read_tp_mode0,
+		set_cfg_sr,
+		get_reg,
+		set_reg,
+		dump_regs,
+		NUM_CMDS,
+	} cmd_state_t;
+
+	typedef struct __attribute__((packed)) {
+		uint32_t start_byte :8;
+		uint32_t smpleCnt	:8;	 //Represent 0-127
+		uint32_t tp			:16; //TP ADC data
+		uint8_t				:0;	 //Needed to align crc to byte boundary
+		uint8_t crc8		:8;
+	} tp0_comm_packet;
+
+	/* PRIVATE VARIABLES */
+	USBSerial *m_USB;
+	volatile char m_can_read_temp_;
+	Ticker m_tempcomm_ticker_;
+	// read temp ticker settings
+	float ticker_period_second_;
+	uint32_t sampling_period_ms_;
+
+
+};
+
+#endif /* _PPGCOMM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SmartSensor/SSInterface.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1148 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include "SSInterface.h"
+
+#include "../../Utilities/mxm_assert.h"
+#include "Peripherals.h"
+#include "utils.h"
+#include "i2cm.h"
+
+#include "pwrman_regs.h"
+#include "ioman.h"
+
+
+
+SSInterface::SSInterface(I2C &i2cBus, PinName ss_mfio, PinName ss_reset)
+	:m_i2cBus(&i2cBus), m_spiBus(NULL),
+	mfio_pin(ss_mfio), reset_pin(ss_reset), irq_pin(ss_mfio)/*,
+	irq_evt(1000000, "irq")*/
+{
+	reset_pin.input();
+	irq_pin.fall(callback(this, &SSInterface::irq_handler));
+
+	//reset_to_main_app();
+	//get_data_type(&data_type, &sc_en);
+	ebl_mode = EBL_GPIO_TRIGGER_MODE;
+}
+
+SSInterface::SSInterface(SPI &spiBus, PinName ss_mfio, PinName ss_reset)
+	:m_i2cBus(NULL), m_spiBus(&spiBus),
+	mfio_pin(ss_mfio), reset_pin(ss_reset), irq_pin(ss_mfio)/*,
+	irq_evt(1000000, "irq")*/
+{
+	reset_pin.input();
+	irq_pin.fall(callback(this, &SSInterface::irq_handler));
+
+	//reset_to_main_app();
+	//get_data_type(&data_type, &sc_en);
+	ebl_mode = EBL_GPIO_TRIGGER_MODE;
+}
+
+SSInterface::~SSInterface()
+{
+}
+
+SS_STATUS SSInterface::reset_to_main_app()
+{
+	SS_STATUS status;
+	disable_irq();
+
+	int bootldr = in_bootldr_mode();
+	if (bootldr > 0) {
+		status = exit_from_bootloader();
+	} else if (bootldr == 0) {
+		reset_pin.output();
+
+	        if (ebl_mode == EBL_GPIO_TRIGGER_MODE)
+		cfg_mfio(PIN_OUTPUT);
+
+		reset_pin.write(0);
+		wait_ms(SS_RESET_TIME);
+
+		if (ebl_mode == EBL_GPIO_TRIGGER_MODE)
+			mfio_pin.write(1);
+
+		reset_pin.write(1);
+		wait_ms(SS_STARTUP_TO_MAIN_APP_TIME);
+
+		if (ebl_mode == EBL_GPIO_TRIGGER_MODE)
+			cfg_mfio(PIN_INPUT);
+
+		reset_pin.input();
+		status = SS_SUCCESS;
+	} else
+		status = SS_ERR_UNKNOWN;
+	enable_irq();
+	return status;
+}
+
+SS_STATUS SSInterface::reset_to_bootloader()
+{
+	disable_irq();
+	int bootldr = in_bootldr_mode();
+	if (bootldr > 0) {
+		enable_irq();
+		return SS_SUCCESS;
+	}
+	reset_pin.output();
+	if (ebl_mode == EBL_GPIO_TRIGGER_MODE)
+		cfg_mfio(PIN_OUTPUT);
+
+	reset_pin.write(0);
+	wait_ms(SS_RESET_TIME);
+	if (ebl_mode == EBL_GPIO_TRIGGER_MODE)
+		 mfio_pin.write(0);
+
+	reset_pin.write(1);
+	wait_ms(SS_STARTUP_TO_BTLDR_TIME);
+	reset_pin.input();
+
+	if (ebl_mode == EBL_CMD_TRIGGER_MODE)
+		stay_in_bootloader();
+
+	if (ebl_mode == EBL_GPIO_TRIGGER_MODE) {
+		cfg_mfio(PIN_INPUT);
+		stay_in_bootloader();
+	}
+
+	 // Verify we entered bootloader mode
+	if (in_bootldr_mode() < 0) {
+		enable_irq();
+		return SS_ERR_UNKNOWN;
+	}
+	enable_irq();
+	return SS_SUCCESS;
+}
+
+SS_STATUS SSInterface::exit_from_bootloader()
+{
+	uint8_t cmd_bytes[] = { SS_FAM_W_MODE, SS_CMDIDX_MODE };
+	uint8_t data[] = { 0x00 };
+
+	SS_STATUS status = write_cmd(
+			&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+			&data[0], ARRAY_SIZE(data));
+
+	in_bootldr = (status == SS_SUCCESS) ? true : false;
+	return status;
+}
+
+SS_STATUS SSInterface::stay_in_bootloader()
+{
+	uint8_t cmd_bytes[] = { SS_FAM_W_MODE, SS_CMDIDX_MODE };
+	uint8_t data[] = { SS_MASK_MODE_BOOTLDR };
+
+	SS_STATUS status = write_cmd(
+			&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+			&data[0], ARRAY_SIZE(data));
+
+	in_bootldr = (status == SS_SUCCESS) ? true : false;
+	return status;
+}
+
+int SSInterface::get_ebl_mode()
+{
+	return ebl_mode;
+}
+
+SS_STATUS SSInterface::set_ebl_mode(uint8_t mode)
+{
+	if (mode == EBL_CMD_TRIGGER_MODE || mode == EBL_GPIO_TRIGGER_MODE) {
+		ebl_mode = mode;
+		return SS_SUCCESS;
+	} else {
+		return SS_ERR_INPUT_VALUE;
+	}
+}
+
+SS_STATUS SSInterface::reset()
+{
+	int bootldr = in_bootldr_mode();
+	if (bootldr > 0)
+		return reset_to_bootloader();
+	else if (bootldr == 0)
+		return reset_to_main_app();
+	else
+		return SS_ERR_UNKNOWN;
+}
+
+SS_STATUS SSInterface::self_test(int idx, uint8_t *result, int sleep_ms){
+    uint8_t cmd_bytes[] = { SS_FAM_R_SELFTEST, (uint8_t)idx };
+    uint8_t rxbuf[2];
+    SS_STATUS ret;
+
+	result[0] = 0xFF;
+	ret = read_cmd(cmd_bytes, 2, (uint8_t *)0, 0, rxbuf, ARRAY_SIZE(rxbuf), sleep_ms);
+	result[0] = rxbuf[1];
+	return ret;
+}
+
+void SSInterface::cfg_mfio(PinDirection dir)
+{
+	if (dir == PIN_INPUT) {
+		mfio_pin.input();
+		mfio_pin.mode(PullUp);
+	} else {
+		disable_irq();
+		mfio_pin.output();
+	}
+}
+
+void SSInterface::enable_irq()
+{
+	irq_pin.enable_irq();
+}
+void SSInterface::disable_irq()
+{
+	irq_pin.disable_irq();
+}
+
+void SSInterface::mfio_selftest(){
+	disable_irq();
+	irq_pin.fall(callback(this, &SSInterface::irq_handler_selftest));
+	enable_irq();
+}
+
+int SSInterface::in_bootldr_mode()
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_MODE, SS_CMDIDX_MODE };
+	uint8_t rxbuf[2] = { 0 };
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+			0, 0,
+			&rxbuf[0], ARRAY_SIZE(rxbuf));
+	if (status != SS_SUCCESS)
+		return -1;
+
+	return (rxbuf[1] & SS_MASK_MODE_BOOTLDR);
+}
+
+const char* SSInterface::get_ss_fw_version()
+{
+    uint8_t cmd_bytes[2];
+    uint8_t rxbuf[4];
+
+	int bootldr = in_bootldr_mode();
+
+	if (bootldr > 0) {
+		cmd_bytes[0] = SS_FAM_R_BOOTLOADER;
+		cmd_bytes[1] = SS_CMDIDX_BOOTFWVERSION;
+	} else if (bootldr == 0) {
+		cmd_bytes[0] = SS_FAM_R_IDENTITY;
+		cmd_bytes[1] = SS_CMDIDX_FWVERSION;
+	} else {
+		return plat_name;
+	}
+
+    SS_STATUS status = read_cmd(
+             &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+             0, 0,
+             &rxbuf[0], ARRAY_SIZE(rxbuf));
+
+    if (status == SS_SUCCESS) {
+        snprintf(fw_version, sizeof(fw_version),
+            "%d.%d.%d", rxbuf[1], rxbuf[2], rxbuf[3]);
+		pr_info("fw_version:%s\r\n", fw_version);
+    }
+
+    return &fw_version[0];
+}
+
+const char* SSInterface::get_ss_algo_version()
+{
+    uint8_t cmd_bytes[3];
+    uint8_t rxbuf[4];
+
+	int bootldr = in_bootldr_mode();
+
+	if (bootldr > 0) {
+		cmd_bytes[0] = SS_FAM_R_BOOTLOADER;
+		cmd_bytes[1] = SS_CMDIDX_BOOTFWVERSION;
+		cmd_bytes[2] = 0;
+	} else if (bootldr == 0) {
+		cmd_bytes[0] = SS_FAM_R_IDENTITY;
+		cmd_bytes[1] = SS_CMDIDX_ALGOVER;
+		cmd_bytes[2] = SS_CMDIDX_AVAILSENSORS;
+	} else {
+		return plat_name;
+	}
+
+    SS_STATUS status = read_cmd(
+             &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+             0, 0,
+             &rxbuf[0], ARRAY_SIZE(rxbuf));
+
+    if (status == SS_SUCCESS) {
+        snprintf(algo_version, sizeof(algo_version),
+            "%d.%d.%d", rxbuf[1], rxbuf[2], rxbuf[3]);
+		pr_info("algo_version:%s\r\n", fw_version);
+    }
+
+    return &algo_version[0];
+}
+const char* SSInterface::get_ss_platform_name()
+{
+    uint8_t cmd_bytes[] = { SS_FAM_R_IDENTITY, SS_CMDIDX_PLATTYPE };
+    uint8_t rxbuf[2];
+
+    SS_STATUS status = read_cmd(
+            &cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+            0, 0,
+            &rxbuf[0], ARRAY_SIZE(rxbuf));
+
+    if (status == SS_SUCCESS) {
+        if (rxbuf[1] == SS_PLAT_MAX3263X) {
+			if (in_bootldr_mode() > 0) {
+				plat_name = SS_BOOTLOADER_PLATFORM_MAX3263X;
+			} else {
+	            plat_name = SS_PLATFORM_MAX3263X;
+			}
+        } else if (rxbuf[1] == SS_PLAT_MAX32660) {
+			if (in_bootldr_mode() > 0) {
+				plat_name = SS_BOOTLOADER_PLATFORM_MAX32660;
+			} else {
+				plat_name = SS_PLATFORM_MAX32660;
+			}
+        }
+    }
+
+    return plat_name;
+}
+
+SS_STATUS SSInterface::write_cmd(uint8_t *cmd_bytes, int cmd_bytes_len,
+	uint8_t *data, int data_len,
+    int sleep_ms)
+{
+    int total_len = data_len + cmd_bytes_len;
+
+    if (total_len <= SS_SMALL_BUF_SIZE) {
+        return write_cmd_small(cmd_bytes, cmd_bytes_len, data, data_len, sleep_ms);
+    } else if (total_len <= SS_MED_BUF_SIZE) {
+        return write_cmd_medium(cmd_bytes, cmd_bytes_len, data, data_len, sleep_ms);
+    } else if (total_len <= SS_LARGE_BUF_SIZE) {
+        return write_cmd_large(cmd_bytes, cmd_bytes_len, data, data_len, sleep_ms);
+    } else {
+    	mxm_assert_msg(true, "Tried to send I2C tx larger than maximum allowed size\n");
+        return SS_ERR_DATA_FORMAT; 
+    }
+}
+
+#include "i2cm.h"
+void dump_i2c_regs(int idx)
+{
+	mxc_i2cm_regs_t *i2cm = MXC_I2CM_GET_I2CM(idx);
+	pr_err("****************************\r\n"
+		"I2CM(%d) registers Dump\r\n"
+		"i2cm: %p\r\n"
+		"fs_clk_div : 0x%X\r\n"
+		"timeout : 0x%X\r\n"
+		"ctrl : 0x%X\r\n"
+		"trans : 0x%X\r\n"
+		"intfl : 0x%X\r\n"
+		"inten : 0x%X\r\n"
+		"bb : 0x%X\r\n"
+		"****************************\r\n",
+		idx,
+		i2cm,
+		i2cm->fs_clk_div,
+		i2cm->timeout,
+		i2cm->ctrl,
+		i2cm->trans,
+		i2cm->intfl,
+		i2cm->inten,
+		i2cm->bb);
+
+	/* Clean flags */
+	i2cm->intfl = i2cm->intfl;
+}
+
+SS_STATUS SSInterface::write_cmd(uint8_t *tx_buf, int tx_len, int sleep_ms)
+{
+	pr_info("write_cmd: ");
+	for (int i = 0; i < tx_len; i++) {
+		pr_info("0x%02X ", tx_buf[i]);
+	}
+	pr_info("\r\n");
+
+    int ret = m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)tx_buf, tx_len);
+
+	int retries = 4;
+	while (ret != 0 && retries-- > 0) {
+		pr_err("i2c wr retry\r\n");
+		wait_ms(1);
+	ret = m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)tx_buf, tx_len);
+	}
+
+    if (ret != 0) {
+    	pr_err("m_i2cBus->write returned %d\r\n", ret);
+
+        return SS_ERR_UNAVAILABLE;
+    }
+
+    wait_ms(sleep_ms);
+
+    char status_byte;
+    ret = m_i2cBus->read(SS_I2C_8BIT_SLAVE_ADDR, &status_byte, 1);
+	bool try_again = (status_byte == SS_ERR_TRY_AGAIN);
+	while ((ret != 0 || try_again)
+			&& retries-- > 0) {
+		pr_info("i2c rd retry\r\n");
+		wait_ms(sleep_ms);
+	ret = m_i2cBus->read(SS_I2C_8BIT_SLAVE_ADDR, &status_byte, 1);
+		try_again = (status_byte == SS_ERR_TRY_AGAIN);
+	}
+
+    if (ret != 0 || try_again) {
+
+    	pr_err("m_i2cBus->read returned %d, ss status_byte %d\r\n", ret, status_byte);
+        return SS_ERR_UNAVAILABLE;
+    }
+
+	pr_info("status_byte: %d\r\n", status_byte);
+
+	return (SS_STATUS)status_byte;
+}
+
+SS_STATUS SSInterface::write_cmd_small(uint8_t *cmd_bytes, int cmd_bytes_len,
+                       uint8_t *data, int data_len,
+                       int sleep_ms)
+{
+    uint8_t write_buf[SS_SMALL_BUF_SIZE];
+    memcpy(write_buf, cmd_bytes, cmd_bytes_len);
+    memcpy(write_buf + cmd_bytes_len, data, data_len);
+
+	SS_STATUS status = write_cmd(write_buf, cmd_bytes_len + data_len, sleep_ms);
+	return status;
+}
+
+SS_STATUS SSInterface::write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
+                       uint8_t *data, int data_len,
+                       int sleep_ms)
+{
+    uint8_t write_buf[SS_MED_BUF_SIZE];
+    memcpy(write_buf, cmd_bytes, cmd_bytes_len);
+    memcpy(write_buf + cmd_bytes_len, data, data_len);
+
+	SS_STATUS status = write_cmd(write_buf, cmd_bytes_len + data_len, sleep_ms);
+	return status;
+}
+
+SS_STATUS SSInterface::write_cmd_large(uint8_t *cmd_bytes, int cmd_bytes_len,
+                       uint8_t *data, int data_len,
+                       int sleep_ms)
+{
+    uint8_t write_buf[SS_LARGE_BUF_SIZE];
+    memcpy(write_buf, cmd_bytes, cmd_bytes_len);
+    memcpy(write_buf + cmd_bytes_len, data, data_len);
+
+	SS_STATUS status = write_cmd(write_buf, cmd_bytes_len + data_len, sleep_ms);
+	return status;
+}
+
+SS_STATUS SSInterface::read_cmd(uint8_t *cmd_bytes, int cmd_bytes_len,
+	uint8_t *data, int data_len,
+	uint8_t *rxbuf, int rxbuf_sz,
+    int sleep_ms)
+{
+#if 0
+	pr_info("read_cmd: ");
+	for (int i = 0; i < cmd_bytes_len; i++) {
+		pr_info("0x%02X ", cmd_bytes[i]);
+	}
+	pr_info("\r\n");
+
+#endif
+
+	int retries = 4;
+
+    int ret = m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)cmd_bytes, cmd_bytes_len, (data_len != 0));
+#ifdef SHOW_I2C_DEBUG_MESSAGES
+    printf("ret1 : %d\rt\n",ret);
+#endif
+    if (data_len != 0) {
+        ret |= m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)data, data_len, false);
+#ifdef SHOW_I2C_DEBUG_MESSAGES
+        printf("ret2 : %d\rt\n",ret);
+#endif
+    }
+
+	while (ret != 0 && retries-- > 0) {
+
+		pr_err("i2c wr retry\r\n");
+		wait_ms(1);
+	ret = m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)cmd_bytes, cmd_bytes_len, (data_len != 0));
+#ifdef SHOW_I2C_DEBUG_MESSAGES
+	printf("ret3 : %d\rt\n",ret);
+#endif
+	    if (data_len != 0) {
+	        ret |= m_i2cBus->write(SS_I2C_8BIT_SLAVE_ADDR, (char*)data, data_len, false);
+#ifdef SHOW_I2C_DEBUG_MESSAGES
+	        printf("ret4 : %d\rt\n",ret);
+#endif
+	    }
+	}
+
+    if (ret != 0) {
+    	pr_err("m_i2cBus->write returned %d\r\n", ret);
+
+        return SS_ERR_UNAVAILABLE;
+    }
+
+    wait_ms(sleep_ms);
+
+    ret = m_i2cBus->read(SS_I2C_8BIT_SLAVE_ADDR, (char*)rxbuf, rxbuf_sz);
+	bool try_again = (rxbuf[0] == SS_ERR_TRY_AGAIN);
+	while ((ret != 0 || try_again) && retries-- > 0) {
+		pr_info("i2c rd retry\r\n");
+		wait_ms(sleep_ms);
+	ret = m_i2cBus->read(SS_I2C_8BIT_SLAVE_ADDR, (char*)rxbuf, rxbuf_sz);
+		try_again = (rxbuf[0] == SS_ERR_TRY_AGAIN);
+	}
+    if (ret != 0 || try_again) {
+    	pr_err("m_i2cBus->read returned %d, ss status_byte %d\r\n", ret, rxbuf[0]);
+
+        return SS_ERR_UNAVAILABLE;
+    }
+
+	pr_info("status_byte: %d\r\n", rxbuf[0]);
+	pr_info("data: ");
+	for (int i = 1; i < rxbuf_sz; i++) {
+		pr_info("0x%02X ", rxbuf[i]);
+	}
+	pr_info("\r\n");
+
+    return (SS_STATUS)rxbuf[0];
+}
+
+SS_STATUS SSInterface::get_reg(int idx, uint8_t addr, uint32_t *val)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_SENSOR_NUM), "idx must be < SS_MAX_SUPPORTED_SENSOR_NUM, or update code to handle variable length idx values");
+
+	uint8_t cmd_bytes[] = { SS_FAM_R_REGATTRIBS, (uint8_t)idx };
+	uint8_t rx_reg_attribs[3] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rx_reg_attribs[0], ARRAY_SIZE(rx_reg_attribs));
+
+	if (status != SS_SUCCESS)
+		return status;
+
+	int reg_width = rx_reg_attribs[1];
+
+	uint8_t cmd_bytes2[] = { SS_FAM_R_READREG, (uint8_t)idx, addr };
+	uint8_t rxbuf[5] = {0};
+
+	status = read_cmd(&cmd_bytes2[0], ARRAY_SIZE(cmd_bytes2),
+						0, 0,
+						&rxbuf[0], reg_width + 1);
+
+	if (status == SS_SUCCESS) {
+		*val = 0;
+		for (int i = 0; i < reg_width; i++) {
+			*val = (*val << 8) | rxbuf[i + 1];
+		}
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::set_reg(int idx, uint8_t addr, uint32_t val, int byte_size)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_SENSOR_NUM), "idx must be < SS_MAX_SUPPORTED_SENSOR_NUM, or update code to handle variable length idx values");
+
+	uint8_t cmd_bytes[] = { SS_FAM_W_WRITEREG, (uint8_t)idx, addr };
+	uint8_t data_bytes[4];
+	for (int i = 0; i < byte_size; i++) {
+		data_bytes[i] = (val >> (8 * (byte_size - 1)) & 0xFF);
+	}
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								&data_bytes[0], byte_size, SS_ENABLE_SENSOR_SLEEP_MS);
+
+	return status;
+}
+
+SS_STATUS SSInterface::dump_reg(int idx, addr_val_pair* reg_vals, int reg_vals_sz, int* num_regs)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_SENSOR_NUM), "idx must be < SS_MAX_SUPPORTED_SENSOR_NUM, or update code to handle variable length idx values");
+
+	uint8_t cmd_bytes[] = { SS_FAM_R_REGATTRIBS, (uint8_t)idx };
+	uint8_t rx_reg_attribs[3] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rx_reg_attribs[0], ARRAY_SIZE(rx_reg_attribs));
+
+	if (status != SS_SUCCESS)
+		return status;
+
+	int reg_width = rx_reg_attribs[1];
+	*num_regs = rx_reg_attribs[2];
+	mxm_assert_msg((*num_regs <= reg_vals_sz), "Need to increase reg_vals array to hold all dump_reg data");
+	mxm_assert_msg(((size_t)reg_width <= sizeof(uint32_t)), "IC returned register values greater than 4 bytes in width");
+
+	int dump_reg_sz = (*num_regs) * (reg_width + 1) + 1; //+1 to reg_width for address, +1 for status byte
+
+	uint8_t rxbuf[512];
+	mxm_assert_msg(((size_t)dump_reg_sz <= sizeof(rxbuf)), "Need to increase buffer size to receive dump_reg data");
+
+	cmd_bytes[0] = SS_FAM_R_DUMPREG;
+	status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], dump_reg_sz, SS_DUMP_REG_SLEEP_MS);
+
+	if (status != SS_SUCCESS)
+		return status;
+
+	//rxbuf format is [status][addr0](reg_width x [val0])[addr1](reg_width x [val1])...
+	for (int reg = 0; reg < *num_regs; reg++) {
+		reg_vals[reg].addr = rxbuf[(reg * (reg_width + 1)) + 1];
+		uint32_t *val = &(reg_vals[reg].val);
+		*val = 0;
+		for (int byte = 0; byte < reg_width; byte++) {
+			*val = (*val << 8) | rxbuf[(reg * (reg_width + 1)) + byte + 2];
+		}
+	}
+
+	return SS_SUCCESS;
+}
+
+SS_STATUS SSInterface::enable_sensor(int idx, int mode, ss_data_req *data_req, uint8_t ext_mode)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_SENSOR_NUM), "idx must be < SS_MAX_SUPPORTED_SENSOR_NUM, or update code to handle variable length idx values");
+	mxm_assert_msg((mode <= SS_MAX_SUPPORTED_MODE_NUM), "mode must be < SS_MAX_SUPPORTED_MODE_NUM, or update code to handle variable length mode values");
+	mxm_assert_msg((mode != 0), "Tried to enable sensor to mode 0, but mode 0 is disable");
+
+
+	uint8_t cmd_bytes[] = { SS_FAM_W_SENSORMODE, (uint8_t)idx, (uint8_t)mode, ext_mode };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes), 0, 0, 5 * SS_ENABLE_SENSOR_SLEEP_MS);
+
+	if (status == SS_SUCCESS) {
+		sensor_enabled_mode[idx] = mode;
+		sensor_data_reqs[idx] = data_req;
+	}
+	return status;
+}
+
+SS_STATUS SSInterface::disable_sensor(int idx)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_SENSOR_NUM), "idx must be < SS_MAX_SUPPORTED_SENSOR_NUM, or update code to handle variable length idx values");
+	uint8_t cmd_bytes[] = { SS_FAM_W_SENSORMODE, (uint8_t)idx, 0 };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes), 0, 0, SS_ENABLE_SENSOR_SLEEP_MS);
+
+	if (status == SS_SUCCESS) {
+		sensor_enabled_mode[idx] = 0;
+		sensor_data_reqs[idx] = 0;
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::enable_algo(int idx, int mode, ss_data_req *data_req)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_ALGO_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_NUM, or update code to handle variable length idx values");
+	mxm_assert_msg((mode <= SS_MAX_SUPPORTED_MODE_NUM), "mode must be < SS_MAX_SUPPORTED_MODE_NUM, or update code to handle variable length mode values");
+	mxm_assert_msg((mode != 0), "Tried to enable algo to mode 0, but mode 0 is disable");
+
+	uint8_t cmd_bytes[] = { SS_FAM_W_ALGOMODE, (uint8_t)idx, (uint8_t)mode };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes), 0, 0, 25 * SS_ENABLE_SENSOR_SLEEP_MS);
+
+	if (status == SS_SUCCESS) {
+		algo_enabled_mode[idx] = mode;
+		algo_data_reqs[idx] = data_req;
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::disable_algo(int idx)
+{
+	mxm_assert_msg((idx <= SS_MAX_SUPPORTED_ALGO_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_NUM, or update code to handle variable length idx values");
+	uint8_t cmd_bytes[] = { SS_FAM_W_ALGOMODE, (uint8_t)idx, 0 };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes), 0, 0, SS_ENABLE_SENSOR_SLEEP_MS);
+
+	if (status == SS_SUCCESS) {
+		algo_enabled_mode[idx] = 0;
+		algo_data_reqs[idx] = 0;
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz)
+{
+	mxm_assert_msg((algo_idx <= SS_MAX_SUPPORTED_ALGO_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_NUM, or update code to handle variable length idx values");
+	mxm_assert_msg((cfg_idx <= SS_MAX_SUPPORTED_ALGO_CFG_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_CFG_NUM, or update code to handle variable length idx values");
+
+	uint8_t cmd_bytes[] = { SS_FAM_W_ALGOCONFIG, (uint8_t)algo_idx, (uint8_t)cfg_idx };
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								 cfg, cfg_sz);
+
+	return status;
+}
+
+SS_STATUS SSInterface::get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz)
+{
+	mxm_assert_msg((algo_idx <= SS_MAX_SUPPORTED_ALGO_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_NUM, or update code to handle variable length idx values");
+	mxm_assert_msg((cfg_idx <= SS_MAX_SUPPORTED_ALGO_CFG_NUM), "idx must be < SS_MAX_SUPPORTED_ALGO_CFG_NUM, or update code to handle variable length idx values");
+
+	uint8_t cmd_bytes[] = { SS_FAM_R_ALGOCONFIG, (uint8_t)algo_idx, (uint8_t)cfg_idx };
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								cfg, cfg_sz);
+
+	return status;
+}
+
+//--------------------------------------------------------------
+SS_STATUS SSInterface::send_raw(uint8_t *rawdata, int rawdata_sz)
+{
+	SS_STATUS status = write_cmd(&rawdata[0], rawdata_sz, 5 * SS_ENABLE_SENSOR_SLEEP_MS);
+	return status;
+}
+//---------------------------------------------------------------
+SS_STATUS SSInterface::set_data_type(int data_type, bool sc_en)
+{
+	mxm_assert_msg((data_type >= 0) && (data_type <= 3), "Invalid value for data_type");
+	uint8_t cmd_bytes[] = { SS_FAM_W_COMMCHAN, SS_CMDIDX_OUTPUTMODE };
+	uint8_t data_bytes[] = { (uint8_t)((sc_en ? SS_MASK_OUTPUTMODE_SC_EN : 0) |
+							((data_type << SS_SHIFT_OUTPUTMODE_DATATYPE) & SS_MASK_OUTPUTMODE_DATATYPE)) };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								&data_bytes[0], ARRAY_SIZE(data_bytes));
+
+	this->data_type = data_type;
+	this->sc_en = sc_en;
+
+	return status;
+}
+
+
+SS_STATUS SSInterface::get_data_type(int *data_type, bool *sc_en)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_COMMCHAN, SS_CMDIDX_OUTPUTMODE };
+	uint8_t rxbuf[2] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf));
+	if (status == SS_SUCCESS) {
+		*data_type =
+			(rxbuf[1] & SS_MASK_OUTPUTMODE_DATATYPE) >> SS_SHIFT_OUTPUTMODE_DATATYPE;
+		*sc_en =
+			(bool)((rxbuf[1] & SS_MASK_OUTPUTMODE_SC_EN) >> SS_SHIFT_OUTPUTMODE_SC_EN);
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::set_fifo_thresh(int thresh)
+{
+	mxm_assert_msg((thresh > 0 && thresh <= 255), "Invalid value for fifo a full threshold");
+	uint8_t cmd_bytes[] = { SS_FAM_W_COMMCHAN, SS_CMDIDX_FIFOAFULL };
+	uint8_t data_bytes[] = { (uint8_t)thresh };
+
+	SS_STATUS status = write_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								&data_bytes[0], ARRAY_SIZE(data_bytes));
+	return status;
+}
+
+SS_STATUS SSInterface::get_fifo_thresh(int *thresh)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_COMMCHAN, SS_CMDIDX_FIFOAFULL };
+	uint8_t rxbuf[2] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf));
+
+	if (status == SS_SUCCESS) {
+		*thresh = rxbuf[1];
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::ss_comm_check()
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_IDENTITY, SS_CMDIDX_PLATTYPE };
+	uint8_t rxbuf[2];
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf));
+
+	int tries = 4;
+	while (status == SS_ERR_TRY_AGAIN && tries--) {
+		wait_ms(1000);
+		status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+							0, 0,
+							&rxbuf[0], ARRAY_SIZE(rxbuf));
+	}
+
+	return status;
+}
+
+void SSInterface::fifo_sample_size(int data_type, int *sample_size)
+{
+	*sample_size = 0;
+
+	if (data_type == SS_DATATYPE_RAW || data_type == SS_DATATYPE_BOTH) {
+		for (int i = 0; i < SS_MAX_SUPPORTED_SENSOR_NUM; i++) {
+			if (sensor_enabled_mode[i]) {
+				mxm_assert_msg(sensor_data_reqs[i], "no ss_data_req found for enabled sensor");
+				*sample_size += sensor_data_reqs[i]->data_size;
+			}
+		}
+	}
+
+	if (data_type == SS_DATATYPE_ALGO || data_type == SS_DATATYPE_BOTH) {
+		for (int i = 0; i < SS_MAX_SUPPORTED_ALGO_NUM; i++) {
+			if (algo_enabled_mode[i]) {
+				mxm_assert_msg(algo_data_reqs[i], "no ss_data_req found for enabled algo");
+				*sample_size += algo_data_reqs[i]->data_size;
+			}
+		}
+	}
+}
+
+
+SS_STATUS SSInterface::num_avail_samples(int *num_samples)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_OUTPUTFIFO, SS_CMDIDX_OUT_NUMSAMPLES };
+	uint8_t rxbuf[2] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf), SS_DEFAULT2_CMD_SLEEP_MS);
+
+	if (status == SS_SUCCESS) {
+		*num_samples = rxbuf[1];
+	}
+
+	return status;
+}
+
+SS_STATUS SSInterface::get_log_len(int *log_len)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_LOG, SS_CMDIDX_R_LOG_LEN };
+	uint8_t rxbuf[2] = {0};
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf), 1);
+
+	if (status == SS_SUCCESS) {
+		*log_len = (rxbuf[1] << 8) | rxbuf[0];
+	}
+
+	return status;
+}
+
+
+SS_STATUS SSInterface::get_sensor_sample_size(uint8_t sensor_id, uint8_t *sample_size)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_INPUTFIFO, SS_CMDIDX_SAMPLE_SIZE, sensor_id };
+	uint8_t rxbuf[2]; /* status + sample size */
+
+	pr_info("[Reading external sample size for id: %d\n", sensor_id);
+	SS_STATUS status = read_cmd(cmd_bytes, ARRAY_SIZE(cmd_bytes),
+								NULL, 0,
+								rxbuf, sizeof(rxbuf));
+	*sample_size = rxbuf[1];
+	return status;
+}
+
+SS_STATUS SSInterface::get_input_fifo_size(int *fifo_size)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_INPUTFIFO, SS_CMDIDX_INPUT_FIFO_SIZE};
+	uint8_t rxbuf[3]; /* status + fifo size */
+
+	pr_info("[Reading external Input FIFO size.\n");
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								NULL, 0,
+								rxbuf, sizeof(rxbuf), SS_DEFAULT2_CMD_SLEEP_MS);
+	*fifo_size = rxbuf[1] << 8 | rxbuf[2];
+	return status;
+}
+
+SS_STATUS SSInterface::get_sensor_fifo_size(uint8_t sensor_id, int *fifo_size)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_INPUTFIFO, SS_CMDIDX_SENSOR_FIFO_SIZE, sensor_id};
+	uint8_t rxbuf[3]; /* status + fifo size */
+
+	pr_info("[Reading sensor's FIFO size for id: %d\n", sensor_id);
+	SS_STATUS status = read_cmd(cmd_bytes, ARRAY_SIZE(cmd_bytes),
+								NULL, 0,
+								rxbuf, sizeof(rxbuf));
+	*fifo_size = rxbuf[1] << 8 | rxbuf[2];
+	return status;
+}
+
+SS_STATUS SSInterface::get_num_samples_in_sensor_fifo(uint8_t sensor_id, int *fifo_size)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_INPUTFIFO, SS_CMDIDX_NUM_SAMPLES_SENSOR_FIFO, sensor_id};
+	uint8_t rxbuf[3]; /* status + fifo size */
+
+	pr_info("[Reading sensor's FIFO size for id: %d\n", sensor_id);
+	SS_STATUS status = read_cmd(cmd_bytes, ARRAY_SIZE(cmd_bytes),
+								NULL, 0,
+								rxbuf, sizeof(rxbuf));
+	*fifo_size = rxbuf[1] << 8 | rxbuf[2];
+	return status;
+}
+
+SS_STATUS SSInterface::get_num_bytes_in_input_fifo(int *fifo_size)
+{
+	uint8_t cmd_bytes[] = { SS_FAM_R_INPUTFIFO, SS_CMDIDX_NUM_SAMPLES_INPUT_FIFO};
+	uint8_t rxbuf[3]; /* status + fifo size */
+
+	pr_info("[Reading input FIFO size for id\n");
+	SS_STATUS status = read_cmd(cmd_bytes, ARRAY_SIZE(cmd_bytes),
+								NULL, 0,
+								rxbuf, sizeof(rxbuf),
+								SS_DEFAULT2_CMD_SLEEP_MS);
+	*fifo_size = rxbuf[1] << 8 | rxbuf[2];
+	return status;
+}
+
+SS_STATUS SSInterface::feed_to_input_fifo(uint8_t *tx_buf, int tx_buf_sz, int *nb_written)
+{
+	int ret;
+	uint8_t rxbuf[3];
+
+	tx_buf[0] = SS_FAM_W_INPUTFIFO;
+	tx_buf[1] = SS_CMDIDX_WRITE_FIFO;
+
+	ret = read_cmd(&tx_buf[0], tx_buf_sz,
+			NULL, 0,
+			rxbuf, sizeof(rxbuf), SS_DEFAULT3_CMD_SLEEP_MS);
+
+	*nb_written = rxbuf[1] * 256 + rxbuf[2];
+	return (SS_STATUS)ret;
+}
+
+SS_STATUS SSInterface::read_fifo_data(int num_samples, int sample_size,
+	uint8_t* databuf, int databuf_sz)
+{
+	int bytes_to_read = num_samples * sample_size + 1; //+1 for status byte
+	mxm_assert_msg((bytes_to_read <= databuf_sz), "databuf too small");
+
+	uint8_t cmd_bytes[] = { SS_FAM_R_OUTPUTFIFO, SS_CMDIDX_READFIFO };
+
+	pr_info("[reading %d bytes (%d samples)\r\n", bytes_to_read, num_samples);
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								databuf, bytes_to_read, 10);
+
+	return status;
+}
+
+SS_STATUS SSInterface::read_ss_log(int num_bytes, uint8_t *log_buf, int log_buf_sz)
+{
+	int bytes_to_read = num_bytes + 1; //+1 for status byte
+	mxm_assert_msg((bytes_to_read <= log_buf_sz), "log_buf too small");
+
+	uint8_t cmd_bytes[] = { SS_FAM_R_LOG, SS_CMDIDX_R_LOG_DATA };
+
+	pr_info("[reading %d bytes (%d samples)\r\n", bytes_to_read, bytes_to_read);
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								log_buf, bytes_to_read, 5);
+
+	return status;
+}
+
+static uint8_t databuf[512];
+void SSInterface::ss_execute_once(){
+
+	if(m_irq_received_ == false)
+		return;
+
+	uint8_t sample_count;
+	m_irq_received_ = false;
+	uint8_t cmd_bytes[] = { SS_FAM_R_STATUS, SS_CMDIDX_STATUS };
+	uint8_t rxbuf[2] = {0};
+
+	//irq_evt.start();
+
+	disable_irq();
+
+	SS_STATUS status = read_cmd(&cmd_bytes[0], ARRAY_SIZE(cmd_bytes),
+								0, 0,
+								&rxbuf[0], ARRAY_SIZE(rxbuf), SS_DEFAULT2_CMD_SLEEP_MS);
+	pr_info("ss_int: %2X", rxbuf[1]);
+
+	if (status != SS_SUCCESS) {
+		pr_err("Couldn't read status byte of SmartSensor!");
+		enable_irq();
+		//irq_evt.stop();
+		return;
+	}
+
+	if (rxbuf[1] & SS_MASK_STATUS_ERR) {
+		pr_err("SmartSensor status error: %d", rxbuf[1] & SS_MASK_STATUS_ERR);
+	}
+	if (rxbuf[1] & SS_MASK_STATUS_FIFO_OUT_OVR) {
+		pr_err("SmartSensor Output FIFO overflow!");
+	}
+	if (rxbuf[1] & SS_MASK_STATUS_FIFO_IN_OVR) {
+		pr_err("SmartSensor Input FIFO overflow!");
+	}
+
+	if (rxbuf[1] & SS_MASK_STATUS_LOG_OVR) {
+		pr_err("SmartSensor log overflow!");
+	}
+
+	if (rxbuf[1] & SS_MASK_STATUS_LOG_RDY) {
+		pr_err("SmartSensor Log ready");
+		int log_len;
+		status = get_log_len(&log_len);
+		if (status != SS_SUCCESS)
+		{
+			pr_err("Couldn't read log lenght");
+			enable_irq();
+			//irq_evt.stop();
+			return;
+		}
+
+		mxm_assert_msg((log_len <= sizeof(databuf)), "log size in SS longer than buffer");
+		status = read_ss_log(log_len, &databuf[0], sizeof(databuf));
+		if (status != SS_SUCCESS)
+		{
+			pr_err("Couldn't read from SmartSensor Log");
+			enable_irq();
+			//irq_evt.stop();
+			return;
+		}
+
+		databuf[log_len] = 0;
+		Peripherals::usbSerial()->printf("\r\n%s", (char *)databuf);
+	}
+
+	if (rxbuf[1] & SS_MASK_STATUS_DATA_RDY) {
+		int num_samples = 1;
+		status = num_avail_samples(&num_samples);
+		if (status != SS_SUCCESS)
+		{
+			pr_err("Couldn't read number of available samples in SmartSensor Output FIFO");
+			enable_irq();
+			//irq_evt.stop();
+			return;
+		}
+
+		int sample_size;
+		fifo_sample_size(data_type, &sample_size);
+
+		int bytes_to_read = num_samples * sample_size + 1; //+1 for status byte
+		if ((uint32_t)bytes_to_read > sizeof(databuf)) {
+			//Reduce number of samples to read to fit in buffer
+			num_samples = (sizeof(databuf) - 1) / sample_size;
+		}
+
+		wait_ms(5);
+		status = read_fifo_data(num_samples, sample_size, &databuf[0], sizeof(databuf));
+		if (status != SS_SUCCESS)
+		{
+			pr_err("Couldn't read from SmartSensor Output FIFO");
+			enable_irq();
+			//irq_evt.stop();
+			return;
+		}
+
+		//Skip status byte
+		uint8_t *data_ptr = &databuf[1];
+
+		int i = 0;
+		for (i = 0; i < num_samples; i++) {
+			if (sc_en) {
+				sample_count = *data_ptr++;
+				pr_info("Received sample #%d", sample_count);
+			}
+
+			//Chop up data and send to modules with enabled sensors
+			if (data_type == SS_DATATYPE_RAW || data_type == SS_DATATYPE_BOTH) {
+				for (int i = 0; i < SS_MAX_SUPPORTED_SENSOR_NUM; i++) {
+					if (sensor_enabled_mode[i]) {
+						mxm_assert_msg(sensor_data_reqs[i],
+								"no ss_data_req found for enabled sensor");
+						sensor_data_reqs[i]->callback(data_ptr);
+						data_ptr += sensor_data_reqs[i]->data_size;
+					}
+				}
+			}
+			if (data_type == SS_DATATYPE_ALGO || data_type == SS_DATATYPE_BOTH) {
+				for (int i = 0; i < SS_MAX_SUPPORTED_ALGO_NUM; i++) {
+					if (algo_enabled_mode[i]) {
+					mxm_assert_msg(algo_data_reqs[i],
+								"no ss_data_req found for enabled algo");
+						algo_data_reqs[i]->callback(data_ptr);
+						data_ptr += algo_data_reqs[i]->data_size;
+					}
+				}
+			}
+		}
+	}
+	enable_irq();
+	//irq_evt.stop();
+}
+
+void SSInterface::ss_clear_interrupt_flag(){
+	m_irq_received_ = false;
+}
+
+void SSInterface::irq_handler()
+{
+	m_irq_received_ = true;
+}
+
+void SSInterface::irq_handler_selftest(){
+	mfio_int_happened = true;
+}
+
+bool SSInterface::reset_mfio_irq(){
+	bool ret = mfio_int_happened;
+	mfio_int_happened = false;
+	disable_irq();
+	irq_pin.fall(callback(this, &SSInterface::irq_handler));
+	enable_irq();
+	return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Interfaces/SmartSensor/SSInterface.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,757 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#ifndef _SSINTERFACE_H_
+#define _SSINTERFACE_H_
+
+#include "mbed.h"
+#include "MaximSensor.h"
+#include "EventStats.h"
+
+#define SS_PLATFORM_MAX3263X    "SmartSensor_MAX3263X"
+#define SS_PLATFORM_MAX32660    "SmartSensor_MAX32660"
+#define SS_BOOTLOADER_PLATFORM_MAX3263X    "Bootloader_MAX3263X"
+#define SS_BOOTLOADER_PLATFORM_MAX32660    "Bootloader_MAX32660"
+
+
+#define SS_I2C_8BIT_SLAVE_ADDR		0xAA
+#define SS_DEFAULT_CMD_SLEEP_MS		2
+#define SS_DEFAULT2_CMD_SLEEP_MS	4
+#define SS_DEFAULT3_CMD_SLEEP_MS	30
+#define SS_DUMP_REG_SLEEP_MS		100
+#define SS_ENABLE_SENSOR_SLEEP_MS	20
+
+#define SH_INPUT_DATA_DIRECT_SENSOR	0x00 // Default
+#define SH_INPUT_DATA_FROM_HOST		0x01
+
+#define SS_SENSORIDX_MAX86140	0x00
+#define SS_SENSORIDX_MAX30205	0x01
+#define SS_SENSORIDX_MAX30001	0x02
+#define SS_SENSORIDX_MAX30101	0x03
+#define SS_SENSORIDX_ACCEL	0x04
+
+#define SS_ALGOIDX_AGC	0x00
+#define SS_ALGOIDX_AEC	0x01
+#define SS_ALGOIDX_WHRM	0x02
+#define SS_ALGOIDX_ECG	0x03
+#define SS_ALGOIDX_BPT	0x04
+#define SS_ALGOIDX_WSPO2 0x05 /// additional index
+
+
+#define SS_FAM_R_STATUS		0x00
+	#define SS_CMDIDX_STATUS	0x00
+		#define SS_SHIFT_STATUS_ERR				0
+		#define SS_MASK_STATUS_ERR				(0x07 << SS_SHIFT_STATUS_ERR)
+		#define SS_SHIFT_STATUS_DATA_RDY		3
+		#define SS_MASK_STATUS_DATA_RDY			(1 << SS_SHIFT_STATUS_DATA_RDY)
+		#define SS_SHIFT_STATUS_FIFO_OUT_OVR	4
+		#define SS_MASK_STATUS_FIFO_OUT_OVR		(1 << SS_SHIFT_STATUS_FIFO_OUT_OVR)
+		#define SS_SHIFT_STATUS_FIFO_IN_OVR		5
+		#define SS_MASK_STATUS_FIFO_IN_OVR		(1 << SS_SHIFT_STATUS_FIFO_IN_OVR)
+
+		#define SS_SHIFT_STATUS_LOG_OVR			6
+		#define SS_MASK_STATUS_LOG_OVR			(1 << SS_SHIFT_STATUS_LOG_OVR)
+
+		#define SS_SHIFT_STATUS_LOG_RDY			7
+		#define SS_MASK_STATUS_LOG_RDY			(1 << SS_SHIFT_STATUS_LOG_RDY)
+
+
+#define SS_FAM_W_MODE	0x01
+#define SS_FAM_R_MODE	0x02
+	#define SS_CMDIDX_MODE	0x00
+		#define SS_SHIFT_MODE_SHDN		0
+		#define SS_MASK_MODE_SHDN		(1 << SS_SHIFT_MODE_SHDN)
+		#define SS_SHIFT_MODE_RESET		1
+		#define SS_MASK_MODE_RESET		(1 << SS_SHIFT_MODE_RESET)
+		#define SS_SHIFT_MODE_FIFORESET	2
+		#define SS_MASK_MODE_FIFORESET	(1 << SS_SHIFT_MODE_FIFORESET)
+		#define SS_SHIFT_MODE_BOOTLDR	3
+		#define SS_MASK_MODE_BOOTLDR	(1 << SS_SHIFT_MODE_BOOTLDR)
+
+#define SS_I2C_READ		0x03
+
+#define SS_FAM_W_COMMCHAN	0x10
+#define SS_FAM_R_COMMCHAN	0x11
+	#define SS_CMDIDX_OUTPUTMODE	0x00
+		#define SS_SHIFT_OUTPUTMODE_DATATYPE	0
+		#define SS_MASK_OUTPUTMODE_DATATYPE		(0x03 << SS_SHIFT_OUTPUTMODE_DATATYPE)
+			#define SS_DATATYPE_PAUSE				0
+			#define SS_DATATYPE_RAW					1
+			#define SS_DATATYPE_ALGO				2
+			#define SS_DATATYPE_BOTH				3
+		#define SS_SHIFT_OUTPUTMODE_SC_EN		2
+		#define SS_MASK_OUTPUTMODE_SC_EN		(1 << SS_SHIFT_OUTPUTMODE_SC_EN)
+	#define SS_CMDIDX_FIFOAFULL		0x01
+
+#define SS_FAM_R_OUTPUTFIFO	0x12
+	#define SS_CMDIDX_OUT_NUMSAMPLES	0x00
+	#define SS_CMDIDX_READFIFO		    0x01
+
+#define SS_FAM_R_INPUTFIFO						0x13
+	#define SS_CMDIDX_SAMPLE_SIZE				0x00
+	#define SS_CMDIDX_INPUT_FIFO_SIZE			0x01
+	#define SS_CMDIDX_SENSOR_FIFO_SIZE			0x02
+	#define SS_CMDIDX_NUM_SAMPLES_SENSOR_FIFO	0x03
+	#define SS_CMDIDX_NUM_SAMPLES_INPUT_FIFO	0x04
+
+#define SS_FAM_W_INPUTFIFO						0x14
+	#define SS_CMDIDX_WRITE_FIFO				0x00
+
+#define SS_FAM_W_WRITEREG		0x40
+#define SS_FAM_R_READREG		0x41
+#define SS_FAM_R_REGATTRIBS		0x42
+#define SS_FAM_R_DUMPREG		0x43
+
+#define SS_FAM_W_SENSORMODE	0x44
+#define SS_FAM_R_SENSORMODE	0x45
+
+#define SS_FAM_W_ALGOCONFIG	0x50
+#define SS_FAM_R_ALGOCONFIG	0x51
+	#define SS_CFGIDX_AGC_TARGET		0x00
+	#define SS_CFGIDX_AGC_CORR_COEFF	0x01
+	#define SS_CFGIDX_AGC_SENSITIVITY	0x02
+	#define SS_CFGIDX_AGC_SMP_AVG		0x03
+
+	#define SS_CFGIDX_WHRM_SR			0x00
+	#define SS_CFGIDX_WHRM_MAX_HEIGHT	0x01
+	#define SS_CFGIDX_WHRM_MAX_WEIGHT	0x02
+	#define SS_CFGIDX_WHRM_MAX_AGE		0x03
+	#define SS_CFGIDX_WHRM_MIN_HEIGHT	0x04
+	#define SS_CFGIDX_WHRM_MIN_WEIGHT	0x05
+	#define SS_CFGIDX_WHRM_MIN_AGE		0x06
+	#define SS_CFGIDX_WHRM_DEF_HEIGHT	0x07
+	#define SS_CFGIDX_WHRM_DEF_WEIGHT	0x08
+	#define SS_CFGIDX_WHRM_DEF_AGE		0x09
+	#define SS_CFGIDX_WHRM_INIT_HR		0x0A
+	
+	// additional for WHRM_AEC_SCD
+	#define SS_CFGIDX_WHRM_AEC_ENABLE						0x0B
+	#define SS_CFGIDX_WHRM_SCD_ENABLE						0x0C
+	#define SS_CFGIDX_WHRM_ADJ_TARGET_PD_CURRENT_PERIOD		0x0D
+	#define SS_CFGIDX_WHRM_SCD_DEBOUNCE_WINDOW				0x0E
+	#define SS_CFGIDX_WHRM_MOTION_MAG_THRESHOLD				0x0F
+	#define SS_CFGIDX_WHRM_MIN_PD_CURRENT			    	0x10
+	#define SS_CFGIDX_WHRM_PD_CONFIG				    	0x11
+	#define SS_CFGIDX_WHRM_LED_CONFIG				    	0x12
+
+	// config for WSPO2 
+	#define SS_CFGIDX_WSPO2_CAL			0x00
+	#define SS_CFGIDX_WSPO2_SR			0x01
+	#define SS_CFGIDX_WSPO2_ALGO_MODE	0x02
+	#define SS_CFGIDX_WSPO2_AGC_MODE	0x03
+	#define SS_CFGIDX_WSPO2_MOTION_DET	0x04
+	#define SS_CFGIDX_WSPO2_MOTION_PERIOD	0x05
+	#define SS_CFGIDX_WSPO2_MOTION_THRESHOLD 0x06
+	#define SS_CFGIDX_WSPO2_AGC_TIMEOUT		0x07
+	#define SS_CFGIDX_WSPO2_TIMEOUT		0x08
+	#define SS_CFGIDX_WSPO2_PD_CONFIG		0x09
+	
+	
+	#define SS_CFGIDX_BP_USE_MED		0x00
+	#define SS_CFGIDX_BP_SYS_BP_CAL		0x01
+	#define SS_CFGIDX_BP_DIA_BP_CAL		0x02
+	#define SS_CFGIDX_BP_CAL_DATA		0x03
+	#define SS_CFGIDX_BP_EST_DATE		0x04
+	#define SS_CFGIDX_BP_EST_NONREST	0x05
+    #define SS_CFGIDX_BP_SPO2_COEFS     0x06
+
+#define SS_FAM_W_ALGOMODE	0x52
+#define SS_FAM_R_ALGOMODE	0x53
+
+#define SS_FAM_W_EXTERNSENSORMODE	0x60
+	#define SS_W_EXT_SENSOR_MODE	0x00
+#define SS_FAM_R_EXTERNSENSORMODE	0x61
+	#define SS_R_EXT_SENSOR_MODE	0x00
+
+#define SS_FAM_R_SELFTEST    0x70
+
+#define SS_FAM_W_BOOTLOADER	0x80
+	#define SS_CMDIDX_SETIV			0x00
+	#define SS_CMDIDX_SETAUTH		0x01
+	#define SS_CMDIDX_SETNUMPAGES	0x02
+	#define SS_CMDIDX_ERASE			0x03
+	#define SS_CMDIDX_SENDPAGE		0x04
+	#define SS_CMDIDX_ERASE_PAGE	0x05
+#define SS_FAM_R_BOOTLOADER	0x81
+	#define SS_CMDIDX_BOOTFWVERSION	0x00
+	#define SS_CMDIDX_PAGESIZE		0x01
+
+#define SS_FAM_W_BOOTLOADER_CFG	0x82
+#define SS_FAM_R_BOOTLOADER_CFG	0x83
+	#define SS_CMDIDX_BL_SAVE		0x00
+	#define SS_CMDIDX_BL_ENTRY		0x01
+		#define SS_BL_CFG_ENTER_BL_MODE		0x00
+		#define SS_BL_CFG_EBL_PIN			0x01
+		#define SS_BL_CFG_EBL_POL			0x02
+	#define SS_CMDIDX_BL_EXIT		0x02
+		#define SS_BL_CFG_EXIT_BL_MODE		0x00
+		#define SS_BL_CFG_TIMEOUT			0x01
+
+/* Enable logging/debugging */
+#define SS_FAM_R_LOG				0x90
+	#define SS_CMDIDX_R_LOG_DATA	0x00
+	#define SS_CMDIDX_R_LOG_LEN		0x01
+
+	#define SS_CMDIDX_R_LOG_LEVEL	0x02
+		#define SS_LOG_DISABLE		0x00
+		#define SS_LOG_CRITICAL		0x01
+		#define SS_LOG_ERROR		0x02
+		#define SS_LOG_INFO			0x04
+		#define SS_LOG_DEBUG		0x08
+
+#define SS_FAM_W_LOG_CFG			0x91
+	#define SS_CMDIDX_LOG_GET_LEVEL	0x00
+	#define SS_CMDIDX_LOG_SET_LEVEL	0x01
+
+#define SS_FAM_R_IDENTITY			0xFF
+	#define SS_CMDIDX_PLATTYPE		0x00
+	#define SS_CMDIDX_PARTID		0x01
+	#define SS_CMDIDX_REVID			0x02
+	#define SS_CMDIDX_FWVERSION		0x03
+	#define SS_CMDIDX_AVAILSENSORS	0x04
+	#define SS_CMDIDX_DRIVERVER		0x05
+	#define SS_CMDIDX_AVAILALGOS	0x06
+	#define SS_CMDIDX_ALGOVER		0x07
+
+
+typedef enum {
+	SS_SUCCESS=0x00,
+
+	SS_ERR_COMMAND=0x01,
+	SS_ERR_UNAVAILABLE=0x02,
+	SS_ERR_DATA_FORMAT=0x03,
+	SS_ERR_INPUT_VALUE=0x04,
+
+	SS_ERR_BTLDR_GENERAL=0x80,
+	SS_ERR_BTLDR_CHECKSUM=0x81,
+
+	SS_ERR_TRY_AGAIN=0xFE,
+	SS_ERR_UNKNOWN=0xFF,
+} SS_STATUS;
+
+typedef enum {
+    SS_PLAT_MAX3263X=0,
+    SS_PLAT_MAX32660=1,
+} SS_PLAT_TYPE;
+
+//self test result masks
+#define FAILURE_COMM        0x01
+#define FAILURE_INTERRUPT   0x02
+
+#define SS_SMALL_BUF_SIZE 32
+#define SS_MED_BUF_SIZE 512
+#define SS_LARGE_BUF_SIZE 8224
+
+#define SS_RESET_TIME	10
+#define SS_STARTUP_TO_BTLDR_TIME	50
+#define SS_STARTUP_TO_MAIN_APP_TIME	1000
+
+#define SS_MAX_SUPPORTED_SENSOR_NUM	0xFE
+#define SS_MAX_SUPPORTED_ALGO_NUM	0xFE
+#define SS_MAX_SUPPORTED_ALGO_CFG_NUM	0xFE
+#define SS_MAX_SUPPORTED_MODE_NUM	0xFF
+
+/* BOOTLOADER HOST */
+#define EBL_CMD_TRIGGER_MODE   0
+#define EBL_GPIO_TRIGGER_MODE  1
+
+
+typedef struct {
+	int data_size;
+	Callback<void(uint8_t*)> callback;
+} ss_data_req;
+
+typedef union {
+	struct {
+		uint16_t whrm_enabled    :1;
+		uint16_t wspo2_enabled   :1; /// added
+		uint16_t bpt_enabled     :1;
+		uint16_t agc_enabled     :1;
+		uint16_t max8614x_enabled:1;
+		uint16_t max3010x_enabled:1;
+		uint16_t accel_enabled   :1;
+
+		uint16_t sensorhub_accel :1;  // added to specify if sensor hub accel is used or host (default)
+		uint16_t placeholder     :8; //
+	};
+	uint16_t status_vals;
+} status_algo_sensors_st;
+
+
+/**
+ * @brief   SSInterface is Maxim's SmartSensor Interface class
+ */
+class SSInterface
+{
+public:
+
+	/* PUBLIC FUNCTION DECLARATIONS */
+    /**
+    * @brief    SSInterface constructor.
+	*
+	* @param[in]	i2cBus - reference to the I2C bus for the SmartSensor
+	* @param[in]	ss_mfio - name of SmartSensor multi-function IO pin
+	* @param[in]	ss_reset - name of SmartSensor Reset pin
+    *
+    */
+    SSInterface(I2C &i2cBus, PinName ss_mfio, PinName ss_reset);
+
+    /**
+    * @brief    SSInterface constructor.
+	*
+	* @param[in]	spiBus - reference to the SPI bus for the SmartSensor
+	* @param[in]	ss_mfio - name of SmartSensor multi-function IO pin
+	* @param[in]	ss_reset - name of SmartSensor Reset pin
+    *
+    */
+    SSInterface(SPI &spiBus, PinName ss_mfio, PinName ss_reset);
+
+    /**
+    * @brief    DSInterface destructor.
+    *
+    */
+    ~SSInterface();
+
+	/**
+	* @brief	Write a command to the SmartSensor and get status response
+	*
+	* @param[in]	cmd_bytes - Pointer to the command's family and index bytes
+	* @param[in]	cmd_idx_len - The number of bytes in the command
+	* @param[in]	data - Pointer to the command's data bytes
+	* @param[in]	data_len - The number data bytes
+	*
+	* @return SS_STATUS byte
+	*/
+	SS_STATUS write_cmd(uint8_t *cmd_bytes, int cmd_bytes_len,
+						uint8_t *data, int data_len,
+                        int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+
+
+	/**
+	* @brief	Write a command to the SmartSensor and get status response
+	*
+	* @param[in]	tx_buf - Pointer to the command's family, index bytes and data bytes
+	* @param[in]	tx_len - Total transaction lenght to send
+	*
+	* @return SS_STATUS byte
+	*/
+	SS_STATUS write_cmd(uint8_t *tx_buf, int tx_len,
+			int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+
+	/**
+	* @brief	Write a command to the SmartSensor and get status response
+	*
+	* @param[in]	cmd_bytes - Pointer to the command's family and index bytes
+	* @param[in]	cmd_idx_len - The number of bytes in the command
+	* @param[in]	data - Pointer to the command's data bytes
+	* @param[in]	data_len - The number data bytes
+	* @param[in]	rxbuf - Buffer to fill in with read data (including status byte)
+	* @param[in]	rxbuf_sz - Size of the rx buffer (to prevent overflow)
+	*
+	* @return SS_STATUS byte
+	*/
+	SS_STATUS read_cmd( uint8_t *cmd_bytes, int cmd_bytes_len,
+						uint8_t *data, int data_len,
+						uint8_t *rxbuf, int rxbuf_sz,
+			int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+
+	/**
+	* @brief	Get a string representing the SmartSensor firmware version
+	* @details	If in bootloader mode, returns bootloader version
+	*
+	* @return   Pointer to firmware version string
+	*/
+    const char* get_ss_fw_version();
+
+	/**
+	* @brief	Get a string representing the SmartSensor algo version
+	* @details	If in bootloader mode, returns bootloader version
+	*
+	* @return   Pointer to algo version string
+	*/
+    const char* get_ss_algo_version();
+
+	/**
+	* @brief	Get a string representing the SmartSensor platform type
+	*
+	* @return   Pointer to platform type string
+	*/
+    const char* get_ss_platform_name();
+
+	/**
+	 * @brief	Reset the SmartSensor and jump to main application
+	 *
+	 * @return	SS_STATUS code indicating success
+	 */
+	SS_STATUS reset_to_main_app();
+
+	/**
+	 * @brief	Reset the SmartSensor and jump to bootloader
+	 *
+	 * @return	SS_STATUS code indicating success
+	 */
+	SS_STATUS reset_to_bootloader();
+
+	/**
+	 * @brief	Reset the SmartSensor
+	 * @details	If the SmartSensor was in bootloader, it will jump back into bootloader
+	 *			If the SmartSensor was in main app, it will jump back into main app
+	 *
+	 * @return	SS_STATUS code indicating success
+	 */
+	SS_STATUS reset();
+
+	/**
+	 * @brief		run the self test commands
+	 * param[in]	idx - the id of the sensor for the self test
+	 * param[in]	result - self-test response
+	 * param[in]	sleep_ms - duration of wait for read command
+	 * @return		SS_STATUS code indicating success
+	 */
+	SS_STATUS self_test(int idx, uint8_t *result, int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+
+	/**
+	 * @brief	Check if SmartSensor is in bootloader mode
+	 *
+	 * @return	1 if in bootloader mode, 0 if in main app, -1 if comm error
+	 */
+	int in_bootldr_mode();
+
+
+	/**
+	 * @brief	Read register from a device onboard SmartSensor
+	 *
+	 * @param[in] idx - Index of device to read
+	 * @param[in] addr - Register address
+	 * @param[out] val - Register value
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS get_reg(int idx, uint8_t addr, uint32_t *val);
+
+	/**
+	 * @brief	Set register of a device onboard SmartSensor
+	 *
+	 * @param[in] idx - Index of device to read
+	 * @param[in] addr - Register address
+	 * @param[in] val - Register value
+	 * @param[in] byte_size - Size of IC register in bytes
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS set_reg(int idx, uint8_t addr, uint32_t val, int byte_size);
+
+	/**
+	 * @brief	Dump registers of a device onboard SmartSensor
+	 *
+	 * @param[in] idx - Index of device
+	 * @param[in] reg_vals - Array of addr_val_pairs
+	 * @param[in] reg_vals_sz - Number of items reg_vals can hold
+	 * @param[out] num_regs - Number of registers returned by command
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS dump_reg(int idx, addr_val_pair* reg_vals, int reg_vals_sz, int* num_regs);
+
+
+	/**
+	 * @brief	Enable a device on the SmartSensor
+	 *
+	 * @param[in] idx - Index of device
+	 * @param[in] mode - Mode to set the device to
+	 * @param[in] data_req - Data request
+	 * @param[in] ext_ - Data request
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS enable_sensor(int idx, int mode, ss_data_req* data_req, uint8_t ext_mode = SH_INPUT_DATA_DIRECT_SENSOR);
+
+	/**
+	 * @brief	Disable a device on the SmartSensor
+	 *
+	 * @param[in] idx - Index of device
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS disable_sensor(int idx);
+
+	/**
+	 * @brief	Enable an algorithm on the SmartSensor
+	 *
+	 * @param[in] idx - Index of device
+	 * @param[in] mode - Mode to set the device to
+	 * @param[in] data_req - Data request
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS enable_algo(int idx, int mode, ss_data_req* data_req);
+
+	/**
+	 * @brief	Disable an algorithm on the SmartSensor
+	 *
+	 * @param[in] idx - Index of device
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS disable_algo(int idx);
+
+	/**
+	 * @brief	Set the value of an algorithm configuration parameter
+	 *
+	 * @param[in] algo_idx Index of algorithm
+	 * @param[in] cfg_idx Index of configuration parameter
+	 * @param[in] cfg Array of configuration bytes
+	 * @param[in] cfg_sz Size of cfg array
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
+
+	/**
+	 * @brief	Get the value of an algorithm configuration parameter
+	 *
+	 * @param[in] algo_idx Index of algorithm
+	 * @param[in] cfg_idx Index of configuration parameter
+	 * @param[in] cfg Array of configuration bytes to be filled in
+	 * @param[in] cfg_sz Number of bytes to be read
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
+
+	/**
+	 * @brief	Set the CommChannel Output Mode options
+	 *
+	 * @param[in] data_type - Set to 0 for only algorithm data
+	 *							Set to 1 for only raw sensor data
+	 *							Set to 2 for algo + raw sensor data
+	 *							Set to 3 for no data
+	 * @param[in] sc_en - Set to true to receive 1 byte sample count from SmartSensor
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS set_data_type(int data_type, bool sc_en);
+
+	/**
+	 * @brief	Get the CommChannel Output Mode options
+	 *
+	 * @param[out] data_type - 0 for only algorithm data
+	 *							1 for only raw sensor data
+	 *							2 for algo + raw sensor data
+	 *							3 for no data
+	 * @param[in] sc_en - If true, SmartSensor prepends data with 1 byte sample count
+	 *
+	 * @return	SS_SUCCESS on success
+	 */
+	SS_STATUS get_data_type(int* data_type, bool *sc_en);
+
+	/**
+	 * @brief	Set the number of samples for the SmartSensor to collect
+	 *			before issuing an interrupt
+	 *
+	 * @param[in]	thresh - Number of samples (1-255) to collect before interrupt
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS set_fifo_thresh(int thresh);
+
+	/**
+	 * @brief	Get the number of samples the SmartSensor will collect
+	 *			before issuing an interrupt
+	 *
+	 * @param[out]	thresh - Number of samples (1-255) collected before interrupt
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_fifo_thresh(int *thresh);
+
+	/**
+	 * @brief		Pass external sensor data to sensor hub
+	 *
+	 * @param[in]	num_samples in tx_buf
+	 * @param[in]	tx_buf - Host sample data to send sensor hub
+	 * @param[in]	tx_buf_sz - Number of bytes of tx_buf
+	 * @param[out]	nb_written - Number of samples to sensor hub's input FIFO
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS feed_to_input_fifo(uint8_t *tx_buf, int tx_buf_sz, int *nb_written);
+
+	/**
+	 * @brief	Get the number of sambes in Sensor FIFO
+	 *
+	 * @param[in]	sensor_id - Sensor id to read FIFO size
+	 * @param[out]	fifo_size - Sensor's FIFO size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_num_samples_in_sensor_fifo(uint8_t sensor_id, int *fifo_size);
+
+	/**
+	 * @brief		Get the total number of bytes in the Input FIFO
+	 *
+	 * @param[out]	fifo_size - Input FIFO size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_num_bytes_in_input_fifo(int *fifo_size);
+
+	/**
+	 * @brief	Get the total number of samples the Sensor's FIFO can hold
+	 *
+	 * @param[in]	sensor_id - Sensor id to read FIFO size
+	 * @param[out]	fifo_size - Sensor's FIFO size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_sensor_fifo_size(uint8_t sensor_id, int *fifo_size);
+
+	/**
+	 * @brief	Get the total number of samples the input FIFO can hold
+	 *
+	 * @param[out]	fifo_size - Input FIFO size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_input_fifo_size(int *fifo_size);
+
+	/**
+	 * @brief		Get the number of bytes per sample of a sensor
+	 *
+	 * @param[in]	sensor_id - Sensor id to read sample size
+	 * @param[out]	sample_size - Sensor's sample size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_sensor_sample_size(uint8_t sensor_id, uint8_t *sample_size);
+	
+	/**
+	 * @brief		send raw string to I2C
+	 *
+	 * @param[in]	*rawdata - Raw data string, after slave address
+	 * @param[out]	rawdata_sz - Raw data size
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS send_raw(uint8_t *rawdata, int rawdata_sz);
+	
+	/**
+	 * @brief	Check that the SmartSensor is connected
+	 */
+	SS_STATUS ss_comm_check();
+
+	/**
+	 * @brief       Set if GPIO or CMD is used to enter bootloader and App
+	 *                      before issuing an interrupt
+	 *
+	 * param[in]    mode
+	 *                              - 0: use command to enter bootloader mode
+	 *                              - 1: use EBL GPIO to enter bootloader mode
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS set_ebl_mode(uint8_t mode);
+
+	/**
+	 * @brief       Get ebl_mode value
+	 *
+	 * @return ebl_mode value
+	 */
+	int get_ebl_mode();
+
+	SS_STATUS stay_in_bootloader();
+	SS_STATUS exit_from_bootloader();
+
+	void enable_irq();
+	void disable_irq();
+
+	void mfio_selftest();
+	bool reset_mfio_irq();
+
+	void ss_execute_once();
+	void ss_clear_interrupt_flag();
+
+private:
+
+	/* PRIVATE VARIABLES */
+	I2C *m_i2cBus;
+	SPI *m_spiBus;
+	DigitalInOut mfio_pin;
+	DigitalInOut reset_pin;
+	InterruptIn irq_pin;
+
+    char fw_version[128];
+    char algo_version[128];
+    const char* plat_name;
+
+	bool in_bootldr;
+	bool sc_en;
+	int data_type;
+
+	uint8_t ebl_mode; /* 0: Command bootloader, 1: No command, trigger GPIO */
+
+	int sensor_enabled_mode[SS_MAX_SUPPORTED_SENSOR_NUM];
+	int algo_enabled_mode[SS_MAX_SUPPORTED_ALGO_NUM];
+	ss_data_req* sensor_data_reqs[SS_MAX_SUPPORTED_SENSOR_NUM];
+	ss_data_req* algo_data_reqs[SS_MAX_SUPPORTED_ALGO_NUM];
+
+    /* PRIVATE METHODS */
+    SS_STATUS write_cmd_small(uint8_t *cmd_bytes, int cmd_bytes_len,
+                            uint8_t *data, int data_len,
+                            int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+    SS_STATUS write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
+                            uint8_t *data, int data_len,
+                            int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+    SS_STATUS write_cmd_large(uint8_t *cmd_bytes, int cmd_bytes_len,
+                            uint8_t *data, int data_len,
+                            int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+	void cfg_mfio(PinDirection);
+
+	void irq_handler();
+	volatile bool m_irq_received_;
+
+
+	void irq_handler_selftest();
+	volatile bool mfio_int_happened;
+
+	SS_STATUS read_fifo_data(int num_samples, int sample_size, uint8_t* databuf, int databuf_sz);
+	SS_STATUS num_avail_samples(int* num_samples);
+	SS_STATUS get_log_len(int *log_len);
+	SS_STATUS read_ss_log(int num_bytes, uint8_t *log_buf, int log_buf_sz);
+	void fifo_sample_size(int data_type, int* sample_size);
+
+//	EventStats irq_evt;
+};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Kconfig	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,165 @@
+mainmenu "MAXIM MAX326XXX mBED EVKit platform configuration"
+
+config CONFIG_NAME
+	string "Config name"
+
+menu "Platform setup"
+choice
+	prompt "Select mBED platform"
+
+config PLATFORM_MAX32600MBED
+	bool "MAX32600MBED"
+	help
+		MAX32600MBED mBED platform.
+
+config PLATFORM_MAX32625MBED
+	bool "MAX32625MBED"
+	help
+		MAX32625MBED mBED platform.
+
+config PLATFORM_MAX32630FTHR
+	bool "MAX32630FTHR"
+	help
+		MAX32630FTHR feather wing mBED platform.
+
+config PLATFORM_MAX32625PICO
+	bool "MAX32625PICO"
+	help
+		MAX32625PICO mBED platform.
+
+endchoice
+
+config MAXIM_PLATFORM_NAME
+	string "Enter MAXIM platform name"
+	default "unknown"
+
+endmenu
+
+menu "PPG Sensor setup"
+config ENABLE_PPG
+	bool "Enable PPG sensor"
+choice
+	prompt "Select PPG sensor"
+	depends on ENABLE_PPG
+
+config PPG_MAX3011X
+	bool "MAX30110/MAX30111 PPG sensor"
+
+config PPG_MAX8614X
+	bool "MAX86140/MAX86141 PPG sensor"
+
+endchoice
+endmenu
+
+menu "ECG Sensor setup"
+config ENABLE_ECG
+	bool "Enable ECG sensor"
+choice
+	prompt "Select ECG sensor"
+	depends on ENABLE_ECG
+
+config CONFIG_ECG_MAX30001
+	bool "MAX30001 ECG sensor"
+endchoice
+endmenu
+
+menu "Temperature Sensor setup"
+config ENABLE_TP
+	bool "Enable TP sensor"
+choice
+	prompt "Select TP sensor"
+	depends on ENABLE_TP
+
+config CONFIG_TP_MAX30205
+	bool "MAX30205 Temp sensor"
+endchoice
+endmenu
+
+menu "Pressure Sensor setup"
+config ENABLE_BMP280
+	bool "Enable BMP 280"
+endmenu
+
+menu "Flash Device Setup"
+config ENABLE_MX25U
+	bool "Enable MX25U NOR FLASH"
+endmenu
+
+
+menu "Accelerometer setup"
+config ENABLE_ACCEL
+	bool "Enable Accelerometer"
+choice
+	prompt "Select Accelerometer"
+	depends on ENABLE_ACCEL
+
+config ACCEL_BMI160
+	bool "BMI160 accelerometer"
+
+config ACCEL_BMA280
+	bool "BMA280 accelerometer"
+
+config ACCEL_LIS2DH
+	bool "LIS2DH accelerometer"
+
+endchoice
+endmenu
+
+menu "Display setup"
+config ENABLE_DISPLAY
+	bool "Enable Display"
+choice
+	prompt "Select Display"
+	depends on ENABLE_DISPLAY
+
+config OLED_ADAFRUIT_SSD1306
+	bool "Adafruit_SSD1306 OLED"
+
+config LCD_LS013B7DH03
+	bool "Sharp LS013B7DH03 LCD"
+
+endchoice
+endmenu
+
+menu "TestComm Setup"
+config ENABLE_TESTCOMM
+	bool "Enable TestComm"
+	depends on ENABLE_ECG
+	depends on ENABLE_TP
+	depends on ENABLE_BMP280
+	depends on ENABLE_MX25U
+	depends on ACCEL_BMI160
+	default n
+endmenu
+
+menu "WHRM setup"
+config ENABLE_WHRM
+	bool "Enable WHRM"
+endmenu
+
+menu "Memory debug setup"
+config ENABLE_MEMORY_DEBUG
+	bool "Enable memory debug"
+if ENABLE_MEMORY_DEBUG
+
+config MBED_MEM_TRACING_ENABLED
+	bool "mbed memory tracing"
+	help
+		mbed Runtime memory tracing
+		https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/runtime_mem_trace/
+
+config MBED_HEAP_STATS_ENABLED
+	bool "mbed heap stats"
+	help
+		Runtime heap statistics
+		https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/runtime_stats/#heap-statistics
+
+config MBED_STACK_STATS_ENABLED
+	bool "mbed stack stats"
+	help
+		Runtime stack statistics
+		https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/runtime_stats/#stack-statistics
+
+
+endif
+endmenu
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,439 @@
+PROJECT_PATH=$(realpath ./)
+PROJECT_NAME=$(shell basename $(realpath ./))
+PROJECT_BUILD_PATH=$(realpath BUILD/)
+PROJECT_TOOLS_PATH=$(realpath tools/)
+PROJECT_CONFIGS_PATH=$(realpath configs/)
+PROJECT_TOOLCHAIN=GCC_ARM
+PROJECT_SCM_BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
+PROJECT_SCM_HASH=$(shell git rev-parse HEAD)
+-include .config
+
+STACK_SIZE ?= 0x30000
+HEAP_SIZE ?= 0x30000
+
+$(info STACK_SIZE: ${STACK_SIZE}, HEAP_SIZE: ${HEAP_SIZE})
+
+ALGO_DIR = Algorithms/
+DRIVERS_DIR = Drivers/
+INTERFACES_DIR = Interfaces/
+SCOMMS_DIR = $(INTERFACES_DIR)/SensorComm/
+DSINT_DIR = $(INTERFACES_DIR)/DeviceStudio/
+SSCOMMS_DIR = $(SCOMMS_DIR)/SmartSensorComm/
+SSINT_DIR = $(INTERFACES_DIR)/SmartSensor/
+PLATFORMS_DIR = Platforms/
+
+EXTERNAL_SOURCES += mbed-os
+EXTERNAL_SOURCES += $(DRIVERS_DIR)USBDevice
+PROJECT_SOURCES += $(wildcard *.cpp)
+PROJECT_SOURCES += $(wildcard *.h)
+PROJECT_SOURCES += $(SCOMMS_DIR)/SensorComm
+PROJECT_SOURCES += $(DSINT_DIR)
+PROJECT_SOURCES += $(DRIVERS_DIR)MaximSensor
+PROJECT_SOURCES += Utilities
+
+## BEGIN PLATFORM ##
+ifeq ($(CONFIG_PLATFORM_MAX32600MBED), y)
+CONFIG_FLAGS += PLATFORM_MAX32600MBED
+CONFIG_PLATFORM_NAME=MAX32600MBED
+
+else ifeq ($(CONFIG_PLATFORM_MAX32625MBED), y)
+CONFIG_FLAGS += PLATFORM_MAX32625MBED
+CONFIG_PLATFORM_NAME=MAX32625MBED
+PROJECT_SOURCES += $(PLATFORMS_DIR)max32625mbed
+
+else ifeq ($(CONFIG_PLATFORM_MAX32630FTHR), y)
+CONFIG_FLAGS += PLATFORM_MAX32630FTHR
+CONFIG_PLATFORM_NAME=MAX32630FTHR
+EXTERNAL_SOURCES += $(PLATFORMS_DIR)max32630fthr
+
+else ifeq ($(CONFIG_PLATFORM_MAX32630HSP), y)
+CONFIG_FLAGS += PLATFORM_MAX32630HSP
+CONFIG_PLATFORM_NAME=MAX32630FTHR
+EXTERNAL_SOURCES += $(PLATFORMS_DIR)max32630hsp
+PROJECT_SOURCES += $(PLATFORMS_DIR)max32630hsp
+
+else ifeq ($(CONFIG_PLATFORM_MAX32625PICO), y)
+CONFIG_FLAGS += PLATFORM_MAX32625PICO
+CONFIG_PLATFORM_NAME=MAX32625PICO
+
+else
+$(warning NO MAXIM PLATFORM SELECTED)
+endif
+CONFIG_FLAGS += MAXIM_PLATFORM_NAME=\"$(CONFIG_MAXIM_PLATFORM_NAME)\"
+
+
+ifeq ($(CONFIG_ENABLE_LED_STATUS), y)
+CONFIG_FLAGS += ENABLE_LED_STATUS
+endif
+
+ifeq ($(CONFIG_ENABLE_EVENTSTATS), y)
+CONFIG_FLAGS += ENABLE_EVENTSTATS
+endif
+## END PLATFORM ##
+
+## BEGIN PPG SENSOR ##
+ifeq ($(CONFIG_ENABLE_PPG), y)
+CONFIG_FLAGS += ENABLE_PPG
+PROJECT_SOURCES += $(SCOMMS_DIR)PpgComm/
+endif
+
+ifeq ($(CONFIG_PPG_MAX3011X), y)
+CONFIG_FLAGS += PPG_MAX3011X
+PROJECT_SOURCES += $(DRIVERS_DIR)MAX3011X
+endif
+
+ifeq ($(CONFIG_PPG_MAX8614X), y)
+CONFIG_FLAGS += PPG_MAX8614X
+PROJECT_SOURCES += $(DRIVERS_DIR)MAX8614X
+endif
+## END PPG SENSOR ##
+
+## BEGIN ECG SENSOR ##
+ifeq ($(CONFIG_ENABLE_ECG), y)
+CONFIG_FLAGS += ENABLE_ECG
+PROJECT_SOURCES += $(SCOMMS_DIR)EcgComm/
+endif
+
+ifeq ($(CONFIG_ECG_MAX30001), y)
+CONFIG_FLAGS += ECG_MAX30001
+PROJECT_SOURCES += $(DRIVERS_DIR)MAX30001
+endif
+## END PPG SENSOR ##
+
+## BEGIN TEMP SENSOR
+ifeq ($(CONFIG_ENABLE_TP), y)
+CONFIG_FLAGS += ENABLE_TP
+PROJECT_SOURCES += $(SCOMMS_DIR)TempComm/
+endif
+
+ifeq ($(CONFIG_TP_MAX30205), y)
+CONFIG_FLAGS += TP_MAX30205
+PROJECT_SOURCES += $(DRIVERS_DIR)MAX30205
+endif
+## END TEMP SENSOR
+
+## BEGIN PRESSURE SENSOR
+ifeq ($(CONFIG_ENABLE_BMP280), y)
+CONFIG_FLAGS +=ENABLE_BMP280
+PROJECT_SOURCES += $(DRIVERS_DIR)BMP280
+endif
+## END PRESSURE SENSOR
+
+## BEGIN FLASH CONFIGURATION
+ifeq ($(CONFIG_ENABLE_MX25U), y)
+CONFIG_FLAGS +=ENABLE_MX25U
+PROJECT_SOURCES += $(DRIVERS_DIR)SPIBlockDevice
+$(info flash driver is included)
+endif
+## END FLASH CONFIGURATION
+
+## BEGIN USBMSD CONFIGURATION
+ifeq ($(CONFIG_ENABLE_USBMSD), y)
+CONFIG_FLAGS +=ENABLE_USBMSD
+PROJECT_SOURCES += $(DRIVERS_DIR)USBMSD_BD
+$(info USBMSD feature enabled)
+endif
+## END USBMSD CONFIGURATION
+
+## BEGIN ACCEL ##
+ifeq ($(CONFIG_ENABLE_ACCEL), y)
+CONFIG_FLAGS += ENABLE_ACCEL
+PROJECT_SOURCES += $(DRIVERS_DIR)BMI160
+endif
+
+ifeq ($(CONFIG_ACCEL_BMA160), y)
+CONFIG_FLAGS += ACCEL_BMA160
+PROJECT_SOURCES += $(DRIVERS_DIR)BMA160
+endif
+
+ifeq ($(CONFIG_ACCEL_BMA280), y)
+CONFIG_FLAGS += ACCEL_BMA280
+PROJECT_SOURCES += $(DRIVERS_DIR)BMA280
+endif
+
+ifeq ($(CONFIG_ACCEL_LIS2DH), y)
+CONFIG_FLAGS += ACCEL_LIS2DH
+PROJECT_SOURCES += $(DRIVERS_DIR)LIS2DH
+endif
+## END ACCEL ##
+
+## BEGIN SMARTSENSOR ##
+ifeq ($(CONFIG_ENABLE_SMARTSENSOR), y)
+CONFIG_FLAGS += ENABLE_SMARTSENSOR
+PROJECT_SOURCES += $(SSINT_DIR)
+endif
+
+ifeq ($(CONFIG_ENABLE_SS_BOOTLOADER), y)
+CONFIG_FLAGS += ENABLE_SS_BOOTLOADER
+PROJECT_SOURCES += $(SSCOMMS_DIR)SSBootloader
+endif
+
+ifeq ($(CONFIG_ENABLE_SS_MAX30101), y)
+CONFIG_FLAGS += ENABLE_SS_MAX30101
+PROJECT_SOURCES += $(SSCOMMS_DIR)SSMAX30101
+endif
+
+ifeq ($(CONFIG_ENABLE_SS_MAX8614X), y)
+CONFIG_FLAGS += ENABLE_SS_MAX8614X
+PROJECT_SOURCES += $(SSCOMMS_DIR)SSMAX8614X
+endif
+## END SMARTSENSOR ##
+
+## BEGIN SMARTSENSOR ##
+ifeq ($(CONFIG_BOOTLOADER_USES_MFIO), y)
+CONFIG_FLAGS += BOOTLOADER_USES_MFIO
+endif
+
+## BEGIN DISPLAY ##
+ifeq ($(CONFIG_ENABLE_DISPLAY), y)
+CONFIG_FLASG += ENABLE_DISPLAY
+endif
+
+ifeq ($(CONFIG_OLED_ADAFRUIT_SSD1306), y)
+CONFIG_FLAGS += OLED_ADAFRUIT_SSD1306
+EXTERNAL_SOURCES += $(DRIVERS_DIR)Adafruit_FeatherOLED
+endif
+ifeq ($(CONFIG_LCD_WATCHINTERFACE), y)
+CONFIG_FLAGS += LCD_WATCHINTERFACE
+endif
+ifeq ($(CONFIG_LCD_LS013B7DH03), y)
+CONFIG_FLAGS += LCD_LS013B7DH03
+PROJECT_SOURCES += $(DRIVERS_DIR)LS013B7DH03
+endif
+## END DISPLAY ##
+
+## BEGIN ALGORITHMS ##
+#ifeq ($(CONFIG_ENABLE_WHRM), y)
+#CONFIG_FLAGS += ENABLE_WHRM
+#PROJECT_SOURCES += $(ALGO_DIR)WHRM
+#endif
+
+ifeq ($(CONFIG_ENABLE_WHRM_AND_SPO2), y)
+CONFIG_FLAGS += ENABLE_WHRM_AND_SPO2
+#PROJECT_SOURCES += $(ALGO_DIR)WHRM
+endif
+
+#ifeq ($(CONFIG_ENABLE_BPT), y)
+#CONFIG_FLAGS += ENABLE_BPT
+#PROJECT_SOURCES += $(ALGO_DIR)WHRM
+#endif
+## END ALGORITHMS ##
+
+## SPO2 ##
+ifeq ($(CONFIG_ENABLE_SPO2), y)
+CONFIG_FLAGS += ENABLE_SPO2
+endif
+## END ##
+
+
+## BEGIN BLE ##
+ifeq ($(CONFIG_ENABLE_BLE), y)
+CONFIG_FLAGS += ENABLE_BLE
+PROJECT_SOURCES += $(DRIVERS_DIR)BLE_ICARUS
+
+#ifeq ("$(CONFIG_BLE_ADV_NAME)", "")
+#$(error BLE Avertisement name must be specified with CONFIG_BLE_ADV_NAME)
+#else
+#CONFIG_FLAGS += BLE_ADV_NAME=\"$(CONFIG_BLE_ADV_NAME)\"
+#endif
+
+ifeq ($(CONFIG_USE_BLE_TICKER_TO_CHECK_TRANSFER), y)
+CONFIG_FLAGS += USE_BLE_TICKER_TO_CHECK_TRANSFER
+endif
+
+endif
+## END BLE ##
+
+## BEGIN DATA STREAMING DEBUG ##
+ifeq ($(CONFIG_ASCII_COMM), y)
+CONFIG_FLAGS += ASCII_COMM
+endif
+
+ifeq ($(CONFIG_ENABLE_BLETEST_COMM), y)
+CONFIG_FLAGS += ENABLE_BLETEST_COMM
+PROJECT_SOURCES += $(SCOMMS_DIR)BleTestComm
+endif
+
+ifeq ($(CONFIG_ENABLE_SS_GENERICCMDCOMM), y)
+CONFIG_FLAGS += ENABLE_SS_GENERICMDCOMM
+PROJECT_SOURCES += $(SSCOMMS_DIR)SSGenericCmd
+endif
+## END DATA STREAMING DEBUG ##
+
+## BEGIN TEST FIRMWARE
+ifeq ($(CONFIG_ENABLE_TESTCOMM), y)
+CONFIG_FLAGS += ENABLE_TESTCOMM
+PROJECT_SOURCES += $(SCOMMS_DIR)TestComm
+endif
+# END TEST FIRMWARE
+
+## BEGIN MEMORY DEBUG ##
+ifeq ($(CONFIG_ENABLE_MEMORY_DEBUG), y)
+CONFIG_FLAGS += ENABLE_MEMORY_DEBUG
+endif
+
+ifeq ($(CONFIG_MBED_HEAP_STATS_ENABLED), y)
+CONFIG_FLAGS += MBED_HEAP_STATS_ENABLED
+endif
+
+ifeq ($(CONFIG_MBED_MEM_TRACING_ENABLED), y)
+CONFIG_FLAGS += MBED_MEM_TRACING_ENABLED
+endif
+
+ifeq ($(CONFIG_MBED_STACK_STATS_ENABLED), y)
+CONFIG_FLAGS += MBED_STACK_STATS_ENABLED
+endif
+## END MEMORY DEBUG ##
+
+
+## BEGIN DEBUG MSGS TOGGLE
+ifeq ($(CONFIG_SHOW_DEBUG_MSGS), y)
+CONFIG_FLAGS += SHOW_DEBUG_MSGS
+endif
+ifeq ($(CONFIG_SHOW_INFO_MSGS), y)
+CONFIG_FLAGS += SHOW_INFO_MSGS
+endif
+ifeq ($(CONFIG_SHOW_I2C_DEBUG_MESSAGES), y)
+CONFIG_FLAGS += SHOW_I2C_DEBUG_MESSAGES
+endif
+
+ifeq ($(V), 1)
+BUILD_VERBOSE = -v
+endif
+
+SRC_ARGS += $(addprefix --source $(PROJECT_PATH)/, $(EXTERNAL_SOURCES))
+SRC_ARGS += $(addprefix --source $(PROJECT_PATH)/, $(PROJECT_SOURCES))
+CFG_ARGS = $(addprefix -D, $(CONFIG_FLAGS))
+
+###$(info SELECTED_CONFIG=$(CONFIG_CONFIG_NAME))
+$(info CONFIG_PLATFORM_NAME=$(CONFIG_PLATFORM_NAME) CONFIG_MAXIM_PLATFORM_NAME=$(CONFIG_MAXIM_PLATFORM_NAME) CONFIG_FLAGS=$(CONFIG_FLAGS))
+$(info PROJECT_SOURCES=$(PROJECT_SOURCES))
+$(info EXTERNAL_SOURCES=$(EXTERNAL_SOURCES))
+$(info PROJECT_SCM=$(PROJECT_SCM_BRANCH) ($(PROJECT_SCM_HASH)))
+
+## BEGIN MAKEFILE RULES ##
+all: pre_build
+###	@if [ -f $(CONFIG_CONFIG_NAME) ]; then \
+###		printf "NO CONFIG SELECTED!\n"; \
+###		exit 1; \
+###	fi;
+	@if [ ! -f .checkout ]; then \
+		$(MAKE) checkout ; \
+	fi;
+	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) -D__STACK_SIZE=$(STACK_SIZE) -D__HEAP_SIZE=$(HEAP_SIZE) $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS)
+debug_build:
+	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) -D__STACK_SIZE=$(STACK_SIZE) -D__HEAP_SIZE=$(HEAP_SIZE) $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS) --profile $(PROJECT_PATH)/mbed-os/tools/profiles/debug.json
+
+clean_build:
+	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) -D__STACK_SIZE=$(STACK_SIZE) -D__HEAP_SIZE=$(HEAP_SIZE) -c $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS)
+
+werror_build:
+	mbed compile -t $(PROJECT_TOOLCHAIN) -m $(CONFIG_PLATFORM_NAME) -D__STACK_SIZE=$(STACK_SIZE) -D__HEAP_SIZE=$(HEAP_SIZE) -c $(BUILD_VERBOSE) $(CFG_ARGS) $(SRC_ARGS) --profile $(PROJECT_PATH)/werror_build_profile.json
+
+clean:
+	rm -rf $(PROJECT_BUILD_PATH)
+
+menuconfig:
+	${PROJECT_TOOLS_PATH}/windows_kconfig/kconfig-mconf.exe Kconfig
+
+run:
+	python ${PROJECT_TOOLS_PATH}/mbed_run.py ${PROJECT_BUILD_PATH}/${CONFIG_PLATFORM_NAME}/$(PROJECT_TOOLCHAIN)/mbed-os.bin
+
+co: checkout
+
+checkout:
+	@echo "Downloading libraries"
+	mbed deploy
+	$(MAKE) apply_mbedos_patches
+	@touch .$@
+
+applypatches:
+	@echo "Applying patches"
+#	cd mbed-os; \
+#	git am ../patches/0001-porting-MAX32625PICO-to-mbed-os-5.patch
+#	cd USBDevice; \
+#	hg import --no-commit --force ../patches/USBDevice.patch
+
+apply_mbedos_patches:
+	@echo "Applying mbed-os patches"
+	@cd ./mbed_os_patches; \
+	for i in *.patch ; do \
+		[ -f "$$i" ] || break ; \
+		echo "$$i"; \
+		cp "$$i" ../mbed-os; \
+		cd ../mbed-os; \
+		git apply "$$i"; \
+		rm -f "$$i"; \
+		cd ..; \
+		cd ./mbed_os_patches; \
+	done; \
+	
+selectconfig.%:
+	@if [ -f $(PROJECT_CONFIGS_PATH)/$(word 2,$(subst ., ,$@)).config ]; then \
+		cp $(PROJECT_CONFIGS_PATH)/$(word 2,$(subst ., ,$@)).config $(PROJECT_PATH)/.config; \
+		printf "\n$(word 2,$(subst ., ,$@)).config selected\n"; \
+	else \
+		printf "\nConfig [$(word 2,$(subst ., ,$@))] is not found!\n"; \
+		printf "Available configs are:\n\n"; \
+		ls $(PROJECT_CONFIGS_PATH) | cut -d "." -f 1; \
+		printf "\n"; \
+	fi;
+
+saveconfig:
+###	cp $(PROJECT_PATH)/.config $(PROJECT_CONFIGS_PATH)/$(CONFIG_CONFIG_NAME).config
+
+staticcheck:
+	@printf "\n\nRATS-2.4 Staic Analyzer\n"
+	@printf "=========== BEGIN =============\n"
+	${PROJECT_TOOLS_PATH}/Rats-2.4/rats.exe --quiet -w 3 --db ${PROJECT_TOOLS_PATH}/Rats-2.4/rats-c.xml $(PROJECT_SOURCES)
+	@printf "============ END ==============\n"
+	@printf "\n\nCppcheck-1.78 Static Analyzer\n"
+	@printf "=========== BEGIN =============\n"
+	${PROJECT_TOOLS_PATH}/Cppcheck-1.78/cppcheck.exe -q --enable=all --force $(PROJECT_SOURCES)
+	@printf "============ END ==============\n"
+	@printf "\n\nVisualCodeGrepper-2.1.0 Static Analyzer\n"
+	@printf "=========== BEGIN =============\n"
+	@cd ${PROJECT_TOOLS_PATH}/VisualCodeGrepper-2.1.0; \
+	for src in $(PROJECT_SOURCES) ; do \
+		${PROJECT_TOOLS_PATH}/VisualCodeGrepper-2.1.0/VisualCodeGrepper.exe -c -t $(PROJECT_PATH)/$$src -r $(PROJECT_PATH)/.tmp_VCG_step.txt ; \
+		echo "" >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
+		echo "$$src:" >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
+		cat $(PROJECT_PATH)/.tmp_VCG_step.txt >> $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
+		rm -rf $(PROJECT_PATH)/.tmp_VCG_step.txt ;\
+	done ; \
+	cat $(PROJECT_PATH)/.tmp_VCG_result.txt ; \
+	rm -rf $(PROJECT_PATH)/.tmp_VCG_result.txt
+	@printf "============ END ==============\n"
+
+doxygen:
+	mkdir -p $(PROJECT_BUILD_PATH)
+	export PROJECT_SOURCES="$(PROJECT_SOURCES)"; \
+	export PROJECT_SCM_HASH="$(PROJECT_SCM_HASH)"; \
+	doxygen doxygen.conf
+	start $(PROJECT_BUILD_PATH)/doc/html/index.html
+
+astyle:
+	@printf "=========== BEGIN ASTYLE =============\n"
+	${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/bin/AStyle.exe --options=${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/file/custom.ini "*.cpp";
+	${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/bin/AStyle.exe --options=${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/file/custom.ini "*.h";
+	@for src in $(PROJECT_SOURCES); do \
+		if [[ -d $$src ]]; then \
+			${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/bin/AStyle.exe --options=${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/file/custom.ini --recursive "$$src/*.cpp" ; \
+			${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/bin/AStyle.exe --options=${PROJECT_TOOLS_PATH}/AStyle_2.06_windows/file/custom.ini --recursive "$$src/*.h" ; \
+		fi; \
+	done;
+	@printf "============ END ASTYLE ==============\n"
+	
+help:
+	start https://confluence.maxim-ic.com/x/VSAkB
+	
+create_flags:
+	python ./scripts/py/mbed_convertconfigtoflags.py
+
+pre_build:
+	@echo "#ifndef __BUILD_VERSION_H__" > build_version.h
+	@echo "#define __BUILD_VERSION_H__" >> build_version.h
+	@echo "#define BUILD_SOURCE_BRANCH \"$(PROJECT_SCM_BRANCH)\"" >> build_version.h
+	@echo "#define BUILD_SOURCE_HASH \"$(PROJECT_SCM_HASH)\"" >> build_version.h
+	@echo "#endif" >> build_version.h
+## END MAKEFILE RULES ##
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Platforms/max32630fthr.lib	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/MaximIntegrated/code/max32630fthr/#9eb360063579
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Platforms/max32630hsp/MAX20303/MAX20303.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,409 @@
+/*******************************************************************************
+ * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+
+#include "MAX20303.h"
+
+
+
+//******************************************************************************
+MAX20303::MAX20303(I2C *i2c):
+	m_i2c(i2c), m_writeAddress(MAX20303_SLAVE_WR_ADDR),
+	m_readAddress(MAX20303_SLAVE_RD_ADDR)
+{
+}
+
+
+//******************************************************************************
+MAX20303::~MAX20303(void)
+{
+  //empty block
+}
+
+
+//******************************************************************************
+int MAX20303::LDO1Config()
+{
+	int32_t ret = 0;
+//	uint8_t val;
+//	ret |= writeReg(MAX20303::REG_AP_CMDOUT, 0x40);
+//	ret |= writeReg(MAX20303::REG_AP_DATOUT0, 0x05);
+//	ret |= writeReg(MAX20303::REG_AP_DATOUT1, 0x34);
+//
+//	readReg(MAX20303::REG_AP_CMDOUT, val);
+//	readReg(MAX20303::REG_AP_DATOUT0, val);
+//	readReg(MAX20303::REG_AP_DATOUT1, val);
+	appcmdoutvalue_ = 0x40;
+	appdatainoutbuffer_[0] = 0x05;
+	appdatainoutbuffer_[1] = 0x34;
+	AppWrite(2);
+
+	return ret;
+}
+
+//******************************************************************************
+int MAX20303::LDO2Config()
+{
+	int32_t ret = 0;
+//	uint8_t val;
+	appcmdoutvalue_ = 0x42;
+	appdatainoutbuffer_[0] = 0x01;
+	appdatainoutbuffer_[1] = 0x15;     // 0.9V + (0.1V * number)   =  3V
+	AppWrite(2);
+
+	return ret;
+}
+
+
+//******************************************************************************
+int MAX20303::writeReg(registers_t reg, uint8_t value)
+{
+	int ret;
+
+	char cmdData[2] = {reg, value};
+
+	ret = m_i2c->write(m_writeAddress, cmdData, sizeof(cmdData));
+	//printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
+
+	if (ret != 0)
+		return MAX20303_ERROR;
+
+	return MAX20303_NO_ERROR;
+}
+
+
+//******************************************************************************
+int MAX20303::readReg(registers_t reg, uint8_t &value)
+{
+	int ret;
+
+	char data = reg;
+
+	ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
+	if (ret != 0) {
+		printf("%s - failed - ret: %d\n", __func__, ret);
+		return MAX20303_ERROR;
+	}
+
+	ret = m_i2c->read(m_readAddress, &data, sizeof(data));
+	if (ret != 0) {
+		printf("%s - failed - ret: %d\n", __func__, ret);
+		return MAX20303_ERROR;
+	}
+
+	value = data;
+	printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (unsigned int)reg,  (unsigned int)value, ret);
+	return MAX20303_NO_ERROR;
+}
+
+//******************************************************************************
+int MAX20303::readRegMulti(registers_t reg, uint8_t *value, uint8_t len){
+	int ret;
+	char data = reg;
+
+	ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
+	if (ret != 0) {
+		printf("%s - failed - ret: %d\n", __func__, ret);
+		return MAX20303_ERROR;
+	}
+
+	ret = m_i2c->read(m_readAddress, (char *)value, len);
+	if (ret != 0) {
+		printf("%s - failed - ret: %d\n", __func__, ret);
+		return MAX20303_ERROR;
+	}
+
+	printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (unsigned int)reg, (unsigned int)value, ret);
+	return MAX20303_NO_ERROR;
+}
+
+//******************************************************************************
+int MAX20303::writeRegMulti(registers_t reg, uint8_t *value, uint8_t len){
+	int32_t ret;
+	i2cbuffer_[0] = reg;
+	memcpy(&i2cbuffer_[1], value, len);
+
+	ret = m_i2c->write(m_writeAddress, (char *)i2cbuffer_, (len+1));
+	//printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
+
+	if (ret != 0)
+		return MAX20303_ERROR;
+
+	return MAX20303_NO_ERROR;
+}
+//******************************************************************************
+int MAX20303::mv2bits(int mV)
+{
+    int regBits;
+
+    if (( MAX20303_LDO_MIN_MV <= mV) && (mV <= MAX20303_LDO_MAX_MV)) {
+        regBits = (mV -  MAX20303_LDO_MIN_MV) /  MAX20303_LDO_STEP_MV;
+    } else {
+        return -1;
+    }
+
+    return regBits;
+}
+//******************************************************************************
+int MAX20303::PowerOffthePMIC(){
+	int ret;
+	appdatainoutbuffer_[0] = 0xB2;
+	appcmdoutvalue_ = 0x80;
+	ret = AppWrite(1);
+
+	if(appcmdoutvalue_ != 0x80){
+		ret |= MAX20303_ERROR;
+	}
+
+	return ret;
+}
+//******************************************************************************
+int MAX20303::PowerOffDelaythePMIC(){
+	int ret;
+	appdatainoutbuffer_[0] = 0xB2;
+	appcmdoutvalue_ = 0x84;
+	ret = AppWrite(1);
+
+	if(appcmdoutvalue_ != 0x80){
+		ret |= MAX20303_ERROR;
+	}
+
+	return ret;
+}
+
+//******************************************************************************
+int MAX20303::SoftResetthePMIC(){
+	int ret;
+	appdatainoutbuffer_[0] = 0xB3;
+	appcmdoutvalue_ = 0x81;
+	ret = AppWrite(1);
+
+	if(appcmdoutvalue_ != 0x81){
+		ret |= MAX20303_ERROR;
+	}
+
+	return ret;
+}
+//******************************************************************************
+int MAX20303::HardResetthePMIC(){
+	int ret;
+	appdatainoutbuffer_[0] = 0xB4;
+	appcmdoutvalue_ = 0x82;
+	ret = AppWrite(1);
+
+	if(appcmdoutvalue_ != 0x82){
+		ret |= MAX20303_ERROR;
+	}
+
+	return ret;
+}
+
+//******************************************************************************
+int MAX20303::AppWrite(uint8_t dataoutlen){
+	int ret;
+
+	ret = writeRegMulti(MAX20303::REG_AP_DATOUT0, appdatainoutbuffer_, dataoutlen);
+	ret |= writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
+	wait_ms(10);
+	ret |= readReg(MAX20303::REG_AP_RESPONSE, appcmdoutvalue_);
+
+	if(ret != 0)
+		return MAX20303_ERROR;
+
+	return MAX20303_NO_ERROR;
+}
+
+
+//******************************************************************************
+int MAX20303::AppRead(uint8_t datainlen){
+	int ret;
+
+	ret = writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
+	wait_ms(10);
+	ret |= readRegMulti(MAX20303::REG_AP_RESPONSE, i2cbuffer_, datainlen);
+	if(ret != 0)
+		return MAX20303_ERROR;
+
+	return MAX20303_NO_ERROR;
+}
+
+//******************************************************************************
+char MAX20303::CheckPMICHWID(){
+	int ret;
+	uint8_t value = 0x00;
+
+	ret = readReg(MAX20303::REG_HARDWARE_ID, value);
+	if(ret != MAX20303_NO_ERROR)
+		return false;
+
+	if(value == 0x02)
+		return true;
+	else
+		return false;
+}
+
+//******************************************************************************
+int MAX20303::CheckPMICStatusRegisters(unsigned char buf_results[5]){
+	int ret;
+	ret  = readReg(MAX20303::REG_STATUS0, buf_results[0]);
+	ret |= readReg(MAX20303::REG_STATUS1, buf_results[1]);
+	ret |= readReg(MAX20303::REG_STATUS2, buf_results[2]);
+	ret |= readReg(MAX20303::REG_STATUS3, buf_results[3]);
+	ret |= readReg(MAX20303::REG_SYSTEM_ERROR, buf_results[4]);
+	return ret;
+}
+
+//******************************************************************************
+int MAX20303::Max20303_BatteryGauge(unsigned char *batterylevel){
+	int ret;
+	char data[2];
+	//uint8_t value;
+	//printf("m_battery_is_connected is:%d\r\n", m_battery_is_connected);
+	if(!m_battery_is_connected) {
+		*batterylevel = 0;
+		return 0;
+	}
+
+	data[0] = 0x04;
+	ret = m_i2c->write(MAX20303_I2C_ADDR_FUEL_GAUGE, data, 1);
+	if(ret != 0){
+		printf("Max20303_FuelGauge has failed\r\n");
+	}
+
+	ret = m_i2c->read(MAX20303_I2C_ADDR_FUEL_GAUGE | 1, data, 2);
+	if(ret != 0){
+		printf("Max20303_FuelGauge has failed\r\n");
+	}
+	//printf("battery level is:%d\r\n", data[0]);
+	*batterylevel = data[0];
+
+	return 0;
+}
+
+//******************************************************************************
+char MAX20303::Max20303_IsBattery_Connected(){
+	AnalogIn   ain(AIN_5);
+	float adc_value;
+	int ret;
+	char result;
+	// config the mux for the monitor pin
+	appcmdoutvalue_ = 0x50;
+	appdatainoutbuffer_[0] = 0x80;
+	AppWrite(1);
+	// disable the charger
+	appcmdoutvalue_ = 0x1A;
+	appdatainoutbuffer_[0] = 0x02;
+	AppWrite(1);
+	wait_ms(250);
+	// adc measure launch
+	appcmdoutvalue_ = 0x53;
+	appdatainoutbuffer_[0] = 0x09;
+	AppWrite(1);
+	wait_ms(10);
+	ret = readRegMulti(MAX20303::REG_AP_RESPONSE, i2cbuffer_, 5);
+	adc_value = ain.read();
+	if(ret != 0){
+		result = false;
+	} else {
+		if((i2cbuffer_[4] < 0x40) | (adc_value < 0.3)) {
+			result = false;
+		} else {
+			result = true;
+		}
+	}
+	// enable the charger
+	appcmdoutvalue_ = 0x1A;
+	appdatainoutbuffer_[0] = 0x03;
+	AppWrite(1);
+//	for(int i = 1; i < 5; ++i){
+//		printf("reg value at:%d is:%02X\r\n", i, i2cbuffer_[i]);
+//	}
+	m_battery_is_connected = result;
+	return result;
+}
+
+
+//******************************************************************************
+int MAX20303::led0on(char enable) {
+
+	if(enable)
+		return writeReg(REG_LED0_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED0_DIRECT, 0x01);
+}
+
+//******************************************************************************
+int MAX20303::led1on(char enable) {
+	if(enable)
+		return writeReg(REG_LED1_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED1_DIRECT, 0x01);
+}
+
+//******************************************************************************
+int MAX20303::led2on(char enable) {
+	if(enable)
+		return writeReg(REG_LED2_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED2_DIRECT, 0x01);
+}
+
+
+//******************************************************************************
+int MAX20303::BoostEnable(void) {
+	writeReg(REG_AP_DATOUT3, 0x00);	// 00 : 5V
+	writeReg(REG_AP_DATOUT0, 0x01);	// Boost Enabled
+	writeReg(REG_AP_CMDOUT, 0x30);
+	return MAX20303_NO_ERROR;
+}
+
+//******************************************************************************
+int MAX20303::BuckBoostEnable(void)
+{
+	int ret = 0;
+
+	ret |= writeReg( REG_AP_DATOUT0,  0x00);    // Reserved = 0x00
+	ret |= writeReg( REG_AP_DATOUT1,  0x04);    // BBstlSet = 0b'100   Buck Boost Peak current Limit = 200mA
+	ret |= writeReg( REG_AP_DATOUT2,  0x19);    // BBstVSet = 0b'11001  Buck Boost Output Voltage = 5V
+	ret |= writeReg( REG_AP_DATOUT3,  0x01);    // BBstRipRed = 1 Ripple Reduction
+	// BBstAct    = 1 Actively discharged in Hard-Reset or Enable Low
+	// BBstPas    = 1 Passively discharged in Hard-Reset or Enable Low
+	// BBstMd     = 1 Damping Enabled
+	// BBstInd    = 0  Inductance is 4.7uH
+	// BBstEn     = 0b'01 Enabled
+	ret |= writeReg( REG_AP_CMDOUT, 0x70);
+	if (ret != 0)
+		return MAX20303_ERROR;
+
+	return MAX20303_NO_ERROR;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Platforms/max32630hsp/MAX20303/MAX20303.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+#ifndef __MAX20303_H_
+#define __MAX20303_H_
+
+#include "mbed.h"
+
+#define MAX20303_SLAVE_ADDR		(0x50 >> 1)
+#define MAX20303_SLAVE_WR_ADDR		((MAX20303_SLAVE_ADDR << 1))
+#define MAX20303_SLAVE_RD_ADDR		((MAX20303_SLAVE_ADDR << 1) | 1)
+
+
+#define MAX20303_NO_ERROR   0
+#define MAX20303_ERROR      -1
+
+#define MAX20303_I2C_ADDR_FUEL_GAUGE    0x6C
+
+#define MAX20303_LDO_MIN_MV 800
+#define MAX20303_LDO_MAX_MV 3600
+#define MAX20303_LDO_STEP_MV 100
+
+#define MAX20303_OFF_COMMAND 0xB2
+
+class MAX20303
+{
+
+public:
+	/**
+	 * @brief   Register Addresses
+	 * @details Enumerated MAX20303 register addresses
+	 */
+	enum registers_t {
+		REG_HARDWARE_ID		= 0x00,		///< HardwareID Register
+		REG_FIRMWARE_REV	= 0x01,		///< FirmwareID Register
+		//					= 0x02,		///<
+		REG_INT0			= 0x03,		///< Int0 Register
+		REG_INT1			= 0x04,		///< Int1 Register
+		REG_INT2			= 0x05,		///< Int2 Register
+		REG_STATUS0			= 0x06,		///< Status Register 0
+		REG_STATUS1			= 0x07,		///< Status Register 1
+		REG_STATUS2			= 0x08,		///< Status Register 2
+		REG_STATUS3			= 0x09,		///< Status Register 2
+		//					= 0x0A,		///<
+		REG_SYSTEM_ERROR	= 0x0B,		///< SystemError Register
+		REG_INT_MASK0		= 0x0C,		///< IntMask0 Register
+		REG_INT_MASK1		= 0x0D,		///< IntMask1 Register
+		REG_INT_MASK2		= 0x0E,		///< IntMask1 Register
+		REG_AP_DATOUT0		= 0x0F,     ///< APDataOut0 Register
+		REG_AP_DATOUT1		= 0x10,     ///< APDataOut1 Register
+		REG_AP_DATOUT2		= 0x11,     ///< APDataOut2 Register
+		REG_AP_DATOUT3		= 0x12,     ///< APDataOut3 Register
+		REG_AP_DATOUT4		= 0x13,     ///< APDataOut4 Register
+		REG_AP_DATOUT5		= 0x14,     ///< APDataOut5 Register
+		REG_AP_DATOUT6		= 0x15,     ///< APDataOut6 Register
+		REG_AP_CMDOUT		= 0x17,     ///< APCmdOut Register
+		REG_AP_RESPONSE		= 0x18,     ///< APResponse Register
+		REG_AP_DATAIN0		= 0x19,
+		REG_AP_DATAIN1		= 0x1A,
+		REG_AP_DATAIN2		= 0x1B,
+		REG_AP_DATAIN3		= 0x1C,
+		REG_AP_DATAIN4		= 0x1D,
+		REG_AP_DATAIN5		= 0x1E,
+		//					= 0x1F,		///<
+		REG_LDO_DIRECT		= 0x20,
+		REG_MPC_DIRECTWRITE	= 0x21,
+		REG_MPC_DIRECTRED	= 0x22,
+
+		REG_LED_STEP_DIRECT	= 0x2C,
+		REG_LED0_DIRECT		= 0x2D,
+		REG_LED1_DIRECT		= 0x2E,
+		REG_LED2_DIRECT		= 0x2F,
+
+
+		REG_LDO1_CONFIG_WRITE = 0x40,
+		REG_LDO1_CONFIG_READ  = 0x41,
+		REG_LDO2_CONFIG_WRITE = 0x42,
+		REG_LDO2_CONFIG_READ  = 0x43
+
+		/*
+		REG_CHG_TMR = 0x0C,   ///< Charger Timers
+		REG_BUCK1_CFG = 0x0D,   ///< Buck 1 Configuration
+		REG_BUCK1_VSET = 0x0E,   ///< Buck 1 Voltage Setting
+		REG_BUCK2_CFG = 0x0F,   ///< Buck 2 Configuration
+		REG_BUCK2_VSET = 0x10,   ///< Buck 2 Voltage Setting
+		REG_RSVD_11 = 0x11,   ///< Reserved 0x11
+		REG_LDO1_CFG = 0x12,   ///< LDO 1 Configuration
+		REG_LDO1_VSET = 0x13,   ///< LDO 1 Voltage Setting
+		REG_LDO2_CFG = 0x14,   ///< LDO 2 Configuration
+		REG_LDO2_VSET = 0x15,   ///< LDO 2 Voltage Setting
+		REG_LDO3_CFG = 0x16,   ///< LDO 3 Configuration
+		REG_LDO3_VSET = 0x17,   ///< LDO 3 Voltage Setting
+		REG_THRM_CFG = 0x18,   ///< Thermistor Configuration
+		REG_MON_CFG = 0x19,   ///< Monitor Multiplexer Configuration
+		REG_BOOT_CFG = 0x1A,   ///< Boot Configuration
+		REG_PIN_STATUS = 0x1B,   ///< Pin Status
+		REG_BUCK_EXTRA = 0x1C,   ///< Additional Buck Settings
+		REG_PWR_CFG = 0x1D,   ///< Power Configuration
+		REG_NULL = 0x1E,   ///< Reserved 0x1E
+		REG_PWR_OFF = 0x1F,   ///< Power Off Register
+		*/
+	};
+
+	/**
+	* @brief  Constructor using reference to I2C object
+	* @param i2c - Reference to I2C object
+	* @param slaveAddress - 7-bit I2C address
+	*/
+	MAX20303(I2C *i2c);
+
+	/** @brief Destructor */
+	~MAX20303(void);
+
+	int led0on(char enable);
+	int led1on(char enable);
+	int led2on(char enable);
+	int BoostEnable(void);
+	int BuckBoostEnable(void);
+
+	/// @brief Enable the 1.8V output rail **/
+	int LDO1Config(void);
+
+	/// @brief Enable the 3V output rail **/
+	int LDO2Config(void);
+
+
+	int mv2bits(int mV);
+
+	/** @brief Power Off the board
+	 */
+	int PowerOffthePMIC();
+
+	/** @brief Power Off the board with 30ms delay
+	 */
+	int PowerOffDelaythePMIC();
+
+	/** @brief Soft reset the PMIC
+	 */
+	int SoftResetthePMIC();
+
+	/** @brief Hard reset the PMIC
+	 */
+	int HardResetthePMIC();
+
+	/** @brief check if can communicate with max20303
+	*/
+	char CheckPMICHWID();
+
+	/** @brief CheckPMICStatusRegisters
+	*/
+	int CheckPMICStatusRegisters(unsigned char buf_results[5]);
+
+    int Max20303_BatteryGauge(unsigned char *batterylevel);
+
+    // check if the battery is connected.
+    // Warning: that function has 1000ms delay
+    char Max20303_IsBattery_Connected();
+
+private:
+
+	int writeReg(registers_t reg, uint8_t value);
+	int readReg(registers_t reg, uint8_t &value);
+
+	int writeRegMulti(registers_t reg, uint8_t *value, uint8_t len);
+	int readRegMulti(registers_t reg, uint8_t *value, uint8_t len);
+
+	/// I2C object
+	I2C  *m_i2c;
+
+	/// Device slave addresses
+	uint8_t m_writeAddress, m_readAddress;
+
+	// Application Processor Interface Related Variables
+	uint8_t i2cbuffer_[16];
+	uint8_t appdatainoutbuffer_[8];
+	uint8_t appcmdoutvalue_;
+
+	// check if the battery is connected
+	char m_battery_is_connected;
+
+	/** @brief API Related Functions ***/
+
+	/***
+	 *  @brief  starts writing from ApResponse register 0x0F
+	 *  check the datasheet to determine the value of dataoutlen
+	 */
+	int AppWrite(uint8_t dataoutlen);
+
+	/** @brief starts reading from ApResponse register 0x18
+	 *  check the datasheet to determine the value of datainlen
+	 *  the result values are written into i2cbuffer
+	 *
+	*/
+	int AppRead(uint8_t datainlen);
+};
+
+#endif /* __MAX20303_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Platforms/max32630hsp/max32630hsp.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,233 @@
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "mbed.h"
+#include "max3263x.h"
+#include "ioman_regs.h"
+#include "PinNames.h"
+#include "max32630hsp.h"
+
+
+//******************************************************************************
+MAX32630HSP::MAX32630HSP() : i2c(P5_7, P6_0), max20303(&i2c)
+{
+}
+
+//******************************************************************************
+MAX32630HSP::MAX32630HSP(vio_t vio) : i2c(P5_7, P6_0), max20303(&i2c)
+{
+
+    init(vio);
+}
+
+//******************************************************************************
+MAX32630HSP::MAX32630HSP(vio_t vio, InterruptIn *max32630hsp3_powerButtonInterrupt) : i2c(P5_7, P6_0), max20303(&i2c), m_max32630hsp3_powerButtonInterrupt(max32630hsp3_powerButtonInterrupt)
+{
+    init(vio);
+
+    status_powerButton = BUTTONSTATUS_INACTIVE;
+    m_max32630hsp3_powerButtonInterrupt->disable_irq();
+    m_max32630hsp3_powerButtonInterrupt->rise(this, &MAX32630HSP::event_powerButtonReleased);
+    m_max32630hsp3_powerButtonInterrupt->mode(PullUp);
+	m_max32630hsp3_powerButtonInterrupt->enable_irq();
+}
+
+
+//******************************************************************************
+MAX32630HSP::~MAX32630HSP()
+{
+
+}
+
+
+//******************************************************************************
+int MAX32630HSP::init(vio_t hdrVio)
+{
+	/* Wait for pmic to settle down */
+	wait_ms(800);
+
+    set_time(1544787300);  // Set RTC time to Wed, 28 Oct 2009 11:35:37
+
+	/*Set LDO1 to 1.8v*/
+	max20303.LDO1Config();
+
+	/*Set LDO2 to 3v*/
+    max20303.LDO2Config();
+
+	//max20303.BoostEnable();
+	max20303.BuckBoostEnable();
+
+
+	max20303.led0on(0);
+	max20303.led1on(0);
+	max20303.led2on(0);
+
+	/* Wait for pmic to settle down */
+    wait_ms(200);
+
+    // Set LED pins to 3.3V
+    vddioh(P2_4, VIO_3V3);
+    vddioh(P2_5, VIO_3V3);
+    vddioh(P2_6, VIO_3V3);
+
+    // set i2c pins to 1.8V
+    vddioh(P3_4, VIO_1V8);
+    vddioh(P3_5, VIO_1V8);
+    //ble module pins to 1.8V
+    vddioh(P0_0, VIO_1V8);
+    vddioh(P0_1, VIO_1V8);
+    vddioh(P0_2, VIO_1V8);
+    vddioh(P0_3, VIO_1V8);
+
+    // Set header pins to hdrVio
+    vddioh(P3_0, hdrVio);
+    vddioh(P3_1, hdrVio);
+    vddioh(P3_2, hdrVio);
+    vddioh(P3_3, hdrVio);
+    vddioh(P4_0, hdrVio);
+    vddioh(P4_1, hdrVio);
+    vddioh(P4_2, hdrVio);
+    vddioh(P4_3, hdrVio);
+    vddioh(P4_4, hdrVio);
+    vddioh(P4_5, hdrVio);
+    vddioh(P4_6, hdrVio);
+    vddioh(P4_7, hdrVio);
+    vddioh(P5_0, hdrVio);
+    vddioh(P5_1, hdrVio);
+    vddioh(P5_2, hdrVio);
+    vddioh(P5_3, hdrVio);
+    vddioh(P5_4, hdrVio);
+    vddioh(P5_5, hdrVio);
+    vddioh(P5_6, hdrVio);
+
+
+
+    return 0;
+}
+
+//******************************************************************************
+void MAX32630HSP::event_powerButtonPressed(void) {
+	status_powerButton = BUTTONSTATUS_PRESSED;
+}
+
+//******************************************************************************
+void MAX32630HSP::event_powerButtonReleased(void) {
+	if(status_powerButton == BUTTONSTATUS_LONG_PRESS_WAITING_RED) {
+		status_powerButton = BUTTONSTATUS_LONG_PRESS;
+	} else {
+		status_powerButton = BUTTONSTATUS_RELEASED;
+	}
+}
+
+//******************************************************************************
+void MAX32630HSP::event_longpresscheck(void) {
+	status_powerButton = BUTTONSTATUS_LONG_PRESS_WAITING;
+}
+
+//******************************************************************************
+void MAX32630HSP::enableDisplay(void)
+{
+	vddioh(P6_4, VIO_3V3); //EXTCOM
+	vddioh(P6_1, VIO_3V3); //SCLK
+	vddioh(P6_2, VIO_3V3); //MOSI1
+	vddioh(P6_5, VIO_3V3); //SCS
+	vddioh(P6_4, VIO_3V3); //EXTCOM
+	vddioh(P6_6, VIO_3V3); //DISP
+}
+
+//******************************************************************************
+void MAX32630HSP::Max32630HSP_CheckInterrupt_Status(void) {
+
+	switch (status_powerButton) {
+	case BUTTONSTATUS_PRESSED: {
+		max20303.led0on(0);
+		max20303.led1on(0);
+		max20303.led2on(1);
+		/* Button press detected. Wait for button release */
+		m_max32630hsp3_powerButtonInterrupt->disable_irq();
+		m_max32630hsp3_powerButtonInterrupt->rise(this, &MAX32630HSP::event_powerButtonReleased);
+		m_max32630hsp3_powerButtonInterrupt->mode(PullUp);
+		m_max32630hsp3_powerButtonInterrupt->enable_irq();
+		/* Button press detected. Start Timeout object for checking long key press event */
+		button_timeout.attach( this, &MAX32630HSP::event_longpresscheck , 2.0 );
+		/* Button is pressed */
+		status_powerButton = BUTTONSTATUS_PRESSED_WAITING;
+
+	} break;
+	case BUTTONSTATUS_RELEASED: {
+		/* Button is released. Stop timeout object */
+		button_timeout.detach();
+		max20303.led0on(0);
+		max20303.led1on(0);
+		max20303.led2on(0);
+		/* Button is released. Expect for button press event next time */
+		m_max32630hsp3_powerButtonInterrupt->disable_irq();
+		m_max32630hsp3_powerButtonInterrupt->fall(this, &MAX32630HSP::event_powerButtonPressed);
+		m_max32630hsp3_powerButtonInterrupt->mode(PullUp);
+		m_max32630hsp3_powerButtonInterrupt->enable_irq();
+		status_powerButton = BUTTONSTATUS_INACTIVE;
+	} break;
+	case BUTTONSTATUS_LONG_PRESS_WAITING: {
+		max20303.led0on(0);
+		max20303.led1on(1);
+		max20303.led2on(0);
+		status_powerButton = BUTTONSTATUS_LONG_PRESS_WAITING_RED;
+	} break;
+	case BUTTONSTATUS_LONG_PRESS: {
+		max20303.PowerOffDelaythePMIC();
+		wait_ms(250);
+		status_powerButton = BUTTONSTATUS_INACTIVE;
+	} break;
+	default:
+		break;
+	}
+}
+
+//******************************************************************************
+int MAX32630HSP::vddioh(PinName pin, vio_t vio)
+{
+    __IO uint32_t *use_vddioh = &((mxc_ioman_regs_t *)MXC_IOMAN)->use_vddioh_0;
+
+    if (pin == NOT_CONNECTED) {
+        return -1;
+    }
+
+    use_vddioh += PINNAME_TO_PORT(pin) >> 2;
+    if (vio) {
+        *use_vddioh |= (1 << (PINNAME_TO_PIN(pin) + ((PINNAME_TO_PORT(pin) & 0x3) << 3)));
+    } else {
+        *use_vddioh &= ~(1 << (PINNAME_TO_PIN(pin) + ((PINNAME_TO_PORT(pin) & 0x3) << 3)));
+    }
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Platforms/max32630hsp/max32630hsp.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _MAX32630HSP_H_
+#define _MAX32630HSP_H_
+
+#include "mbed.h"
+#include "MAX20303.h"
+
+
+/**
+ * @brief MAX32630HSP Board Support Library
+ *
+ * @details The MAX32630HSP is a rapid development application board for
+ * ultra low power wearable applications.  It includes common peripherals and
+ * expansion connectors all power optimized for getting the longest life from
+ * the battery.  This library configures the power and I/O for the board.
+ * <br>https://www.maximintegrated.com/max32630hsp
+ *
+ * @code
+ * #include "mbed.h"
+ * #include "max32630hsp.h"
+ *
+ * DigitalOut led1(LED1);
+ * MAX32630HSP icarus(MAX32630HSP::VIO_3V3);
+ *
+ * // main() runs in its own thread in the OS
+ * // (note the calls to Thread::wait below for delays)
+ * int main()
+ * {
+ *     // initialize power and I/O on MAX32630HSP board
+ *     icarus.init();
+ *
+ *     while (true) {
+ *         led1 = !led1;
+ *         Thread::wait(500);
+ *     }
+ * }
+ * @endcode
+ */
+
+// Sharp LS013B7DH03 Memory Display
+#define SCK_PIN     		P6_1
+#define MOSI_PIN    		P6_2
+#define CS_PIN      		P6_5
+#define EXTCOM_PIN  		P6_4
+#define DISP_PIN    		P6_6
+#define DISPSEL_PIN 		NC
+#define	PIN_POWERBUTTON		P7_6
+#define	PIN_UPBUTTON		P2_3
+#define	PIN_DOWNBUTTON		P6_5
+
+class MAX32630HSP
+{
+public:
+// max32630hsp configuration utilities
+
+    /**
+      * @brief   IO Voltage
+      * @details Enumerated options for operating voltage
+      */
+    typedef enum {
+        VIO_1V8 = 0x00,    ///< 1.8V IO voltage at headers (from BUCK2)
+        VIO_3V3 = 0x01,    ///< 3.3V IO voltage at headers (from LDO2)
+    } vio_t;
+
+    enum ButtonStatus {
+    	BUTTONSTATUS_INACTIVE = 0,
+    	BUTTONSTATUS_RELEASED,
+		BUTTONSTATUS_PRESSED,
+		BUTTONSTATUS_PRESSED_WAITING,
+		BUTTONSTATUS_LONG_PRESS,
+		BUTTONSTATUS_LONG_PRESS_WAITING,
+		BUTTONSTATUS_LONG_PRESS_WAITING_RED,
+    } ;
+
+    /**
+        * MAX32630HSP constructor.
+        *
+        */
+    MAX32630HSP();
+
+    /**
+        * MAX32630HSP constructor.
+        *
+        */
+    MAX32630HSP(vio_t vio);
+
+    /**
+        * MAX32630HSP constructor.
+        *
+        */
+    MAX32630HSP(vio_t vio, InterruptIn *max32630hsp3_powerButtonInterrupt);
+
+    /**
+        * MAX32630HSP destructor.
+        */
+    ~MAX32630HSP();
+
+    //InterruptIn _interruptIn_PowerButton;
+
+    /**
+     * @brief   Initialize MAX32630HSP board
+     * @details Initializes PMIC and I/O on MAX32630HSP board.
+     *  Configures PMIC to enable LDO2 and LDO3 at 3.3V.
+     *  Disables resisitive pulldown on MON(AIN_0)
+     *  Sets default I/O voltages to 3V3 for micro SD card.
+     *  Sets I/O voltage for header pins to hdrVio specified.
+     * @param hdrVio I/O voltage for header pins
+     * @returns 0 if no errors, -1 if error.
+    */
+    int init(vio_t hdrVio);
+
+    /**
+     * @brief   Sets I/O Voltage
+     * @details Sets the voltage rail to be used for a given pin.
+     *  VIO_1V8 selects VDDIO which is supplied by Buck2, which is set at 1.8V,
+     *  VIO_3V3 selects VDDIOH which is supplied by LDO2, which is typically 3.3V/
+     * @param   pin Pin whose voltage supply is being assigned.
+     * @param   vio Voltage rail to be used for specified pin.
+     * @returns 0 if no errors, -1 if error.
+    */
+    int vddioh(PinName pin, vio_t vio);
+
+    /**Interrupt Hander for Power Button Press**/
+
+    //InterruptIn _interruptIn_UpButton(PIN_UPBUTTON);
+    //InterruptIn _interruptIn_DownButton(PIN_DOWNBUTTON);
+
+    /* Set vddio for Sharp LS013B7DH03 Display */
+	void enableDisplay(void);
+
+	void Max32630HSP_CheckInterrupt_Status(void);
+
+    /// Local I2C bus for configuring PMIC and accessing BMI160 IMU.
+    I2C i2c;
+
+    /// MAX20303 PMIC Instance
+    MAX20303 max20303;
+
+
+    InterruptIn *m_max32630hsp3_powerButtonInterrupt;
+    Timeout	button_timeout;
+
+    volatile ButtonStatus status_powerButton;
+    ButtonStatus status_upButton;
+    ButtonStatus status_downButton;
+    void event_powerButtonPressed(void);
+    void event_powerButtonReleased(void);
+    void event_longpresscheck(void);
+};
+
+#endif /* _MAX32630HSP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/CRC8.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,93 @@
+  /***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+#include <stdint.h>
+
+/*
+ * CRC-8:
+ *
+ * Width:   8
+ * Poly:    0x07
+ * Init:    0x00
+ * RefIn:   False
+ * RefOut:  False
+ * XOROur:  0x00
+ * Check:   0xF4
+ */
+
+static const uint8_t CRC8_POLY = 0x07;
+static bool crc8_initialized = false;
+
+static uint8_t crc8_table[256];
+
+
+static void init_crc8()
+{
+    uint8_t msb = 1 << 7;
+    uint8_t bit;
+    uint8_t rem;
+    uint32_t byte = 0;
+
+    if (crc8_initialized)
+        return;
+
+    while (byte < 256) {
+        rem = byte;
+        for (bit = 0; bit < 8; bit++) {
+            if (rem & msb)
+                rem = (rem << 1) ^ CRC8_POLY;
+            else
+                rem <<= 1;
+        }
+
+        crc8_table[byte++] = rem;
+    }
+
+    crc8_initialized = true;
+}
+
+uint8_t crc8(uint8_t *data, uint32_t length)
+{
+    uint8_t crc = 0x00;
+    uint32_t msg_idx = 0;
+
+    if (length == 0xFFFFFFFF)
+        return 0;
+
+    init_crc8();
+
+    while (msg_idx < length) {
+        crc = crc8_table[crc ^ data[msg_idx++]];
+    }
+
+    return crc;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/CRC8.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,39 @@
+  /***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#ifndef _CRC8_
+#define _CRC8_
+
+uint8_t crc8(uint8_t *data, uint32_t length);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/EventStats.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,119 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+#ifdef ENABLE_EVENTSTATS
+#include "EventStats.h"
+#include "Peripherals.h"
+
+EventStats::EventStats() :
+	single_evt(), all_evts()
+{
+	name = "";
+	report_period = 1000000;
+	num_evts = 0;
+	total_evt_time = 0;
+
+	evt_in_prog = false;
+}
+
+EventStats::EventStats(int report_period, const char* name) :
+	single_evt(), all_evts()
+{
+	if (name)
+		this->name = name;
+	else
+		this->name = "";
+
+	this->report_period = report_period;
+	num_evts = 0;
+	total_evt_time = 0;
+	evt_in_prog = false;
+
+}
+
+void EventStats::start()
+{
+	if (evt_in_prog) {
+		pr_debug("EventStats::start() called twice without calling EventStats::stop()!");
+	}
+
+
+	if (!num_evts)
+		all_evts.start();
+
+	single_evt.start();
+	evt_in_prog = true;
+
+}
+
+void EventStats::stop()
+{
+	if (!evt_in_prog) {
+		pr_debug("EventStats::stop() called before EventStats::start()!");
+	}
+
+	single_evt.stop();
+	num_evts++;
+	evt_in_prog = false;
+	total_evt_time += single_evt.read_us();
+	single_evt.reset();
+
+	int time_since_start = all_evts.read_us();
+	if (time_since_start > report_period) {
+		print_events(true);
+	}
+}
+
+void EventStats::print_events(bool reset)
+{
+	if (num_evts > 0) {
+		int time_since_start = all_evts.read_us();
+		int avg = total_evt_time / num_evts;
+
+		pr_debug("[Event (%s) hit %d times in %dus. Avg: %dus, Total: %dus\r\n",
+				name,
+				num_evts,
+				time_since_start,
+				avg,
+				total_evt_time);
+	} else {
+		pr_debug("Event (%s) has not yet occurred\r\n", name);
+	}
+
+	if (reset) {
+		num_evts = 0;
+		all_evts.reset();
+		total_evt_time = 0;
+	}
+}
+
+#endif //ENABLE_EVENTSTATS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/EventStats.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Author: Shaun Kelsey, shaun.kelsey@maximintegrated.com
+
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *
+ ******************************************************************************/
+#ifdef ENABLE_EVENTSTATS
+#ifndef _PLATFORM_EVENT_H
+#define _PLATFORM_EVENT_H
+
+
+#include "mbed.h"
+
+class EventStats
+{
+	public:
+		EventStats();
+		EventStats(int report_period, const char* name);
+
+		//Start an event
+		void start();
+
+		//Stop an event. If report_period time has passed, prints stats
+		void stop();
+
+		//Print out stats. Set report_period to < 0 if you want to call this manually
+		void print_events(bool reset);
+
+	private:
+
+		const char* name;
+		int report_period;
+		int num_evts;
+		int total_evt_time;
+
+		bool evt_in_prog;
+		Timer single_evt;
+		Timer all_evts;
+};
+
+
+#endif
+#endif //ENABLE_EVENTSTATS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/LEDStatus.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,128 @@
+/*******************************************************************************
+* Author: Shaun Kelsey, shaun.kelsey@maximintegrated.com
+* Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#include "LEDStatus.h"
+#include "Peripherals.h"
+
+LEDStatus::LEDStatus(PinName red, int rstate, PinName green, int gstate, PinName blue, int bstate):
+	rLED(red, rstate), gLED(green, gstate), bLED(blue, bstate), blinking(false), timer()
+{
+}
+
+void LEDStatus::set_state(int rstate, int gstate, int bstate)
+{
+	r_act = rstate;
+	g_act = gstate;
+	b_act = bstate;
+
+	if (!blinking) {
+		rLED = r_act;
+		gLED = g_act;
+		bLED = b_act;
+	}
+}
+
+void LEDStatus::solid()
+{
+	blinking = false;
+	rLED = r_act;
+	gLED = g_act;
+	bLED = b_act;
+
+	timer.stop();
+}
+
+void LEDStatus::blink(int ontime, int offtime, int nb)
+{
+	ont_us = 1000 * ontime;
+	offt_us = 1000 * offtime;
+	count = 1;
+	total = nb;
+	blinking = true;
+
+	rLED = r_act;
+	gLED = g_act;
+	bLED = b_act;
+	bs = true;
+
+	timer.reset();
+	timer.start();
+}
+
+void LEDStatus::blink(int period, float duty, int nb)
+{
+	ont_us = 1000 * period * duty;
+	offt_us = (1000 * period) - ont_us;
+	count = 1;
+	total = nb;
+	blinking = true;
+
+	rLED = r_act;
+	gLED = g_act;
+	bLED = b_act;
+	bs = true;
+
+	timer.reset();
+}
+
+bool LEDStatus::is_blinking()
+{
+	return blinking;
+}
+
+void LEDStatus::update()
+{
+	uint64_t time = timer.read_high_resolution_us();
+	uint64_t frame_time = time % (ont_us + offt_us);
+
+	if (bs && (frame_time > ont_us)) {
+		bs = false;
+		rLED = LED_OFF;
+		gLED = LED_OFF;
+		bLED = LED_OFF;
+		count++;
+
+	} else if (!bs && (frame_time <= ont_us)) {
+		bs = true;
+		rLED = r_act;
+		gLED = g_act;
+		bLED = b_act;
+
+		if (total > 0 && count >= total) {
+			blinking = false;
+			timer.stop();
+		}
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/LEDStatus.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,119 @@
+/*******************************************************************************
+* Author: Shaun Kelsey, shaun.kelsey@maximintegrated.com
+* Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#ifndef _LEDSTATUS_H_
+#define _LEDSTATUS_H_
+#include "mbed.h"
+
+class LEDStatus
+{
+public:
+
+	/** Create an LED_Status controller
+	 * 
+	 *  @param red PinName of red LED
+	 *  @param rstate Initial state of red LED
+	 *  @param green PinName of green LED
+	 *  @param gstate Initial state of green LED
+	 *  @param blue PinName of blue LED
+	 *  @param bstate Initial state of blue LED
+	 */
+	LEDStatus(PinName red, int rstate, PinName green, int gstate, PinName blue, int bstate);
+
+	/** Set the active state of each LED
+	 *
+	 *  @param rstate active state of red LED
+	 *  @param gstate active state of green LED
+	 *  @param bstate active state of blue LED
+	 */
+	void set_state(int rstate, int gstate, int bstate);
+
+	/** Set and keep the LEDs in their active state */
+	void solid();
+
+	/** Set the LEDs to toggle between their active state and their off state
+	 *
+	 *  @param ontime The amount of time (in milliseconds) to remain in the active state
+	 *  @param offtime The amount of time (in milliseconds) to remain off
+	 *  @param nb The number of times to blink before remaining in the off state
+	 *  				Set to -1 to blink indefinitely
+	 *
+	 */
+	void blink(int ontime, int offtime, int nb = -1);
+
+	/** Set the LEDs to toggle between their active state and their off state
+	 *
+	 *  @param period The period of each blink (in milliseconds)
+	 *  @param offtime The percentage of the period during which the LEDs will be in their active state
+	 *  @param nb The number of times to blink before remaining in the off state
+	 *  				Set to -1 to blink indefinitely
+	 */
+	void blink(int period, float duty, int nb = -1);
+
+	/** Get whether LEDState is in the blinking state
+	 */
+	bool is_blinking();
+
+	/** Called in main loop of program to advance the state of the class
+	 *  @detail Instead of using a Ticker and generating additional interrupts and overhead,
+	 *  		LEDStatus relies on update being called at a decent interval in order
+	 *  		to advance its interval time keeping and blink LEDs and the correct rate.
+	 *  		If only using solid() mode, update() does not need to be called.
+	 */
+	void update();
+
+private:
+
+	DigitalOut rLED;
+	DigitalOut gLED;
+	DigitalOut bLED;
+
+	int r_act;
+	int g_act;
+	int b_act;
+
+	bool blinking;
+	bool bs;
+	int count;
+	int total;
+
+	uint64_t ont_us;
+	uint64_t offt_us;
+
+	Timer timer;
+
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/Peripherals.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+#include "Peripherals.h"
+
+USBSerial *Peripherals::mUSBSerial = NULL;
+Serial *Peripherals::mDaplinkSerial = NULL;
+
+MAX30001 *Peripherals::mMAX30001 = NULL;
+MAX30001_Helper *Peripherals::mMAX30001_Helper = NULL;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/Peripherals.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+#ifndef _PERIPHERALS_H_
+#define _PERIPHERALS_H_
+
+#include "mbed.h"
+#include "Serial.h"
+#include "USBSerial.h"
+
+
+#include "MAX30001.h"
+#include "MAX30001_Helper.h"
+
+
+#define pr_USB(fmt, args...) if(Peripherals::usbSerial() != NULL) \
+	Peripherals::usbSerial()->printf("\r\n[" fmt "[(%s:%d)\r\n", ##args, __func__, __LINE__)
+
+#define pr_SERIAL(fmt, args...) printf("\r\n[" fmt "[(%s:%d)\r\n", ##args, __func__, __LINE__)
+
+#define pr_err(fmt, args...) if(Peripherals::usbSerial() != NULL) \
+	Peripherals::usbSerial()->printf("\r\n[" fmt "[(%s:%d)\r\n", ##args, __func__, __LINE__); \
+	if (Peripherals::daplinkSerial() != NULL) \
+		Peripherals::daplinkSerial()->printf("\r\n[" fmt, ##args);
+
+#ifdef SHOW_DEBUG_MSGS
+#define pr_debug(fmt, args...) 	if(Peripherals::usbSerial() != NULL) \
+	Peripherals::usbSerial()->printf("\r\n[" fmt "[(%s:%d)\r\n", ##args, __func__, __LINE__); \
+	if (Peripherals::daplinkSerial() != NULL) \
+		Peripherals::daplinkSerial()->printf("\r\n[" fmt, ##args);
+#else
+	#define pr_debug(fmt, args...)
+#endif
+
+#ifdef SHOW_INFO_MSGS
+#define pr_info(fmt, args...) if(Peripherals::usbSerial() != NULL)\
+	Peripherals::usbSerial()->printf("[" fmt, ##args); \
+	if (Peripherals::daplinkSerial() != NULL)\
+		Peripherals::daplinkSerial()->printf("\r\n[" fmt, ##args);
+#else
+	#define pr_info(fmt, args...)
+#endif
+
+/**
+* This static class is used as a central locatoin for all devices on the HSP platform
+* it gives (in-effect) a singleton interface for each device so that anywhere in code
+* one can reference on of these devices
+*/
+class Peripherals {
+public:
+    static USBSerial *setUSBSerial(USBSerial * device) { mUSBSerial = device; return device; }
+    static USBSerial *usbSerial(void) { return mUSBSerial; }
+
+    static Serial *setDaplinkSerial(Serial * device) { mDaplinkSerial = device; return device; }
+    static Serial *daplinkSerial(void) { return mDaplinkSerial; }
+
+
+    static MAX30001 *max30001(void) { return mMAX30001; }
+    static MAX30001 *setMAX30001(MAX30001 *device) { mMAX30001 = device; return device; }
+
+    static MAX30001_Helper *max30001Helper(void) { return mMAX30001_Helper; }
+    static MAX30001_Helper *setMAX30001Helper(MAX30001_Helper *device) { mMAX30001_Helper = device; return device; }
+
+
+private:
+    static USBSerial *mUSBSerial;
+    static Serial *mDaplinkSerial;
+
+    static MAX30001 *mMAX30001;
+    static MAX30001_Helper *mMAX30001_Helper;
+
+};
+
+#endif // _PERIPHERALS_H_
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/WatchInterface.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1133 @@
+/*
+ * WatchInterface.cpp
+ *
+ *  Created on: Aug 28, 2018
+ *      Author: Gokhan.Bektas
+ */
+
+
+
+#include "WatchInterface.h"
+#include "Peripherals.h"
+#include "LS013B7DH03.h"
+#include "mbed_logo.h"
+
+#include "UbuntuCondensed38x47.h"
+#include "ubuntucondensed20x26.h"
+#include "ubuntucondensed16x21.h"
+#include "Arial10x10.h"
+#include "Neu44x36.h"
+#include "mxm_assert.h"
+#include "utils.h"
+#include "../version.h"
+
+//Non-const static members must be both declared in the class definition and defined with global scope to properly give the linker something to reference.
+bool WatchInterface::refreshed = true;
+
+
+WatchInterface::WatchInterface(PinName buttonUp, PinName buttonDown, PinName buttonPower, PinName displayCS, PinName displayEXTCOM, PinName displayDISP, SPI* displaySPI):
+	btnUp(buttonUp), btnDown(buttonDown), btnPower(buttonPower), dispCS(displayCS), dispEXTCOM(displayEXTCOM), dispDISP(displayDISP), display(displaySPI, &dispCS), DisplayPWM(displayEXTCOM)
+{
+	dispDISP = 0;
+
+
+	buttonEvent_up   = BUTTONEVENT_NONE;
+	buttonEvent_down = BUTTONEVENT_NONE;
+
+
+	btnUp.fall(callback(this, &WatchInterface::isr_buttonup));
+	btnUp.mode(PullUp);
+	btnUp.enable_irq();
+
+	btnDown.fall(callback(this, &WatchInterface::isr_buttondown));
+	btnDown.mode(PullUp);
+	btnDown.enable_irq();
+
+	displaySPI->frequency(1000000);
+
+	DisplayPWM.period_ms(16);
+	DisplayPWM.pulsewidth_ms(8);
+
+	//updateDisplay(4);
+
+	recording_old 	  = false;
+	recording    	  = false;
+	recordingStopFlag = false;
+	isDisplayOff      = false;
+
+	interfaceTimer.start();
+
+	displayMode_old = DISPLAYMODE_AFTERBOOT;
+	displayMode     = DISPLAYMODE_TIME;
+
+
+
+}
+
+void WatchInterface::isr_buttonup()
+{
+	if (buttonEvent_up == BUTTONEVENT_NONE) {
+		buttonEvent_up = BUTTONEVENT_UP_PRE;
+	}
+}
+
+void WatchInterface::isr_buttondown()
+{
+	if (buttonEvent_down == BUTTONEVENT_NONE) {
+		buttonEvent_down = BUTTONEVENT_DOWN_PRE;
+	}
+}
+
+WatchInterface::ButtonStatus	WatchInterface::getButtonStatus(WatchInterface::hspButton button)
+{
+
+	switch (button) {
+
+		// TODO: fill button power status
+		case WatchInterface::BUTTON_POWER :
+			return (BUTTON_RELEASED);
+			break;
+		case WatchInterface::BUTTON_UP:
+			if (btnUp.read()) {
+				return (WatchInterface::BUTTON_PRESSED);
+			} else {
+				return (WatchInterface::BUTTON_RELEASED);
+			}
+			break;
+
+		case WatchInterface::BUTTON_DOWN:
+			if (btnDown.read()) {
+				return (WatchInterface::BUTTON_PRESSED);
+			} else {
+				return (WatchInterface::BUTTON_RELEASED);
+			}
+			break;
+
+	}
+
+}
+
+
+void WatchInterface::refreshCallback(void)
+{
+	refreshed = true;
+}
+
+
+
+void WatchInterface::execute(void)
+{
+	unsigned int current_timer;
+	static int tickCount;
+	static char tickCount_battery;
+	static int firstDetect_up;
+	static int firstDetect_down;
+
+
+	// Display is OFF in ECG Mode
+	if (ecg_enabled) {
+		if (recording & (buttonEvent_down == BUTTONEVENT_DOWN_PRE)) {
+			dispDISP = 1;
+			if (isDisplayOff) {
+				displayOff(false);
+			}
+			displayMode = DISPLAYMODE_RECORDING_STOP;
+		} else {
+			displayOff(true);
+		}
+	} else {
+		dispDISP = 1;
+		if (isDisplayOff) {
+			displayOff(false);
+			displayMode = DISPLAYMODE_RECORDING_STOP;
+		}
+	}
+
+
+	if (isDisplayOff != true) {
+		display.executeOnceLCD();
+
+		if (USB_Interface_MSD) {
+			return;
+		}
+
+		current_timer = interfaceTimer.read_ms();
+
+		// Button Debouncing
+		if (current_timer > 50) {
+
+			interfaceTimer.reset();
+			interfaceTimer.start();
+
+			// Increase tick counter in every 50ms
+			tickCount++;
+
+			// tick counter reset will occur in every 15x50 = 750ms. This is used for display updates
+			if (tickCount == 15) {
+				tickCount = 0;
+			}
+
+			if (buttonEvent_up == BUTTONEVENT_UP_PRE) {
+
+				if (firstDetect_up < 2) {
+					firstDetect_up++;
+				} else {
+					firstDetect_up = 0;
+					if (btnUp.read() == 0) {
+						buttonEvent_up = BUTTONEVENT_UP;
+					} else {
+						buttonEvent_up = BUTTONEVENT_NONE;
+					}
+				}
+
+			} else {
+				firstDetect_up = 0;
+			}
+
+			if (buttonEvent_down == BUTTONEVENT_DOWN_PRE) {
+
+				if (firstDetect_down < 2) {
+					firstDetect_down++;
+				} else {
+
+					firstDetect_down = 0;
+
+					if (btnDown.read() == 0) {
+						buttonEvent_down = BUTTONEVENT_DOWN;
+
+					} else {
+						buttonEvent_down = BUTTONEVENT_NONE;
+					}
+				}
+
+			} else {
+				firstDetect_down = 0;
+			}
+
+		}
+
+
+		switch (displayMode) {
+
+
+			case DISPLAYMODE_TIME:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_PPG;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_INFO;
+								modeUpdated = true;
+								tickCount = 8;
+
+							} else {
+
+
+							}
+				break;
+
+#ifdef ENABLE_SPO2
+			case DISPLAYMODE_PPG:		// Handle both PPG and ECG
+			case DISPLAYMODE_ECG:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_SPO2_ONESHOT;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_TIME;
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+				break;
+
+			case DISPLAYMODE_SPO2_ONESHOT:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_SPO2_CONTINUOUS;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_PPG;
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+
+				break;
+
+			case DISPLAYMODE_SPO2_CONTINUOUS:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_INFO;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_SPO2_ONESHOT;
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+
+				break;
+#else
+			case DISPLAYMODE_PPG:		// Handle both PPG and ECG
+			case DISPLAYMODE_ECG:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_TEMP;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_TIME;
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+				break;
+
+			case DISPLAYMODE_TEMP:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_INFO;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+								displayMode = DISPLAYMODE_PPG;
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+				break;
+#endif
+			case DISPLAYMODE_INFO:
+
+				// Detect BLE Connected Event
+				if (BLE_Interface_Exists) {
+
+					BLE_Interface_Exists_old = true;
+					display_BLEMode_Active   = false;
+					displayMode = DISPLAYMODE_TETHERED;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Connected Event
+					if (USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = true;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TETHERED_USB;
+
+						tickCount = 8;
+
+					} else
+						// Next menu item
+						if (buttonEvent_up == BUTTONEVENT_UP) {
+
+							buttonEvent_up = BUTTONEVENT_NONE;
+							displayMode = DISPLAYMODE_TIME;
+							modeUpdated = true;
+							tickCount = 8;
+
+						} else
+							// Next menu item
+							if (buttonEvent_down == BUTTONEVENT_DOWN) {
+
+								buttonEvent_down = BUTTONEVENT_NONE;
+#ifdef ENABLE_SPO2
+								displayMode = DISPLAYMODE_SPO2_CONTINUOUS;
+#else
+	                            displayMode = DISPLAYMODE_TEMP;
+#endif
+								modeUpdated = true;
+								tickCount = 8;
+
+							}
+				break;
+			case DISPLAYMODE_TETHERED:
+
+				// Detect Recording start event
+				if ((recording)  && (!recording_old)) {
+
+					recording_old = true;
+					displayMode = DISPLAYMODE_RECORDING;
+
+					tickCount = 8;
+
+				} else
+					// Detect BLE Disconnected Event
+					if (!BLE_Interface_Exists) {
+
+						BLE_Interface_Exists_old = false;
+						display_BLEMode_Active  = false;
+						displayMode = DISPLAYMODE_TIME;
+
+						tickCount = 8;
+
+					}
+
+				break;
+
+			case DISPLAYMODE_TETHERED_USB:
+
+				// Detect Recording start event
+				if ((recording)  && (!recording_old)) {
+
+					printf("START EVENT");
+					recording_old = recording;
+					displayMode = DISPLAYMODE_RECORDING;
+
+					tickCount = 8;
+
+				} else
+					// Detect USB Disconnected Event
+					if (!USB_Interface_Exists) {
+
+						USB_Interface_Exists_old = false;
+						display_USBMode_Active   = false;
+						displayMode = DISPLAYMODE_TIME;
+
+						tickCount = 8;
+
+					}
+
+
+				break;
+
+			case DISPLAYMODE_RECORDING: {
+				// Detect stop recording
+				if ((!recording) && (recording_old)) {
+					printf("STOP EVENT");
+					recording_old = recording;
+					displayMode = DISPLAYMODE_TIME;
+					tickCount = 8;
+				} else {
+					if (buttonEvent_down == BUTTONEVENT_DOWN) {
+						buttonEvent_down = BUTTONEVENT_NONE;
+						displayMode = DISPLAYMODE_RECORDING_STOP;
+						tickCount = 8;
+					}
+				}
+			}
+			break;
+
+			case DISPLAYMODE_RECORDING_STOP: {
+				recordingStopFlag = true;
+				recording         = false;
+				recording_old     = false;
+				displayMode = DISPLAYMODE_TIME;
+			}
+			break;
+		}
+
+
+
+		/*
+		 if ( recording ) {
+
+		  if ( ( buttonEvent_down == BUTTONEVENT_DOWN ) &&  ( !BLE_Interface_Exists ) &&  ( !USB_Interface_Exists ) ) {
+
+
+			  buttonEvent_down = BUTTONEVENT_NONE;
+
+			  if ( displayMode == DISPLAYMODE_RECORDING )
+					displayMode = DISPLAYMODE_RECORDING_STOP;
+
+			  tickCount = 8;
+		  }
+		 }
+		 else {
+
+		 // Handle Up/Down Button press Events
+
+			  // Process DOWN Button Press Event
+			  if ( ( buttonEvent_down == BUTTONEVENT_DOWN ) &&  ( !BLE_Interface_Exists ) &&  ( !USB_Interface_Exists ) ) {
+
+
+				  buttonEvent_down = BUTTONEVENT_NONE;
+
+				  if ( displayMode > 0)
+						displayMode--;
+				  else
+						displayMode = 3;
+
+				  tickCount = 8;
+			  }
+			  else
+				  // Process UP Button Press Event
+			  if ( ( buttonEvent_up == BUTTONEVENT_UP ) &&  ( !BLE_Interface_Exists ) &&  ( !USB_Interface_Exists ) ) {
+
+				  if ( displayMode < 3)
+						displayMode++;
+				  else
+						displayMode = 0;
+
+				  buttonEvent_up = BUTTONEVENT_NONE;
+
+				  tickCount = 8;
+			  }
+
+
+
+
+
+				// Detect BLE Connected Event
+				if ( ( BLEWasActive == false )  &&  ( BLE_Interface_Exists ) ) {
+
+					BLEWasActive = true;
+					display_BLEMode_Active = false;
+					displayMode = DISPLAYMODE_TETHERED;
+					modeUpdated = true;
+
+					tickCount = 8;
+
+				}
+				else
+				// Detect BLE Disconnected Event
+				if ( ( BLEWasActive == true )  &&  ( !BLE_Interface_Exists ) ) {
+
+					BLEWasActive = false;
+					display_BLEMode_Active = false;
+					displayMode = DISPLAYMODE_TIME;
+					//should_stop = true;
+					modeUpdated = true;
+
+					tickCount = 8;
+
+				}
+				else
+				// Detect USB Connected Event
+				if ( ( USBWasActive == false )  &&  ( USB_Interface_Exists ) ) {
+
+					USBWasActive = true;
+					display_USBMode_Active = false;
+					displayMode = DISPLAYMODE_TETHERED_USB;
+					modeUpdated = true;
+
+					tickCount = 8;
+
+				}
+				else
+				// Detect USB Disconnected Event
+				if ( ( USBWasActive == true )  &&  ( !USB_Interface_Exists ) ) {
+
+					USBWasActive = false;
+					display_USBMode_Active = false;
+					displayMode = DISPLAYMODE_TIME;
+					//should_stop = true;
+					modeUpdated = true;
+
+					tickCount = 8;
+
+				}
+
+		 }
+		*/
+
+		// Update the display in every 500ms (if necessary)
+		if (tickCount == 0) {
+
+			tickCount = 1;
+
+			if (displayMode_old != displayMode) {
+
+				modeUpdated = true;
+#ifdef ENABLE_SPO2
+				if((displayMode == DISPLAYMODE_SPO2_ONESHOT) || (displayMode == DISPLAYMODE_SPO2_CONTINUOUS))
+				{
+					instant_spo2_percentage=0;
+				}
+#endif
+			}
+
+			//if ( (!display_BLEMode_Active) &&  (!display_USBMode_Active) ) {
+			btnDown.disable_irq();
+			btnUp.disable_irq(); // Disable Interrupts
+
+
+			if (tickCount_battery <= 0) {
+				m_max20303_->Max20303_BatteryGauge(&batteryLevel);
+				tickCount_battery = BATTERY_GAUGE_COUNT;
+			}
+			tickCount_battery--;
+
+			updateDisplay(batteryLevel);
+
+			btnDown.enable_irq();
+			btnUp.enable_irq(); // Enable Interrupts
+			//}
+
+			displayMode_old = displayMode;
+		}
+
+	}
+}
+
+void WatchInterface::displayOff(bool off)
+{
+	if (off) {
+		// Display Turned Off
+		DisplayPWM.pulsewidth_ms(0);
+		dispDISP = 0;
+		isDisplayOff = true;
+	} else {
+		// Display Turned on
+		DisplayPWM.pulsewidth_ms(8);
+		dispDISP = 1;
+		isDisplayOff = false;
+	}
+}
+
+void  WatchInterface::DisplayModeUpdated(){
+	ppg_lcd_count = 0;
+}
+
+void WatchInterface::updateDisplay(int batteryLevelToBeScaled) {
+	char buffer[32];
+	time_t seconds;
+	int hrDisplay_confidenceThreshold;
+	static int hr_timeout;
+
+	// Clear Entire Screen
+	display.cls();
+	display.fill(0, 0, 128, 128, Black);
+
+	// Draw Maxim Integrated Logo
+	display.showBMP((uint8_t*)maxim128Bitmaps, 120, 36, 8, 90);
+
+	if (!bootComplete) {
+		return;
+	}
+
+	// Show BLE logo if it is connected
+
+
+	if (displayMode != DISPLAYMODE_TETHERED_USB) {
+		// Draw battery outline
+		display.fillrect(94,  6, 27, 12, White);
+		display.fillrect(97,  9, 21, 6, Black);
+		display.fillrect(122, 9, 2,  6, White);
+
+		if (batteryLevelToBeScaled < 10) {
+			batteryLevelToBeScaled = 0;
+		} else if (batteryLevelToBeScaled <= 25) {
+			batteryLevelToBeScaled = 1;
+		} else if (batteryLevelToBeScaled <= 50) {
+			batteryLevelToBeScaled = 2;
+		} else if (batteryLevelToBeScaled <= 75) {
+			batteryLevelToBeScaled = 3;
+		} else {
+			batteryLevelToBeScaled = 4;
+		}
+
+		// Draw battery level ticks
+		for (int i = 0 ; i < batteryLevelToBeScaled ; i++) {
+			display.fillrect(99 + (i * 5),  10, 3, 4, White);
+		}
+	}
+
+	// Show BLE logo if it is connected
+	if (BLE_Interface_Exists) {
+		display.showBMP((uint8_t*)BLELogoBitmap, 16, 15, 72, 13);
+		//displayMode = DISPLAYMODE_TETHERED;
+		//BLEWasActive = true;
+	} else {
+		// Show USB logo if it is connected
+		if (USB_Interface_Exists) {
+			display.showBMP((uint8_t*)USBLogoBitmap, 16, 15, 72, 13);
+			//displayMode = DISPLAYMODE_TETHERED_USB;
+			//USBWasActive = true;
+		}
+	}
+
+	display.set_font(UbuntuCondensed20x26);
+	display.locate(3, 10);
+	display.foreground((uint16_t)Black);
+	display.background((uint16_t)White);
+
+	switch (displayMode) {
+
+		case DISPLAYMODE_RECORDING:
+
+			display.fillrect(8,  46, 27,  23, White);
+			display.fillrect(9,  45, 25,  25, White);
+			display.fillrect(10, 44, 23,  27, White);
+
+			if (ppg_lcd_count == 0) {
+				display.fillellipse(21, 57, 8, 8, (uint16_t) Black);
+			}
+
+			snprintf(buffer, 32, "REC");
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(40, 36);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf(buffer);
+
+
+			ppg_lcd_count++;
+			if (ppg_lcd_count > 1) {
+				ppg_lcd_count = 0;
+			}
+
+			break;
+
+
+		case DISPLAYMODE_RECORDING_STOP:
+			display.printf("CONFIRM");
+			snprintf(buffer, 32, "STOP");
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(5, 36);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf(buffer);
+
+			break;
+
+		case DISPLAYMODE_INFO:
+			display.printf("INFO");
+
+
+			display.set_font(Arial10x10);
+
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			snprintf(buffer, 32, "BLE MAC:");
+			display.locate(4, 40);
+			display.printf(buffer);
+			snprintf(buffer, 32, "%02X:%02X:%02X:%02X:%02X:%02X", m_mac_addr_[0],  m_mac_addr_[1], m_mac_addr_[2],  m_mac_addr_[3], m_mac_addr_[4],  m_mac_addr_[5]);
+			display.locate(4, 50);
+			display.printf(buffer);
+
+			snprintf(buffer, 32, "FW Version:");
+			display.locate(4, 66);
+			display.printf(buffer);
+
+			snprintf(buffer, 32, "%s", FIRMWARE_VERSION);
+			display.locate(4, 76);
+			display.printf(buffer);
+
+			break;
+
+		case DISPLAYMODE_TIME:
+			display.printf("TIME");
+			seconds = time(NULL);
+			strftime(buffer, 32, "%I:%M", localtime(&seconds));
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(6, 40);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf(buffer);
+			snprintf(buffer, 32, "MAC:%02X:%02X", m_mac_addr_[4],  m_mac_addr_[5]);
+			display.set_font(Arial10x10);
+			display.locate(60, 20);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf(buffer);
+
+			while (1) {
+				if (seconds >= 86400) {
+					seconds = seconds % 86400;
+				} else {
+					break;
+				}
+			}
+
+			if (seconds < 43200) {
+				display.showBMP((uint8_t*)AM_Bitmap, 16, 9, 104, 45);
+			} else {
+				display.showBMP((uint8_t*)PM_Bitmap, 16, 9, 104, 45);
+			}
+
+
+			break;
+
+		case DISPLAYMODE_PPG:
+			display.printf("PPG");
+
+			//Blink "MEASURING" for the first 13 seconds (settling time of ppg)
+
+			display.set_font(UbuntuCondensed16x21);
+			display.locate(12, 52);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+
+			if(ppg_lcd_count<25)
+			{
+				if(ppg_lcd_count & 0x01)
+				{
+					display.printf("         ");
+				}
+				else
+				{
+					display.printf("MEASURING");
+				}
+			}
+
+			//print the heart rate (it is settled now)
+			else {
+				if (ppg_lcd_count > 80) {
+					ppg_lcd_count = 70;
+				}
+
+				display.set_font(UbuntuCondensed38x47);
+				display.locate(8, 40);
+				display.foreground((uint16_t)Black);
+				display.background((uint16_t)White);
+
+				if (instant_hr_activityClass == ACTD_REST_ACTIVITY) {
+					hrDisplay_confidenceThreshold = ConfThresLevelRest;
+				} else {
+					hrDisplay_confidenceThreshold = ConfThresLevelOther;
+				}
+				if ((instant_hr_conf > hrDisplay_confidenceThreshold) && (instant_hr > kHeartRateLowerLimit) && (instant_hr < kHeartRateUpperLimit)) {
+					display.printf("%d", instant_hr);
+					last_good_hr = instant_hr;
+					hr_timeout = 0;
+				} else {
+					if (hr_timeout < 200) {
+						hr_timeout++;
+					}
+					if (hr_timeout < 12) {
+						display.printf("%d", last_good_hr);
+					} else {
+						display.printf("--");
+					}
+
+				}
+
+				display.set_font(UbuntuCondensed20x26);
+				display.locate(72, 57);
+				display.foreground((uint16_t)Black);
+				display.background((uint16_t)White);
+				display.printf("BPM");
+			}
+
+			ppg_lcd_count++;
+
+			break;
+#ifdef ENABLE_SPO2
+		case DISPLAYMODE_SPO2_ONESHOT:
+
+			display.printf("SPO2");
+			display.set_font(Arial10x10);
+			display.locate(60,23);
+			display.printf("ONE-SHOT");
+			display.set_font(UbuntuCondensed16x21);
+			display.locate(12,52);
+			display.foreground(Black);
+			display.background(White);
+			if (instant_spo2_percentage != 100 ) {
+				if(ppg_lcd_count & 0x01) {
+					display.printf("         ");
+				} else {
+					if(instant_lowSignalQualityFlag)
+						display.printf("LOWSIGNAL");
+					else
+						display.printf("MEASURING");
+				}
+			} else {
+				if(instant_lowSignalQualityFlag){
+					display.printf("LOWSIGNAL");
+				} else {
+					display.set_font(UbuntuCondensed38x47);
+					display.locate(8,40);
+					display.foreground(Black);
+					display.background(White);
+					display.printf("%d", instant_spo2);
+					display.set_font(UbuntuCondensed20x26);
+					display.locate(72,57);
+					display.foreground(Black);
+					display.background(White);
+					display.printf("%%");
+				}
+			}
+			ppg_lcd_count++;
+
+			break;
+		case DISPLAYMODE_SPO2_CONTINUOUS:
+
+			display.printf("SPO2");
+			display.set_font(Arial10x10);
+			display.locate(60,23);
+			display.printf("NON-STOP");
+			display.set_font(UbuntuCondensed16x21);
+			display.locate(12,52);
+			display.foreground(Black);
+			display.background(White);
+			if (instant_spo2 == 0 ) {
+				if(ppg_lcd_count & 0x01) {
+					display.printf("         ");
+				} else {
+					if(instant_lowSignalQualityFlag)
+						display.printf("LOWSIGNAL");
+					else
+						display.printf("MEASURING");
+				}
+			} else {
+				if(instant_lowSignalQualityFlag){
+					display.printf("LOWSIGNAL");
+				} else {
+					display.set_font(UbuntuCondensed38x47);
+					display.locate(8,40);
+					display.foreground(Black);
+					display.background(White);
+					display.printf("%d", instant_spo2);
+					display.set_font(UbuntuCondensed20x26);
+					display.locate(72,57);
+					display.foreground(Black);
+					display.background(White);
+					display.printf("%%");
+				}
+			}
+			ppg_lcd_count++;
+
+			break;
+#endif
+		case DISPLAYMODE_ECG:
+			display.printf("ECG");
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(8, 40);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("%d", 70);
+
+			display.set_font(UbuntuCondensed20x26);
+			display.locate(72, 57);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("BPM");
+
+			break;
+#ifndef ENABLE_SPO2
+		case DISPLAYMODE_TEMP:
+			display.printf("TEMP");
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(8, 40);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("%2.1f", instant_temp_celsius);
+
+			display.set_font(UbuntuCondensed20x26);
+			display.locate(92, 55);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("%cC", 127);
+
+
+			break;
+#endif
+		case DISPLAYMODE_TETHERED:
+			display.printf("CONN");
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(30, 40);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("BLE", 24);
+
+			display_BLEMode_Active = true;
+
+			break;
+
+		case DISPLAYMODE_TETHERED_USB:
+			if (USB_Interface_MSD) {
+				display.printf("MSD");
+			} else {
+				display.printf("CONN");
+			}
+			display.set_font(UbuntuCondensed38x47);
+			display.locate(30, 40);
+			display.foreground((uint16_t)Black);
+			display.background((uint16_t)White);
+			display.printf("USB", 24);
+
+			display_USBMode_Active = true;
+
+			break;
+
+	}
+
+
+	display.showBMP((uint8_t*)maxim128Bitmaps, 120, 36, 8, 90);
+
+
+	if (refreshed) {
+		refreshed = false;
+		display.update(this->refreshCallback);
+	}
+
+
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/WatchInterface.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,190 @@
+/*
+ * WatchInterface.h
+ *
+ *  Created on: Aug 28, 2018
+ *      Author: Gokhan.Bektas
+ */
+
+#define BATTERY_GAUGE_COUNT 50
+#define BATTERY_CRITICAL_LEVEL 5
+
+
+
+
+#ifndef UTILITIES_WATCHINTERFACE_H_
+#define UTILITIES_WATCHINTERFACE_H_
+#include "mbed.h"
+#include "LS013B7DH03.h"
+#include "version.h"
+#include "BLE_ICARUS.h"
+
+#include "MAX20303.h"
+
+
+    #define DISPLAYMODE_TIME	 		    0
+    #define DISPLAYMODE_PPG		 		    1
+#ifdef ENABLE_SPO2
+    #define DISPLAYMODE_SPO2_ONESHOT	    2
+    #define DISPLAYMODE_SPO2_CONTINUOUS	    3
+#else
+	#define DISPLAYMODE_TEMP                4
+#endif
+    #define DISPLAYMODE_INFO	 		    5
+    #define DISPLAYMODE_ECG		 		    6
+    #define	DISPLAYMODE_TETHERED 		    7
+    #define DISPLAYMODE_TETHERED_USB 	    8
+    #define DISPLAYMODE_LOGO	 		    9
+    #define DISPLAYMODE_RECORDING		    10
+    #define DISPLAYMODE_RECORDING_STOP	    11
+    #define DISPLAYMODE_AFTERBOOT		    12
+
+
+typedef enum {
+
+	BUTTONEVENT_NONE,
+	BUTTONEVENT_UP_PRE,
+	BUTTONEVENT_DOWN_PRE,
+	BUTTONEVENT_UP,
+	BUTTONEVENT_DOWN
+
+} Button_Event;
+
+class WatchInterface
+{
+public:
+
+
+	typedef enum {
+		/** No activity, or very light activity. */
+		ACTD_REST_ACTIVITY = 0,
+		/** Non-rhythmic activities that cannot be classified in the other categories. */
+		ACTD_OTHER_ACTIVITY = 1,
+		/** Walking activity. */
+		ACTD_WALK_ACTIVITY = 2,
+		/** Running activity. */
+		ACTD_RUN_ACTIVITY = 3,
+		/** Biking activity. */
+		ACTD_BIKE_ACTIVITY = 4,
+		/** Rhythmic activities that cannot be classified in the other categories. */
+		ACTD_OTHER_RYTHMIC_ACTIVITY = 5,
+	} actd_ActivityClass_te;
+
+
+	typedef enum {
+		BUTTON_PRESSED  = 1,
+		BUTTON_RELEASED = 0
+
+	} ButtonStatus;
+
+
+	typedef enum {
+		BUTTON_POWER = 0,
+		BUTTON_UP    = 1,
+		BUTTON_DOWN  = 2
+
+	} hspButton;
+
+
+	/** Create an Watch Interface controller
+	 *
+	 *  @param buttonUp    PinName UP button
+	 *  @param buttonDown  PinName DOWN button
+	 *  @param buttonPower PinName POWER button
+	 */
+	WatchInterface(PinName buttonUp, PinName buttonDown, PinName buttonPower, PinName displayCS, PinName displayEXTCOM, PinName displayDISP, SPI* displaySPI);
+
+	void updateDisplay(int batteryLevelToBeScaled);
+	void execute(void);
+	void displayOff(bool off);
+	void DisplayStatus();
+	void DisplayModeUpdated();
+
+	static void refreshCallback(void);
+
+	unsigned char connection_indicator;
+
+	ButtonStatus			getButtonStatus(hspButton button);
+
+	uint16_t 	 			heartRate;
+	uint16_t 	 			heartRateConfidence;
+	volatile bool 			BLE_Interface_Exists, BLE_Interface_Exists_old;
+	volatile bool			USB_Interface_Exists, USB_Interface_Exists_old;
+	volatile bool			USB_Interface_MSD;
+	volatile bool			recording, recording_old;
+
+	bool					recordingStopFlag;
+
+	volatile bool 			modeUpdated;
+
+	unsigned char			batteryLevel;
+
+	volatile Button_Event 	buttonEvent_down;
+	volatile Button_Event 	buttonEvent_up;
+
+	unsigned char 			displayMode;
+	unsigned char 			displayMode_old;
+	bool					isDisplayOff;
+
+	volatile bool			BLEWasActive;
+	volatile bool			USBWasActive;
+
+	bool					ecg_enabled;
+	bool					ppg_enabled;
+
+	bool					bootComplete;
+
+	uint16_t				last_good_hr;
+	uint16_t 				instant_hr;
+	uint16_t 				instant_hr_conf;
+	uint8_t 				instant_hr_activityClass;
+	float					instant_temp_celsius;
+
+	char 					m_mac_addr_[6];
+
+	MAX20303*				m_max20303_;
+
+
+
+protected:
+
+private:
+
+
+
+	//Ticker 		m_watchInterface_ticker_;
+
+	InterruptIn btnUp;
+	InterruptIn btnDown;
+	DigitalIn   btnPower;
+	DigitalOut 	dispCS;
+	PinName		dispEXTCOM;
+	DigitalOut  dispDISP;
+
+	PwmOut		DisplayPWM;
+
+	Timer		interfaceTimer;
+
+	volatile int	buttonTimer;
+
+	void		isr_buttonup();
+	void		isr_buttondown();
+
+	bool		display_BLEMode_Active;
+	bool		display_USBMode_Active;
+
+	silabs::LS013B7DH03 display;
+
+	unsigned char ppg_lcd_count; //a variable used to print "MEASURING" while the ppg settling
+
+	static  bool 			refreshed;
+
+	static const uint16_t kHeartRateUpperLimit = 240;
+	static const uint16_t kHeartRateLowerLimit = 40;
+	static const uint16_t ConfThresLevelRest = 50;
+	static const uint16_t ConfThresLevelOther = 10;
+
+
+};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/mem_debug.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#include "mbed.h"
+
+#if defined(MBED_MEM_TRACING_ENABLED )
+#include "mbed_mem_trace.h"
+#endif /* MBED_MEM_TRACING_ENABLED */
+
+#if defined(MBED_HEAP_STATS_ENABLED)
+#include "mbed_stats.h"
+#endif /* MBED_HEAP_STATS_ENABLED */
+
+#if defined(MBED_STACK_STATS_ENABLED)
+#include "cmsis_os.h"
+#endif /* MBED_STACK_STATS_ENABLED */
+
+
+void mbed_mem_debug_init()
+{
+#if defined(MBED_MEM_TRACING_ENABLED )
+	mbed_mem_trace_set_callback(mbed_mem_trace_default_callback);
+#endif /* MBED_MEM_TRACING_ENABLED */
+}
+
+#if defined(MBED_HEAP_STATS_ENABLED)
+void mbed_heap_stats(const char* func, int line)
+{
+	mbed_stats_heap_t heap_stats;
+	mbed_stats_heap_get(&heap_stats);
+	printf("  HEAP current: %lu, max: %lu, cumulative: %lu bytes (%s:%d)\n",
+	       heap_stats.current_size,
+	       heap_stats.max_size,
+	       heap_stats.total_size,
+	       func, line);
+}
+#endif /* MBED_HEAP_STATS_ENABLED */
+
+#if defined(MBED_STACK_STATS_ENABLED)
+void mbed_stack_stats(const char* func, int line)
+{
+	osThreadId main_id = osThreadGetId();
+
+	osEvent info;
+	info = _osThreadGetInfo(main_id, osThreadInfoStackSize);
+	if (info.status != osOK) {
+		printf("Could not get stack size (%s:%d)\n", func, line);
+	}
+	uint32_t stack_size = (uint32_t)info.value.v;
+	info = _osThreadGetInfo(main_id, osThreadInfoStackMax);
+	if (info.status != osOK) {
+		printf("Could not get max stack (%s:%d)\n", func, line);
+	}
+	uint32_t max_stack = (uint32_t)info.value.v;
+
+	printf("  STACK used: %li, max: %li bytes (%s:%d)\n",
+	       max_stack,
+	       stack_size,
+	       func, line);
+}
+#endif /* MBED_STACK_STATS_ENABLED */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/mem_debug.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *******************************************************************************
+ */
+
+#ifndef _MEM_DEBUG_H_
+#define _MEM_DEBUG_H_
+
+void mbed_mem_debug_init();
+void mbed_heap_stats(const char* func, int line);
+void mbed_stack_stats(const char* func, int line);
+
+#if defined(MBED_HEAP_STATS_ENABLED)
+#define SHOW_MBED_HEAP_STATS mbed_heap_stats(__func__, __LINE__)
+#else
+#define SHOW_MBED_HEAP_STATS
+#endif /* MBED_HEAP_STATS_ENABLED */
+
+#if defined(MBED_STACK_STATS_ENABLED)
+#define SHOW_MBED_STACK_STATS mbed_stack_stats(__func__, __LINE__)
+#else
+#define SHOW_MBED_STACK_STATS
+#endif /* MBED_STACK_STATS_ENABLED */
+
+#endif /* MEM_DEBUG */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/mxm_assert.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,56 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+#ifndef __MXM_ASSERT_H__
+#define __MXM_ASSERT_H__
+
+#include "Peripherals.h"
+
+#define mxm_assert(test)	\
+{	\
+	if (!(test)) {	\
+		pr_err("Assertion (%s:%d)\r\n", __FILE__, __LINE__);	\
+		printf("Assertion (%s:%d)\r\n", __FILE__, __LINE__);	\
+		while (true) {};	\
+	}	\
+}
+
+#define mxm_assert_msg(test, msg)	\
+{	\
+	if (!(test)) {	\
+		pr_err("Assertion (%s:%d): %s\r\n", __FILE__, __LINE__, #msg);	\
+		printf("Assertion (%s:%d): %s\r\n", __FILE__, __LINE__, #msg);	\
+		while (true) {};	\
+	}	\
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/queue.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,691 @@
+/*******************************************************************************
+* Author: Ismail Kose, Ismail.Kose@maximintegrated.com
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+/*
+ * TODO:
+ * Add a function to enqueue data block instead of one by one.
+ * Write function definitions in the header file as doxygen format
+ * Init function will also allocate memory for queue buffer, providing the buffer will not necessary
+ *
+ * */
+
+#include "queue.h"
+#include "mbed.h"
+#include "Peripherals.h"
+
+int queue_reset(struct queue_t *q)
+{
+	if (!q)
+		return -EINVAL;
+
+	q->wr = q->base;
+	q->rd = q->base;
+	q->num_item = 0;
+	q->ovf_item = 0;
+#ifdef QUEUE_USAGE_STATS
+	q->pop_cnt = 0;
+	q->push_cnt = 0;
+	q->stats_period_cnt = 100; // Default
+#endif
+	return 0;
+}
+
+int queue_update_items_size(struct queue_t *q, int item_size)
+{
+	if (!q)
+		return -EINVAL;
+
+	queue_reset(q);
+	q->item_size = item_size;
+	q->buffer_size = q->max_buffer_size - (q->max_buffer_size % item_size);
+	return 0;
+}
+
+int queue_len(struct queue_t *q)
+{
+	int num_elements;
+
+	if (!q)
+		return -EINVAL;
+
+	num_elements = q->num_item;
+	return num_elements;
+}
+
+
+int queue_init(struct queue_t *q, void *buf, int item_size, int buffer_size)
+{
+	if (!q || !buf)
+		return -EINVAL;
+
+	if (buffer_size % item_size != 0)
+		return -EINVAL; // Padding problem
+
+	q->num_item = 0;
+	q->ovf_item = 0;
+	q->base = (char *)buf;
+	q->wr =  (char *)buf;
+	q->rd =  (char *)buf;
+	q->item_size = item_size;
+	q->buffer_size = buffer_size;
+	q->max_buffer_size = buffer_size;
+	q->name = NULL;
+
+#ifdef QUEUE_USAGE_STATS
+	q->pop_cnt = 0;
+	q->push_cnt = 0;
+	q->stats_period_cnt = 100; // Default
+#endif
+
+	return 0;
+}
+
+int queue_init_by_name(struct queue_t *q, void *buf, int item_size, int buffer_size, const char *name)
+{
+	int ret = queue_init(q, buf, item_size, buffer_size);
+
+	if (ret < 0)
+		return ret;
+
+	q->name = (char *)name;
+	return 0;
+}
+
+
+void queue_destroy(struct queue_t *q)
+{
+/* TODO: This is placeholder function, double check the implementation */
+	free((void *)q->base);
+	free((void *)q);
+}
+
+int enqueue(struct queue_t *q, void *data)
+{
+	int ret = 0;
+
+	if (!q || !data)
+		return -EINVAL; // Invalid pointer
+
+	if (q->wr == q->rd)
+		ret = (q->num_item != 0) ? -2 : 0; // Is FIFO Full or Empty?
+
+	if (q->wr >= (q->base + q->buffer_size))
+		q->wr = q->base;
+
+	memcpy((void *)q->wr, data, q->item_size);
+	q->wr = q->wr + q->item_size;
+	q->num_item++;
+	int fifo_size = q->buffer_size / q->item_size;
+	if (q->num_item > fifo_size)
+		q->ovf_item = q->num_item - fifo_size;
+	else
+		q->ovf_item = 0;
+	return ret;
+}
+
+int enqueue_test(struct queue_t *q, void *data)
+{
+	if (!q || !data)
+		return -EINVAL; // Invalid pointer
+
+	q->num_item++;
+	return 0;
+}
+
+
+int dequeue_test(struct queue_t *q, void *data)
+{
+	if (!q || !data)
+		return -EINVAL;
+
+	if (q->num_item > 0)
+		q->num_item--;
+	else
+		return -2;
+	return 0;
+}
+
+int dequeue(struct queue_t *q, void *data)
+{
+	int fifo_size = q->buffer_size / q->item_size;
+
+	if (!q || !data)
+		return -EINVAL;
+
+	if (q->num_item <= 0) {
+		return -2;
+	}
+
+	if (q->num_item > fifo_size) {
+		uint32_t curr_rd_off = ((uint32_t)(q->rd - q->base) + q->num_item * q->item_size);
+		q->rd = (q->base + (curr_rd_off % q->buffer_size));
+		q->num_item = fifo_size; // OVF number samples are already gone.
+
+#ifdef QUEUE_USAGE_STATS
+		q->pop_cnt++;
+
+		if ((q->pop_cnt % q->stats_period_cnt) == 0) {
+			if (q->name) {
+				pr_info("%s:%d (%s) - %d samples lost, avail:%d \n",__func__, __LINE__, q->name, q->ovf_item, q->num_item);
+			} else {
+				pr_info("%s:%d - %d samples lost, avail:%d \n",	__func__, __LINE__, q->ovf_item, q->num_item);
+			}
+		}
+#endif
+	}
+
+	if (q->rd >= (q->base + q->buffer_size))
+		q->rd = q->base;
+
+	memcpy(data, (void *)q->rd, q->item_size);
+	q->rd = q->rd + q->item_size;
+	q->num_item--;
+	if (q->num_item <= fifo_size)
+		q->ovf_item = 0;
+
+#if defined(QUEUE_DEBUG)
+	do {
+		static int cnt;
+
+		if (cnt++ % 100 == 0) {
+			if (q->name) {
+				pr_debug("%s - $ Fifo size: %d, usage: %d\n", q->name, fifo_size, q->num_item);
+			} else {
+				pr_debug("$ Fifo size: %d, usage: %d\n", fifo_size, q->num_item);
+			}
+		}
+	} while(0);
+#endif
+
+	return 0;
+}
+
+bool queue_is_full(struct queue_t *q)
+{
+	if (!q)
+		return -EINVAL;
+
+	int num_items = q->buffer_size / q->item_size;
+
+
+	if (num_items > q->num_item)
+		return false;
+	return true;
+}
+
+int queue_usage(struct queue_t *q, int *total, int *nm_item)
+{
+	if (!q)
+		return -EINVAL;
+
+	*total = q->buffer_size / q->item_size;
+	*nm_item = q->num_item;
+
+	return 0;
+}
+
+int queue_pop(struct queue_t *q)
+{
+	int fifo_size = q->buffer_size / q->item_size;
+
+	if (!q)
+		return -EINVAL;
+
+	if (q->num_item <= 0) {
+		return -2;
+	}
+
+	if (q->num_item > fifo_size) {
+		uint32_t curr_rd_off = ((uint32_t)(q->rd - q->base) + q->num_item * q->item_size);
+		q->ovf_item = q->num_item - fifo_size;
+		q->rd = q->base + (curr_rd_off % q->buffer_size);
+		q->num_item = fifo_size; // OVF number samples are already gone.
+
+#ifdef QUEUE_USAGE_STATS
+		q->push_cnt++;
+
+		if ((q->push_cnt % q->stats_period_cnt) == 0) {
+			if (q->name) {
+				pr_info("%s:%d (%s) - %d samples lost, avail:%d \n",__func__, __LINE__, q->name, q->ovf_item, q->num_item);
+			} else {
+				pr_info("%s:%d - %d samples lost, avail:%d \n",	__func__, __LINE__, q->ovf_item, q->num_item);
+			}
+		}
+#endif
+	} else
+		q->ovf_item = 0;
+
+	if (q->rd >= (q->base + q->buffer_size))
+		q->rd = q->base;
+
+	q->rd = q->rd + q->item_size;
+	q->num_item--;
+
+#if defined(QUEUE_DEBUG)
+	do {
+		static int cnt;
+
+		if (cnt++ % 100 == 0) {
+			if (q->name)
+				pr_debug("%s - $ Fifo size: %d, usage: %d\n", q->name, fifo_size, q->num_item);
+			else
+				pr_debug("$ Fifo size: %d, usage: %d\n", fifo_size, q->num_item);
+		}
+	} while(0);
+#endif
+
+	return 0;
+}
+
+int queue_pop_n(struct queue_t *q, int n)
+{
+	int fifo_size = q->buffer_size / q->item_size;
+
+	if (!q || n < 1)
+		return -EINVAL;
+
+	if (q->num_item < n) {
+		return -2;
+	}
+
+	if (q->num_item > fifo_size) {
+		if (q->name) {
+			pr_info("%s:%d ( %s ) - %d samples lost, avail:%d \n",
+				__func__, __LINE__, q->name, q->num_item - fifo_size, fifo_size);
+		} else {
+			pr_info("%s:%d - %d samples lost, avail:%d \n",
+				__func__, __LINE__, q->num_item - fifo_size, fifo_size);
+		}
+		q->num_item = fifo_size; // OVF number samples are already gone.
+		n = fifo_size;
+		uint32_t curr_rd_off = (uint32_t)(q->rd - q->base) + q->num_item * q->item_size;
+		q->ovf_item = q->num_item - fifo_size;
+		q->rd = q->base + curr_rd_off % q->buffer_size;
+	} else {
+		q->ovf_item = 0;
+	}
+
+	if (q->rd >= (q->base + q->buffer_size))
+		q->rd = q->base;
+
+
+	uint32_t rd_sz = q->item_size * n;
+	uint32_t to_end = (uint32_t)(q->base + q->buffer_size - q->rd);
+	if (to_end < rd_sz) {
+		rd_sz -= to_end;
+		q->rd = q->base;
+	}
+
+	q->rd = q->rd + rd_sz;
+	q->num_item -= n;
+
+	return 0;
+}
+
+int queue_front(struct queue_t *q, void *data)
+{
+#if 0
+	return queue_front_n(q, data, 1);
+#endif
+
+	int fifo_size = q->buffer_size / q->item_size;
+	void *rd = 0;
+
+	if (!q || !data)
+		return -EINVAL;
+
+	if (q->num_item <= 0) {
+		return -2;
+	}
+
+	if (q->num_item > fifo_size) {
+		uint32_t curr_rd_off = (uint32_t)(q->rd - q->base) + q->num_item * q->item_size;
+		rd = q->base + (curr_rd_off % q->buffer_size);
+		if (q->name) {
+			pr_info("%s:%d ( %s )- %d samples lost, avail:%d cap:%d \n",
+				__func__, __LINE__, q->name, q->ovf_item, q->num_item, fifo_size);
+		} else {
+			pr_info("%s:%d - %d samples lost, avail:%d cap:%d \n",
+				__func__, __LINE__, q->ovf_item, q->num_item, fifo_size);
+		}
+	} else {
+		q->ovf_item = 0;
+		rd = q->rd;
+	}
+
+	if (q->rd >= (q->base + q->buffer_size))
+		rd = q->base;
+
+	memcpy(data, (void *)rd, q->item_size);
+	return 0;
+}
+
+int queue_front_n(struct queue_t *q, void *data, int n, int buf_sz)
+{
+	int fifo_size = q->buffer_size / q->item_size;
+	char *rd = 0;
+	char *wr = (char *)data;
+
+	if (!q || !data || n < 1)
+		return -EINVAL;
+
+	if (q->num_item < n) {
+		return -2;
+	}
+
+	if (q->num_item > fifo_size) {
+		if (q->name) {
+			pr_info("\n%s:%d ( %s ) - %d samples lost, avail:%d \n",
+					__func__, __LINE__, q->name, q->num_item - fifo_size, fifo_size);
+		} else {
+			pr_info("\n%s:%d - %d samples lost, avail:%d \n",
+				__func__, __LINE__, q->num_item - fifo_size, fifo_size);
+		}
+		q->num_item = fifo_size;
+		n = fifo_size;
+		uint32_t curr_rd_off = (uint32_t)(q->rd - q->base) + q->num_item * q->item_size;
+		rd = q->base + (curr_rd_off % q->buffer_size);
+	} else {
+		q->ovf_item = 0;
+		rd = q->rd;
+	}
+
+	if (q->rd >= (q->base + q->buffer_size))
+		rd = q->base;
+
+	uint32_t rd_sz = q->item_size * n;
+
+	if (buf_sz < rd_sz) {
+		if (q->name) {
+			pr_info("\n%s:%d ( %s ) - Insufficient buffer size: %d\n",
+					__func__, __LINE__, q->name, buf_sz);
+		} else {
+			pr_info("\n%s:%d - Insufficient buffer size: %d\n",
+				__func__, __LINE__, buf_sz);
+		}
+		return -EINVAL;
+	}
+
+	uint32_t to_end = (uint32_t)(q->base + q->buffer_size - q->rd);
+	if (to_end < rd_sz) {
+		memcpy(wr, rd, to_end);
+		rd_sz -= to_end;
+		rd = q->base;
+		wr += to_end;
+		memcpy(wr, rd, rd_sz);
+
+	} else {
+		memcpy(wr, rd, rd_sz);
+	}
+
+	return 0;
+}
+
+int enqueue_string(struct queue_t *q, char *data, int sz)
+{
+	int ret = 0;
+	int buf_index;
+	char *wr_ptr;
+
+	if (!q || !data || sz <= 0)
+		return -EFAULT; // Invalid parameters
+
+	if (q->wr == q->rd)
+		ret = (q->num_item != 0) ? -2 : 0; // Is FIFO Full or Empty?
+
+	if (q->wr >= (q->base + q->buffer_size))
+		q->wr = q->base;
+
+	if ((q->num_item + sz) > q->buffer_size) {
+#if defined(QUEUE_DEBUG)
+		{
+			char buf[128];
+			int len;
+
+			if (q->name)
+				len = sprintf(buf, "\r\n**** %s - ( %s ) - Fifo is full. num_item: %d, sz: %d, buffer size: %d\r\n",
+						__func__, q->name, q->num_item, sz, q->buffer_size);
+			else
+				len = sprintf(buf, "\r\n**** %s - Fifo is full. num_item: %d, sz: %d, buffer size: %d\r\n",
+						__func__, q->num_item, sz, q->buffer_size);
+
+			UART_Write(UART_PORT, (uint8_t*)buf, len);
+		}
+#endif
+		return -ENOMEM;
+	}
+
+	buf_index = (uint32_t)(q->wr - q->base);
+	wr_ptr = q->base;
+	q->num_item += sz;
+	while(sz--)
+		wr_ptr[buf_index++ % q->buffer_size] = *data++;
+
+	q->wr = q->base + buf_index % q->buffer_size;
+	return ret;
+}
+
+int dequeue_string(struct queue_t *q, char *buf, int buffer_size)
+{
+	char *rd_ptr;
+	int buf_index;
+	int len;
+
+	if (!q || !buf || buffer_size <= 0)
+		return -EFAULT;
+
+	if (q->num_item <= 0) {
+		return -EPERM;
+	}
+
+	rd_ptr = (char *)q->base;
+	buf_index = (uint32_t)(q->rd - q->base);
+	len = q->num_item;
+
+	while (buffer_size-- && q->num_item--) {
+		char tmp = rd_ptr[buf_index % q->buffer_size];
+		rd_ptr[buf_index % q->buffer_size] = 0; // Remove this later on
+		buf_index++;
+		*buf++ = tmp;
+		if (tmp == '\0')
+			break;
+	}
+
+	if (q->num_item < 0) {
+		/* Data corruption in FIFO */
+		q->num_item = 0;
+	} else
+		len -= q->num_item;
+
+	q->rd = q->base + buf_index % q->buffer_size;
+
+	return len;
+}
+
+int queue_str_len(struct queue_t *q)
+{
+	char *rd_ptr;
+	int buf_index;
+	int len, i;
+
+	if (!q)
+		return -EFAULT;
+
+	if (q->num_item <= 0) {
+		return 0;
+	}
+
+	rd_ptr = q->base;
+	buf_index = (uint32_t)(q->rd - q->base);
+	i = q->num_item;
+	len = 0;
+
+	while (i--) {
+		char tmp = rd_ptr[buf_index % q->buffer_size];
+		buf_index++;
+		if (tmp == '\0')
+			break;
+		len++;
+	}
+
+	return len;
+}
+
+#if 0
+void queue_test(void)
+{
+	int ret;
+	ppg_data_t ppg_test = { 0, };
+	ppg_data_t ppg_test_out = { 0, };
+	int i, j, ii, jj;
+	static ppg_data_t ppg_data[10];
+	static queue_t queue;
+
+	srand((unsigned)time(NULL));
+	ret = queue_init(&queue, &ppg_data, sizeof(ppg_data_t), sizeof(ppg_data));
+	while (1) {
+		ii = rand() % 20;
+		for (i = 0; i < ii; i++) {
+			/* Test data */
+			ppg_test.timestamp++;
+			ppg_test.ir++;
+			ppg_test.red++;
+			ppg_test.green++;
+			/* Test functions */
+			ret = enqueue(&queue, &ppg_test);
+		}
+		jj = rand() % 20;
+		for (j = 0; j < jj; j++) {
+			ret = dequeue(&queue, &ppg_test_out);
+		}
+	}
+}
+#endif
+void queue_n_test(void)
+{
+	struct queue_t q;
+	uint8_t buf[5];
+	uint8_t peek_buf[5];
+	int error;
+	int i;
+	error = queue_init(&q, &buf[0], 1, sizeof(buf));
+	if (error)
+		printf("queue_init error :(\r\n");
+
+	uint8_t val = 0;
+	enqueue(&q, &val);
+	val = 1;
+	enqueue(&q, &val);
+	val = 2;
+	enqueue(&q, &val);
+	val = 3;
+	enqueue(&q, &val);
+	val = 4;
+	enqueue(&q, &val);
+
+	printf("enqueued 0,1,2,3,4\r\n");
+
+	error = queue_front_n(&q, &peek_buf, 5, sizeof(peek_buf));
+	if (error) {
+		printf("queue_front_n n=5 error :(\r\n");
+	} else {
+		printf("queue_front_n n=5: ");
+		for (i = 0; i < 5; i++) {
+			printf("%d ", peek_buf[i]);
+		}
+		printf("\r\n");
+	}
+
+	error = queue_front_n(&q, &peek_buf, 6, sizeof(peek_buf));
+	if (error)
+		printf("queue_front_n n=6 error :)\r\n");
+	else
+		printf("queue_front_n n=6 succeeded :(\r\n");
+
+	error = queue_pop_n(&q, 2);
+	if (error)
+		printf("queue_pop_n n=2 error :(\r\n");
+	else
+		printf("queue_pop_n n=2 succeeded :)\r\n");
+
+	error = queue_front_n(&q, &peek_buf, 5, sizeof(peek_buf));
+	if (error)
+		printf("queue_front_n n=5 error :)\r\n");
+
+	error = queue_front_n(&q, &peek_buf, 3, sizeof(peek_buf));
+	if (error) {
+		printf("queue_front_n n=3 error :(\r\n");
+	} else {
+		printf("queue_front_n n=3: ");
+		for (i = 0; i < 3; i++) {
+			printf("%d ", peek_buf[i]);
+		}
+		printf("\r\n");
+	}
+
+	val = 0;
+	enqueue(&q, &val);
+	val = 1;
+	enqueue(&q, &val);
+
+	printf("enqueued 0,1\r\n");
+
+	error = queue_front_n(&q, &peek_buf, 5, sizeof(peek_buf));
+	if (error) {
+		printf("queue_front_n n=5 error :(\r\n");
+	} else {
+		printf("queue_front_n n=5: ");
+		for (i = 0; i < 5; i++) {
+			printf("%d ", peek_buf[i]);
+		}
+		printf("\r\n");
+	}
+
+	error = queue_pop_n(&q, 4);
+	if (error)
+		printf("queue_pop_n n=4 error :(\r\n");
+	else
+		printf("queue_pop_n n=4 succeeded :)\r\n");
+
+	error = queue_front_n(&q, &peek_buf, 1, sizeof(peek_buf));
+	if (error) {
+		printf("queue_front_n n=1 error :(\r\n");
+	} else {
+		printf("queue_front_n n=1: ");
+		for (i = 0; i < 1; i++) {
+			printf("%d ", peek_buf[i]);
+		}
+		printf("\r\n");
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/queue.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,288 @@
+/*******************************************************************************
+* Author: Ismail Kose, Ismail.Kose@maximintegrated.com
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+
+#ifndef _QUEUE_H_
+#define _QUEUE_H_
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <errno.h>
+
+#ifndef UNIT_TEST
+#include "platform.h"
+#else
+#ifndef enter_critical_section
+#define enter_critical_section()
+#endif
+
+#ifndef exit_critical_section
+#define exit_critical_section()
+#endif
+
+#ifndef pr_info
+#define pr_info(...) printf(__VA_ARGS__)
+#endif
+#endif
+
+#define QUEUE_USAGE_STATS
+
+struct queue_t {
+	char *wr; // write pointer
+	char *rd; // read pointer
+	char *base; // buffer base pointer
+	int num_item; // number of data item
+	int ovf_item; // Number of overflowed data
+	int buffer_size; // buffer size in bytes
+	int max_buffer_size; // buffer size in bytes
+	int item_size; // data size
+	char *name;
+#ifdef QUEUE_USAGE_STATS
+	int pop_cnt;
+	int push_cnt;
+	int stats_period_cnt;
+#endif
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief		Queue initialization.
+ * @param[in]   *q Points to the queue handle
+ * @param[in]   *buf Points to external queue buffer
+ * @param[in]   item_size Data size
+ * @param[in]   buffer_size Total buffer size in bytes
+ * @param[out]  *pDst points to output matrix structure
+ * @return	The function returns 0: success
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ *               -2: Queue buffer is full, no more space
+ **/
+int queue_init(struct queue_t *q, void *buf, int item_size, int buffer_size);
+
+
+
+/**
+ * @brief		Queue initialization by name.
+ * @param[in]   *q Points to the queue handle
+ * @param[in]   *buf Points to external queue buffer
+ * @param[in]   item_size Data size
+ * @param[in]   buffer_size Total buffer size in bytes
+ * @param[out]  *pDst points to output matrix structure
+ * @param[in]   Set queue name for debugging
+ * @return      The function returns 0: success
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ *               -2: Queue buffer is full, no more space
+ **/
+int queue_init_by_name(struct queue_t *q, void *buf, int item_size, int buffer_size, const char *name);
+
+
+
+/**
+ * @brief		Reset queue
+ * @param[in]   *q Points to the queue handle
+ * @param[in]   *data Points to any type of data to put FIFO
+ * @param[out]  *pDst Points to output matrix structure
+ * @return      The function returns 0: success
+ *               -EINVAL (-22): Invalid Pointer
+ *
+ **/
+int queue_reset(struct queue_t *q);
+
+
+
+/**
+ * @brief		Update item size and reset queue. Usign of this command requires exta cauion.
+ * @param[in]   *q Points to the queue handle
+ * @return     The function returns 0: success
+ *					-EINVAL (-22): Invalid Pointer
+ *
+ **/
+int queue_update_items_size(struct queue_t *q, int item_size);
+
+
+
+/**
+ * @brief		Data enqueue.
+ * @param[in]   *q points to the queue handle
+ * @param[in]   *data points to any type of data to put FIFO
+ * @return      The function returns 0: success
+ *               -EINVAL (-22): Invalid Pointer
+ *               -2: Queue buffer is full, no more space
+ **/
+int enqueue(struct queue_t *q, void *data);
+
+
+
+/**
+ * @brief		Data dequeue.
+ * @param[in]   *q points to the queue handle
+ * @param[in]   *data points to any type of data to put FIFO
+ * @param[out]  *data pop data from Queue
+ * @return      The function returns 0: success
+ *               -EINVAL (-22): Invalid Pointer or data
+ *               -2: Queue buffer is empty
+ **/
+int dequeue(struct queue_t *q, void *data);
+
+
+
+/**
+ * @brief		Queue Destroy
+ * @param[in]   *q points to the queue handle
+ **/
+void queue_destroy(struct queue_t *q);
+
+
+
+/**
+ * @brief		Number of elements in Queue
+ * @param[in]   *q points to the queue handle
+ * @return		number of elements
+ **/
+int queue_len(struct queue_t *q);
+
+
+
+/**
+ * @brief		Copies an item from the front of queue to data, but does not remove it from queue
+ * @param[in]  *q points to the queue handle
+ * @param[out]  Copy of item from front of the queue
+ * @return		if value is greater than 0, return value is number of elements.
+				If value is less than 0, returns -EINVAL (-22)
+ **/
+int queue_front(struct queue_t *q, void *data);
+
+
+
+/**
+ * @brief		Copies n items from the front of the queue, but does not remove them
+ * @param[in]	*q - points to the queue handle
+ * @param[out]	*data - The buffer to hold copied data
+ * @param[in]	n - the number of items to remove
+ * @param[in]	buf_sz - input *data buffer size
+ * @return		0: success
+ *                -EINVAL (-22): Invalid pointer
+ *                -2: Queue contains less than n items
+ */
+int queue_front_n(struct queue_t *q, void *data, int n, int buf_sz);
+
+
+
+/**
+ * @brief		Removes an item from front of queue
+ * @param[in]	*q points to the queue handle
+ * @return		status, success or fail
+ **/
+int queue_pop(struct queue_t *q);
+
+/**
+ * @brief		Removes n items from the front of the queue
+ * @param[in]	*q - points to the queue handle
+ * @param[in]	n - the number of items to remove
+ * @return		0: success
+ *                -EINVAL (-22): Invalid pointer
+ *                -2: Queue contains less than n items
+ */
+int queue_pop_n(struct queue_t *q, int n);
+
+
+
+/**
+ * @brief		Checks if queue is fill
+ * @param[in]	*q points to the queue handle
+ * @return		true (full), false (not full)
+ *
+ **/
+bool queue_is_full(struct queue_t *q);
+
+
+
+/**
+ * @brief		returns fifo usage info
+ * @param[in]	*q points to the queue handle
+ * @param[out]	*total returns total FIFO size in number of elements
+ * @param[out]	*nm_item returns number of elements in FIFO
+ * @return		status, success or fail
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ **/
+int queue_usage(struct queue_t *q, int *total, int *nm_item);
+
+
+
+/**
+ * @brief		Pops out delimiter terminated string
+ * @param[in]	*q points to the queue handle
+ * @param[out]	*buf output char array to write
+ * @param[in]	buffer_size Maximum buffer size to write the output char array
+ * @return		status, string length if positive or fail if negative
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ **/
+int dequeue_string(struct queue_t *q, char *buf, int buffer_size);
+
+
+
+/**
+ * @brief		Pushes null terminated string (char array)
+ * @param[in]	*q points to the queue handle
+ * @param[in]	*data string(char array) to add it to the circullar buffer
+ * @param[in]	sz 'data' length
+ * @return		status, success or fail
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ **/
+int enqueue_string(struct queue_t *q, char *data, int sz);
+
+
+/**
+ * @brief		Counts length of string in queue
+ * @param[in]	*q points to the queue handle
+ * @return		status, success or fail
+ *               -EINVAL (-22): Invalid Pointer, data or parameters
+ *               if ret >= 0, string length
+ **/
+int queue_str_len(struct queue_t *q);
+
+
+
+void queue_n_test(void);
+
+int enqueue_test(struct queue_t *q, void *data);
+int dequeue_test(struct queue_t *q, void *data);
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_QUEUE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/utils.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,224 @@
+/***************************************************************************
+* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+****************************************************************************
+*/
+
+#include "utils.h"
+#include <ctype.h>
+#include "Peripherals.h"
+
+/*
+ * @brief Parse DeviceStudio get_reg command 
+ * @details format is "get_reg <type> <addr>"
+ *
+ * @return 0 on success, -1 on failure
+ */
+int parse_get_reg_cmd(const char* str, const char* dev_type, uint8_t* addr)
+{
+	const char* num_start = str + strlen("get_reg") + strlen(dev_type) + 2;
+	unsigned int addr32;
+
+	int num_found = sscanf(num_start, "%x", &addr32);
+	if (num_found == 1) {
+		*addr = (uint8_t)addr32;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+
+/*
+ * @brief Parse DeviceStudio set_reg command 
+ * @details format is "set_reg <type> <addr> <val>"
+ *
+ * @return 0 on success, -1 on failure
+ */
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint8_t* val)
+{
+	const char* num_start = str + strlen("set_reg") + strlen(dev_type) + 2;
+	unsigned int addr32, val32;
+
+	int num_found = sscanf(num_start, "%x %x", &addr32, &val32);
+	if (num_found == 2) {
+		*addr = (uint8_t)addr32;
+		*val = (uint8_t)val32;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint16_t* val)
+{
+	const char* num_start = str + strlen("set_reg") + strlen(dev_type) + 2;
+	unsigned int addr32, val32;
+
+	int num_found = sscanf(num_start, "%x %x", &addr32, &val32);
+	if (num_found == 2) {
+		*addr = (uint8_t)addr32;
+		*val = (uint16_t)val32;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint32_t* val)
+{
+	const char* num_start = str + strlen("set_reg") + strlen(dev_type) + 2;
+	unsigned int addr32, val32;
+
+	int num_found = sscanf(num_start, "%x %x", &addr32, &val32);
+	if (num_found == 2) {
+		*addr = (uint8_t)addr32;
+		*val = val32;
+		return 0;
+	} else {
+		return -1;
+	}
+}
+
+/// TODO: additional for float
+/*
+int parse_cmd_data(const char* str, const char* cmd, float *vals, int vals_sz, bool hex)
+{
+	const char* sptr = str + strlen(cmd);
+	int found = 0;
+	int ssfound;
+	unsigned int val32;
+
+	while (found < vals_sz) {
+		while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+		if (*sptr == '\0')
+			break;
+		sptr++;
+
+		if (hex)
+			ssfound = sscanf(sptr, "%x", &val32);
+		else
+			ssfound = sscanf(sptr, "%d", &val32);
+		if (ssfound != 1)
+			break;
+		*(vals + found) = (uint8_t)val32;
+		found++;
+	}
+
+	return found;
+}
+*/
+int parse_cmd_data(const char* str, const char* cmd, uint8_t *vals, int vals_sz, bool hex)
+{
+	const char* sptr = str + strlen(cmd);
+	int found = 0;
+	int ssfound;
+	unsigned int val32;
+
+	while (found < vals_sz) {
+		while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+		if (*sptr == '\0')
+			break;
+		sptr++;
+
+		if (hex)
+			ssfound = sscanf(sptr, "%x", &val32);
+		else
+			ssfound = sscanf(sptr, "%d", &val32);
+		if (ssfound != 1)
+			break;
+		*(vals + found) = (uint8_t)val32;
+		found++;
+	}
+
+	return found;
+}
+
+int parse_cmd_data(const char* str, const char* cmd, uint16_t *vals, int vals_sz, bool hex)
+{
+	const char* sptr = str + strlen(cmd);
+	int found = 0;
+	int ssfound;
+	unsigned int val32;
+
+	while (found < vals_sz) {
+		while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+		if (*sptr == '\0')
+			break;
+		sptr++;
+
+		if (hex)
+			ssfound = sscanf(sptr, "%x", &val32);
+		else
+			ssfound = sscanf(sptr, "%d", &val32);
+		if (ssfound != 1)
+			break;
+		*(vals + found) = (uint16_t)val32;
+		found++;
+	}
+
+	return found;
+}
+
+int parse_cmd_data(const char* str, const char* cmd, uint32_t *vals, int vals_sz, bool hex)
+{
+	const char* sptr = str + strlen(cmd);
+	int found = 0;
+	int ssfound;
+
+	while (found < vals_sz) {
+		while (*sptr != ' ' && *sptr != '\0') { sptr++; }
+		if (*sptr == '\0')
+			break;
+		sptr++;
+
+		if (hex)
+			ssfound = sscanf(sptr, "%x", vals + found);
+		else
+			ssfound = sscanf(sptr, "%d", vals + found);
+		if (ssfound != 1)
+			break;
+		found++;
+	}
+
+	return found;
+}
+
+bool starts_with(const char* str1, const char* str2)
+{
+	while (*str1 && *str2) {
+		if (*str1 != *str2)
+			return false;
+		str1++;
+		str2++;
+	}
+
+	if (*str2)
+		return false;
+
+	return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Utilities/utils.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,101 @@
+ /***************************************************************************
+  * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+  * copy of this software and associated documentation files (the "Software"),
+  * to deal in the Software without restriction, including without limitation
+  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+  * and/or sell copies of the Software, and to permit persons to whom the
+  * Software is furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice shall be included
+  * in all copies or substantial portions of the Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+  * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+  * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+  * OTHER DEALINGS IN THE SOFTWARE.
+  *
+  * Except as contained in this notice, the name of Maxim Integrated
+  * Products, Inc. shall not be used except as stated in the Maxim Integrated
+  * Products, Inc. Branding Policy.
+  *
+  * The mere transfer of this software does not imply any licenses
+  * of trade secrets, proprietary technology, copyrights, patents,
+  * trademarks, maskwork rights, or any other form of intellectual
+  * property whatsoever. Maxim Integrated Products, Inc. retains all
+  * ownership rights.
+  ****************************************************************************
+  */
+
+
+#ifndef __UTILS__H_
+#include <mbed.h>
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(arr)        (sizeof(arr)/sizeof(arr[0]))
+#endif
+
+/*
+ * @brief Parse DeviceStudio get_reg command 
+ * @details format is "get_reg <type> <addr>"
+ *
+ * @param[in] str - Pointer to start of command
+ * @param[in] dev_type - device type, ie "ppg"
+ * @param[in] addr - Parsed address
+ *
+ * @return 0 on success, -1 on failure
+ */
+int parse_get_reg_cmd(const char* str, const char* dev_type, uint8_t* addr);
+
+/*
+ * @brief Parse DeviceStudio set_reg command 
+ * @details format is "set_reg <type> <addr> <val>"
+ *
+ * @param[in] str - Pointer to start of command
+ * @param[in] dev_type - device type, ie "ppg"
+ * @param[in] addr - Parsed address
+ * @param[in] val - Parsed value
+ *
+ * @return 0 on success, -1 on failure
+ */
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint8_t* val);
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint16_t* val);
+int parse_set_reg_cmd(const char* str, const char* dev_type, uint8_t* addr, uint32_t* val);
+
+/*
+ * @brief Parse data values sent by DeviceStudio command
+ * @details For a command format of "<cmd> <val1> <val2> ... <valN>",
+ * 			This command will parse val1 - valN into vals array
+ *
+ * @param[in] str - The full string received
+ * @param[in] cmd - The command only
+ * @param[out] vals - The output array of values
+ * @param[in] vals_sz - The maximum number of values the output array vals can hold
+ * @param[in] hex - Set to true for hexidecimal values, false for decimal
+ *
+ * @return -1 on error, otherwise the number of values parsed
+ */
+int parse_cmd_data(const char* str, const char* cmd, uint8_t *vals, int vals_sz, bool hex);
+int parse_cmd_data(const char* str, const char* cmd, uint16_t *vals, int vals_sz, bool hex);
+int parse_cmd_data(const char* str, const char* cmd, uint32_t *vals, int vals_sz, bool hex);
+
+/*
+ * @brief Determine if str2 is a substring of str1 beginning at idx 0
+ *
+ * @param[in] str1 - The parent string
+ * @param[in] str2 - The substring which should exist starting at index 0 of str1
+ *
+ * @return true if str1 starts with str2
+ *
+ * Examples:
+ * 	str1 = "An apple", str2 = "An a", returns true
+ * 	str1 = "A dog", str2 = "A a", returns false
+ * 	str1 = "An apple", str2 = "An apple tree", returns false
+ */
+bool starts_with(const char* str1, const char* str2);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build_version.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,5 @@
+#ifndef __BUILD_VERSION_H__
+#define __BUILD_VERSION_H__
+#define BUILD_SOURCE_BRANCH "HEAD"
+#define BUILD_SOURCE_HASH "c0a9ad8d3fa420b7d4e62190fe7832376c9afd3b"
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debug_oldmbedos.json	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,44 @@
+{
+    "GCC_ARM": {
+        "common": ["-c", "-Wall", "-Wextra",
+                   "-Wno-unused-parameter", "-Wno-missing-field-initializers",
+                   "-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
+                   "-ffunction-sections", "-fdata-sections", "-funsigned-char",
+                   "-MMD", "-fno-delete-null-pointer-checks",
+                   "-fomit-frame-pointer", "-O0", "-g3"],
+        "asm": ["-x", "assembler-with-cpp"],
+        "c": ["-std=gnu99"],
+        "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"],
+        "ld": ["-Wl,--gc-sections", "-Wl,--wrap,main", "-Wl,--wrap,_malloc_r",
+               "-Wl,--wrap,_free_r", "-Wl,--wrap,_realloc_r",
+               "-Wl,--wrap,_calloc_r", "-Wl,--wrap,exit", "-Wl,--wrap,atexit"]
+    },
+    "ARM": {
+        "common": ["-c", "--gnu", "-Otime", "--split_sections",
+                   "--apcs=interwork", "--brief_diagnostics", "--restrict",
+                   "--multibyte_chars", "-O0", "-g"],
+        "asm": [],
+        "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"],
+        "cxx": ["--cpp", "--no_rtti", "--no_vla"],
+        "ld": []
+    },
+    "uARM": {
+        "common": ["-c", "--gnu", "-Otime", "--split_sections",
+                   "--apcs=interwork", "--brief_diagnostics", "--restrict",
+                   "--multibyte_chars", "-O0", "-D__MICROLIB", "-g",
+                   "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD"],
+        "asm": [],
+        "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"],
+        "cxx": ["--cpp", "--no_rtti", "--no_vla"],
+        "ld": ["--library_type=microlib"]
+    },
+    "IAR": {
+        "common": [
+            "--no_wrap_diagnostics",  "-e",
+            "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-On", "-r"],
+        "asm": [],
+        "c": ["--vla"],
+        "cxx": ["--guard_calls", "--no_static_destruction"],
+        "ld": ["--skip_dynamic_initialization", "--threaded_lib"]
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doxygen.conf	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,332 @@
+# Doxyfile 1.8.13
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = "wearables_MBED"
+PROJECT_NUMBER         = $(PROJECT_SCM_HASH)
+PROJECT_BRIEF          = 
+PROJECT_LOGO           = 
+OUTPUT_DIRECTORY       = BUILD/doc
+CREATE_SUBDIRS         = NO
+ALLOW_UNICODE_NAMES    = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 4
+ALIASES                = 
+TCL_SUBST              = 
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+EXTENSION_MAPPING      = 
+MARKDOWN_SUPPORT       = YES
+TOC_INCLUDE_HEADINGS   = 0
+AUTOLINK_SUPPORT       = YES
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING            = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
+TYPEDEF_HIDES_STRUCT   = NO
+LOOKUP_CACHE_SIZE      = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_PACKAGE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = NO
+HIDE_SCOPE_NAMES       = YES
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES     = YES
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    = 
+LAYOUT_FILE            = 
+CITE_BIB_FILES         = 
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_AS_ERROR          = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = $(PROJECT_SOURCES)
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.h \
+                         *.cpp
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+FILTER_SOURCE_PATTERNS = 
+USE_MDFILE_AS_MAINPAGE = 
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+CLANG_ASSISTED_PARSING = NO
+CLANG_OPTIONS          = 
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_EXTRA_STYLESHEET  = 
+HTML_EXTRA_FILES       = 
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = NO
+HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     = 
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               = 
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   = 
+QHP_CUST_FILTER_ATTRS  = 
+QHP_SECT_FILTER_ATTRS  = 
+QHG_LOCATION           = 
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+GENERATE_TREEVIEW      = YES
+ENUM_VALUES_PER_LINE   = 4
+TREEVIEW_WIDTH         = 250
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS     = 
+MATHJAX_CODEFILE       = 
+SEARCHENGINE           = NO
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       = 
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     = 
+EXTRA_SEARCH_MAPPINGS  = 
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+LATEX_FOOTER           = 
+LATEX_EXTRA_STYLESHEET = 
+LATEX_EXTRA_FILES      = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
+LATEX_TIMESTAMP        = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+RTF_SOURCE_CODE        = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_SUBDIR             = 
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+EXTERNAL_PAGES         = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            = 
+DIA_PATH               = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           = 
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MSCFILE_DIRS           = 
+DIAFILE_DIRS           = 
+PLANTUML_JAR_PATH      = 
+PLANTUML_CFG_FILE      = 
+PLANTUML_INCLUDE_PATH  = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
\ No newline at end of file
--- a/main.cpp	Wed Apr 10 11:51:07 2019 +0000
+++ b/main.cpp	Wed Apr 10 14:56:25 2019 +0300
@@ -1,2 +1,546 @@
+#include "mbed.h"
+#include "USBSerial.h"
+#include "version.h"
+#include "DSInterface.h"
+#include "Peripherals.h"
+#include "usb_regs.h"
 
-#include "mbed.h"
\ No newline at end of file
+#define GPIO_PRIOINVERSION_MASK     NVIC_SetPriority(GPIO_P0_IRQn, 5); \
+	                                NVIC_SetPriority(GPIO_P1_IRQn, 5); \
+	                                NVIC_SetPriority(GPIO_P2_IRQn, 5); \
+									NVIC_SetPriority(GPIO_P3_IRQn, 5); \
+									NVIC_SetPriority(GPIO_P4_IRQn, 5); \
+									NVIC_SetPriority(GPIO_P5_IRQn, 5); \
+									NVIC_SetPriority(GPIO_P6_IRQn, 5);
+
+
+#if defined(MBED_MEM_TRACING_ENABLED)
+#include "mbed_mem_trace.h"
+#endif /* MBED_MEM_TRACING_ENABLED */
+
+#if defined(MBED_HEAP_STATS_ENABLED)
+#include "mbed_stats.h"
+#endif /* MBED_HEAP_STATS_ENABLED */
+
+#if defined(MBED_STACK_STATS_ENABLED)
+#include "cmsis_os.h"
+#endif /* MBED_STACK_STATS_ENABLED */
+
+
+
+
+
+//
+// BOARD
+//
+#include "max32630hsp.h"
+DigitalIn   button(P6_5);
+InterruptIn interruptIn_PowerButton(P7_6);
+MAX32630HSP icarus(MAX32630HSP::VIO_1V8, &interruptIn_PowerButton);
+
+//
+// LED
+//
+#include "LEDStatus.h"
+LEDStatus ledStatus(LED1, LED_ON, LED2, LED_ON, LED3, LED_OFF);
+
+// Virtual serial port over USB
+USBSerial microUSB(0x1f00, 0x2012, 0x0001, false);
+#define IS_USB_HOST_CONNECTED()  ((uint8_t)((MXC_USB->dev_intfl & MXC_F_USB_DEV_INTFL_VBUS_ST) >> MXC_F_USB_DEV_INTFL_VBUS_ST_POS))
+
+//
+// DS INTERFACE. COMMAND IN DATA OUT POINT FOR HOST. ROOF INTERFACE TO ALL SUB MODULES
+//
+DSInterface dsInterface(&microUSB);
+
+//
+// BLE
+//
+#include "BLE.h"
+#include "BLE_ICARUS.h"
+#ifdef ENABLE_BLETEST_COMM
+#include "BleTestComm.h"
+BleTestComm bleTestComm(&microUSB);
+#endif
+
+
+
+
+//
+// DISPLAY INTERFACE.
+//
+#include "LS013B7DH03.h"
+#include "mbed_logo.h"
+SPI displaySPI(P0_5, P0_6, P0_4, NC);
+
+#include "WatchInterface.h"
+#define	PIN_BUTTON_UP		P2_3
+#define PIN_BUTTON_DOWN		P6_5
+#define	PIN_BUTTON_PWR		P7_6
+#define	PIN_displayCS		P0_7
+#define	PIN_displayEXTCOM	P6_4
+#define	PIN_displayDISP		P6_6
+WatchInterface watchInterface(PIN_BUTTON_UP, PIN_BUTTON_DOWN, PIN_BUTTON_PWR, PIN_displayCS, PIN_displayEXTCOM, PIN_displayDISP, &displaySPI);
+
+
+//
+// HOST ACCELEROMETER.
+//
+#include "bmi160.h"
+//#include "C:\Users\mehmet.gok\Desktop\DEV\BPTDEMO\wearables_MBED\Drivers\BMI160\bmi160.h"
+InterruptIn bmi160_int_pin(P3_6);
+I2C I2CM2(P5_7, P6_0); /* SDA, SCL */
+BMI160_I2C bmi160_dev(&I2CM2, BMI160_I2C::I2C_ADRS_SDO_LO, &bmi160_int_pin);
+
+
+//
+// ECG SENSOR
+//
+#include "EcgComm.h"
+EcgComm ecgCommHandler(&microUSB);
+
+#include "MAX30001.h"
+#include "MAX30001_Helper.h"
+SPI max30001_spi(P5_1, P5_2, P5_0);
+DigitalOut max30001_cs(P5_3);
+MAX30001 max30001(&max30001_spi, &max30001_cs);
+InterruptIn max30001_InterruptB(P5_5);
+InterruptIn max30001_Interrupt2B(P6_2);
+
+
+//
+// TEMP SENSOR
+//
+#include "TempComm.h"
+TempComm tpCommHandler(&microUSB);
+#include "MAX30205.h"
+I2C i2c(P3_4, P3_5);
+MAX30205 max30205(&i2c, (0x90 >> 1));
+//enable the LDO for temp sensor
+DigitalOut max30205_LDO_EN(P7_1, 1);
+
+
+//
+// ME11 SMART SENSOR INTERFACE
+//
+#include "SSInterface.h"
+I2C ssI2C(P3_4, P3_5);
+PinName ss_mfio(P5_4);
+PinName ss_reset(P5_6);
+SSInterface ssInterface(ssI2C, ss_mfio, ss_reset);
+
+#include "SSBootloaderComm.h"
+SSBootloaderComm ssBoot(&microUSB, &ssInterface, &dsInterface);
+
+#include "SSMAX8614XComm.h"
+SSMAX8614XComm ssMAX8614X(&microUSB, &ssInterface, &dsInterface);
+
+#include "SSGenericCmd.h"
+SSGenericCmd ssGenericCmd(&microUSB, &ssInterface, &dsInterface);
+
+
+//
+// MX25U Flash Driver Definition
+//
+#define MHZ_VALUE 1000000
+#define SPI_MHZ   16
+#define SPI_FREQUENCY (SPI_MHZ * MHZ_VALUE)
+#include "SPIFBlockDevice.h"
+#include "FATFileSystem.h"
+
+DigitalOut flash_nHOLD(P1_5);
+SPIFBlockDevice spif(P1_1, P1_2, P1_0, P1_3, SPI_FREQUENCY);
+FATFileSystem filesystem("fs");
+// USB MSD
+#include "USBMSD_BD.h"
+
+
+
+//
+// Hardware serial port over DAPLink
+//
+Serial daplink(USBTX, USBRX, 115200);
+
+
+
+static void setup_ble(void);
+static void process_ble(void);
+static void print_build_version(void);
+static void HSP_run_in_usbmcd_mode(void);
+static void HSP_mount_filesystem(void);
+
+#ifdef ENABLE_MEMORY_DEBUG
+void print_memory_info();
+#endif
+
+
+int main()
+{
+	wait_ms(100);
+
+	HSP_mount_filesystem();
+
+	if (watchInterface.getButtonStatus(WatchInterface::BUTTON_UP) == WatchInterface::BUTTON_RELEASED) {
+		HSP_run_in_usbmcd_mode();
+	}
+	wait_ms(500);
+
+
+	GPIO_PRIOINVERSION_MASK;
+
+	// used by the MAX30001
+	NVIC_SetPriority(SPIM2_IRQn, 0);
+
+
+	watchInterface.bootComplete = true;
+	print_build_version();
+	daplink.printf("daplink serial port\r\n");
+	microUSB.printf("micro USB serial port\r\n");
+
+	//dsInterface.set_fw_version(FIRMWARE_VERSION);
+	dsInterface.set_fw_platform(MAXIM_PLATFORM_NAME);
+	Peripherals::setUSBSerial(&microUSB);
+
+	icarus.max20303.Max20303_IsBattery_Connected();
+	watchInterface.m_max20303_ = &icarus.max20303;
+
+
+	setup_ble();
+#ifdef ENABLE_BLETEST_COMM
+	dsInterface.add_sensor_comm(&bleTestComm);
+#endif
+
+	//
+	// MAX30001
+	//
+	printf("Init MAX30001 callbacks, interrupts...\r\n");
+	MAX30001_Helper m_max30001helper(&max30001, &max30001_InterruptB, &max30001_Interrupt2B);
+	Peripherals::setMAX30001(&max30001);
+	Peripherals::setMAX30001Helper(&m_max30001helper);
+	ecgCommHandler.comm_init(&m_max30001helper);
+	dsInterface.add_sensor_comm(&ecgCommHandler);
+
+	//
+	//MAX30205
+	//
+	tpCommHandler.comm_init(&max30205);
+	dsInterface.add_sensor_comm(&tpCommHandler);
+
+	//Configure mfio as a level based interrupt (no mbed API for this, must use Maxim-specific code)
+	//gpio_cfg_t mfio_gpio_cfg = {PORT_5, PIN_4, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP};
+	//GPIO_IntConfig(&mfio_gpio_cfg, GPIO_INT_LOW_LEVEL);
+	ssI2C.frequency(400000);
+	dsInterface.set_fw_platform(ssInterface.get_ss_platform_name());
+	dsInterface.set_fw_version(ssInterface.get_ss_fw_version());
+
+	//
+	//REGISTER BOOTLOADER API TO SS INTERFACE
+	//
+    dsInterface.add_sensor_comm(&ssBoot);
+
+	//
+	//REGISTER 8614X PPG SENSOR API TO SS INTERFACE
+	//
+	dsInterface.add_sensor_comm(&ssMAX8614X);
+    ssMAX8614X.setBMI160(&bmi160_dev);
+
+	//
+	//REGISTER GENERIC COMMAND API TO SS INTERFACE
+	//
+    dsInterface.add_sensor_comm(&ssGenericCmd);
+
+
+    //Blink green if SmartSensor is present, yellow otherwise
+	SS_STATUS status = ssInterface.ss_comm_check();
+	if (status == SS_SUCCESS)
+		ledStatus.set_state(LED_OFF, LED_ON, LED_OFF);
+	else
+		ledStatus.set_state(LED_ON, LED_ON, LED_OFF);
+	ledStatus.blink(100, 1900);
+    ledStatus.blink(100, 1900);
+
+	//
+	//MAIN CONTEXT LOOP
+	//
+	while (1) {
+
+		USBSerial* serial = &microUSB;
+		uint8_t ch;
+		while (serial->readable()) {
+			ch = serial->_getc();
+			dsInterface.enable_console_interface();
+			dsInterface.build_command(ch);
+		}
+
+
+		if(dsInterface.recordingStarted) {
+			if((icarus.status_powerButton == MAX32630HSP::BUTTONSTATUS_LONG_PRESS_WAITING) ||
+			   (watchInterface.batteryLevel <= BATTERY_CRITICAL_LEVEL)) {
+				dsInterface.stopcommand();
+				dsInterface.force_file_close();
+			}
+		}
+
+		icarus.Max32630HSP_CheckInterrupt_Status();
+		//
+        // DSINTERFACE CONTEXT as all other interfaces is run by call to its data_report_execute function!!
+		//
+		dsInterface.data_report_execute();
+
+		if (ecgCommHandler.is_enabled() != watchInterface.ecg_enabled) {
+
+			if (ecgCommHandler.is_enabled()) {
+
+				if (!dsInterface.recordingStarted) {
+					watchInterface.displayMode = DISPLAYMODE_ECG;
+				}
+
+    			// Turn off LEDs
+				ledStatus.set_state(1, 1, 1);
+				ledStatus.solid();
+				ledStatus.set_state(1, 1, 1);
+			} else {
+
+				if (!dsInterface.recordingStarted) {
+					watchInterface.displayMode = DISPLAYMODE_TIME;
+				}
+
+			}
+			watchInterface.ecg_enabled = ecgCommHandler.is_enabled();
+
+		}
+
+		// Sensor Interface Updates on Watch display mode changes
+		if (watchInterface.modeUpdated) {
+
+			watchInterface.modeUpdated = false;
+			watchInterface.DisplayModeUpdated();
+
+			// Tethered mode
+			if ((watchInterface.BLE_Interface_Exists) || (watchInterface.USB_Interface_Exists)) {
+
+
+				// Stop all sensors
+				if(!dsInterface.recordingStarted)
+					dsInterface.stopcommand();
+
+
+			} else
+				// Not in tethered mode
+			{
+
+				switch (watchInterface.displayMode) {
+
+				    case DISPLAYMODE_INFO :
+
+						// Before switching to INFO screen, stop all sensors
+						if (!dsInterface.recordingStarted) {
+							dsInterface.stopcommand();
+						}
+
+						break;
+					case DISPLAYMODE_TIME :
+
+						// Before switching to TIME screen, stop all sensors
+						if (!dsInterface.recordingStarted) {
+							dsInterface.stopcommand();
+						}
+
+						break;
+					case DISPLAYMODE_PPG :
+
+						// Before switching to PPG screen, stop all sensors
+						if (!dsInterface.recordingStarted) {
+							dsInterface.stopcommand();
+							dsInterface.parse_command_str("set_reg ppg 2a 10");
+							dsInterface.parse_command_str("set_reg ppg 23 ff");
+							dsInterface.parse_command_str("read ppg 0");
+						}
+
+						break;
+
+					case DISPLAYMODE_TEMP :
+
+						// Before switching to TEMP screen, stop all sensors
+						if (!dsInterface.recordingStarted)  {
+							dsInterface.stopcommand();
+							dsInterface.parse_command_str("set_cfg temp sr 500");
+							dsInterface.parse_command_str("read temp 0");
+						}
+
+						break;
+
+				}
+			}
+		}
+
+		// Update the watch interface with the latest data
+		watchInterface.instant_temp_celsius	= tpCommHandler.TempComm_instant_temp_celsius;
+		watchInterface.instant_hr           = ssMAX8614X.instant_hr;
+		watchInterface.instant_hr_conf      = ssMAX8614X.instant_hr_conf;
+
+		watchInterface.BLE_Interface_Exists = BLE::Instance().gap().getState().connected;
+		watchInterface.USB_Interface_Exists = IS_USB_HOST_CONNECTED();
+
+		if (watchInterface.recordingStopFlag) {
+
+			watchInterface.recordingStopFlag = false;
+			watchInterface.recording         = false;
+			watchInterface.recording_old     = false;
+			dsInterface.stopcommand();
+			ledStatus.set_state(LED_OFF, LED_ON, LED_OFF);
+			ledStatus.blink(100, 1900);
+		} else {
+			watchInterface.recording            = dsInterface.recordingStarted;
+		}
+
+
+		if (watchInterface.BLE_Interface_Exists || watchInterface.USB_Interface_Exists) {
+			watchInterface.connection_indicator++;
+			if (watchInterface.connection_indicator == 1) {
+
+				if (!dsInterface.recordingStarted) {
+					dsInterface.stopcommand();
+				}
+
+			} else if (watchInterface.connection_indicator > 50) {
+				watchInterface.connection_indicator = 2;
+			}
+
+		}
+
+		watchInterface.execute();
+		process_ble();
+		ledStatus.update();
+
+#ifdef ENABLE_MEMORY_DEBUG
+        print_memory_info();
+#endif
+	}
+}
+
+
+
+
+static void setup_ble(void)
+{
+
+	//Set up BLE communication
+	BLE& ble = BLE::Instance();
+	ble.init(bleInitComplete);
+	while (BLE::Instance().hasInitialized() == false) { /* spin loop */ }
+	BLE_Icarus_SetDSInterface(&dsInterface);
+
+	char addr[6];
+	BLE_ICARUS_Get_Mac_Address(addr);
+	printf("BLE MAC: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\r\n", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
+
+
+	memcpy(watchInterface.m_mac_addr_, addr, 6);
+
+
+
+}
+
+static void process_ble(void)
+{
+
+	if (BLE::Instance().gap().getState().connected) {
+		BLE_Icarus_TransferDataFromQueue();
+	}
+	BLE::Instance().waitForEvent();
+
+}
+
+static void print_build_version(void)
+{
+	printf("\n\nICARUS mBED EVKit\r\n");
+	printf("Fw version: %s, mbed version: %d\r\n", FIRMWARE_VERSION, MBED_VERSION);
+	printf("Build source: (%s)  %s\r\n", BUILD_SOURCE_BRANCH, BUILD_SOURCE_HASH);
+	printf("Build time: %s  %s\r\n\n", __TIME__, __DATE__);
+}
+
+static void HSP_run_in_usbmcd_mode(void){
+
+	int err;
+
+	const int writecyclecount = 256;
+	watchInterface.USB_Interface_Exists = false;
+	watchInterface.USB_Interface_MSD   = true;
+	watchInterface.bootComplete        = true;
+	watchInterface.displayMode = DISPLAYMODE_TETHERED_USB;
+	watchInterface.updateDisplay(4);
+
+	for(int i = 0; i < writecyclecount; ++i) {
+		watchInterface.execute();
+		wait_ms(1);
+	}
+
+	USBMSD_BD msd(&spif);
+	printf("Starting MSD... ");
+	msd.disk_initialize();
+	err = msd.connect();
+	ledStatus.set_state(1, 1, 0);
+	printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
+
+	msd.disk_initialize();
+	err = msd.connect();
+
+	GPIO_PRIOINVERSION_MASK;
+
+	while (1) {
+
+		icarus.Max32630HSP_CheckInterrupt_Status();
+
+		wait_ms(1);
+	}
+}
+
+static void HSP_mount_filesystem(void){
+
+	// For ISSI part, in 3-wire SPI mode, HOLD pin should be tied to high to un-pause communication
+	flash_nHOLD = 1;
+	// Try to mount the filesystem
+	printf("Mounting the filesystem... ");
+	fflush(stdout);
+	int err = filesystem.mount(&spif);
+	printf("%s\n", (err ? "Fail :(" : "OK"));
+	if (err) {
+		// Reformat if we can't mount the filesystem
+		// this should only happen on the first boot
+		printf("No filesystem found, formatting... ");
+		fflush(stdout);
+		err = filesystem.reformat(&spif);
+		printf("%s\n", (err ? "Fail :(" : "OK"));
+	}
+
+}
+
+
+
+#ifdef ENABLE_MEMORY_DEBUG
+void print_memory_info() {
+    static int threadStackSize[8] = {0};
+    static int heapSize = 0;
+    // allocate enough room for every thread's stack statistics
+    int cnt = osThreadGetCount();
+    mbed_stats_stack_t *stats = (mbed_stats_stack_t*) malloc(cnt * sizeof(mbed_stats_stack_t));
+
+    cnt = mbed_stats_stack_get_each(stats, cnt);
+    for (int i = 0; i < cnt; i++) {
+        if(threadStackSize[i] < stats[i].max_size){
+            printf("Thread: 0x%lX, Stack size: %lu / %lu\r\n", stats[i].thread_id, stats[i].max_size, stats[i].reserved_size);
+            threadStackSize[i] = stats[i].max_size;
+        }
+    }
+    free(stats);
+
+    // Grab the heap statistics
+    mbed_stats_heap_t heap_stats;
+    mbed_stats_heap_get(&heap_stats);
+    if(heapSize < heap_stats.current_size){
+        printf("Heap size: %lu / %lu bytes\r\n", heap_stats.current_size, heap_stats.reserved_size);
+        heapSize = heap_stats.current_size;
+    }
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#949cb49ab0a144da0e3b04b6af46db0cd2a20d75
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_os_patches/.gitattributes	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,2 @@
+* text=auto
+*.patch text eol=lf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_os_patches/buttoninterrupt.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,18 @@
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32630/gpio_irq_api.c b/targets/TARGET_Maxim/TARGET_MAX32630/gpio_irq_api.c
+index 8a9e7bb42..e5fcb4b6f 100644
+--- a/targets/TARGET_Maxim/TARGET_MAX32630/gpio_irq_api.c
++++ b/targets/TARGET_Maxim/TARGET_MAX32630/gpio_irq_api.c
+@@ -118,7 +118,12 @@ int gpio_irq_init(gpio_irq_t *obj, PinName name, gpio_irq_handler handler, uint3
+ 
+     /* enable the requested interrupt */
+     MXC_GPIO->inten[port] |= (1 << pin);
+-    NVIC_EnableIRQ((IRQn_Type)((uint32_t)GPIO_P0_IRQn + port));
++	if (port >= 7) {
++		NVIC_EnableIRQ((IRQn_Type)((uint32_t)GPIO_P7_IRQn + (port - 7)));
++	} else {
++		NVIC_EnableIRQ((IRQn_Type)((uint32_t)GPIO_P0_IRQn + port));
++	}
++
+ 
+     return 0;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_os_patches/fffix.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,88 @@
+diff --git a/features/filesystem/fat/ChaN/ff.cpp b/features/filesystem/fat/ChaN/ff.cpp
+index 7e4561d809..3bda25e4a9 100644
+--- a/features/filesystem/fat/ChaN/ff.cpp
++++ b/features/filesystem/fat/ChaN/ff.cpp
+@@ -3800,7 +3800,9 @@ FRESULT f_read (
+ 					cc = fs->csize - csect;
+ 				}
+ 				if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
+-#if !FF_FS_READONLY && FF_FS_MINIMIZE <= 2		/* Replace one of the read sectors with cached data if it contains a dirty sector */
++
++/*
++#if !FF_FS_READONLY && FF_FS_MINIMIZE <= 2
+ #if FF_FS_TINY
+ 				if (fs->wflag && fs->winsect - sect < cc) {
+ 					mem_cpy(rbuff + ((fs->winsect - sect) * SS(fs)), fs->win, SS(fs));
+@@ -3811,6 +3813,8 @@ FRESULT f_read (
+ 				}
+ #endif
+ #endif
++*/
++
+ 				rcnt = SS(fs) * cc;				/* Number of bytes transferred */
+ 				continue;
+ 			}
+@@ -3921,19 +3925,20 @@ FRESULT f_write (
+ 					cc = fs->csize - csect;
+ 				}
+ 				if (disk_write(fs->pdrv, wbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
++/*
+ #if FF_FS_MINIMIZE <= 2
+ #if FF_FS_TINY
+-				if (fs->winsect - sect < cc) {	/* Refill sector cache if it gets invalidated by the direct write */
++				if (fs->winsect - sect < cc) {
+ 					mem_cpy(fs->win, wbuff + ((fs->winsect - sect) * SS(fs)), SS(fs));
+ 					fs->wflag = 0;
+ 				}
+ #else
+-				if (fp->sect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */
++				if (fp->sect - sect < cc) {
+ 					mem_cpy(fp->buf, wbuff + ((fp->sect - sect) * SS(fs)), SS(fs));
+ 					fp->flag &= (BYTE)~FA_DIRTY;
+ 				}
+ #endif
+-#endif
++#endif*/
+ 				wcnt = SS(fs) * cc;		/* Number of bytes transferred */
+ #if FLUSH_ON_NEW_SECTOR
+                 need_sync = true;
+diff --git a/features/filesystem/fat/ChaN/ffconf.h b/features/filesystem/fat/ChaN/ffconf.h
+index 22e1294277..f446778695 100644
+--- a/features/filesystem/fat/ChaN/ffconf.h
++++ b/features/filesystem/fat/ChaN/ffconf.h
+@@ -151,7 +151,7 @@
+ */
+ 
+ 
+-#define FF_FS_RPATH		1
++#define FF_FS_RPATH		0
+ /* This option configures support for relative path.
+ /
+ /   0: Disable relative path and remove related functions.
+@@ -164,7 +164,7 @@
+ / Drive/Volume Configurations
+ /---------------------------------------------------------------------------*/
+ 
+-#define FF_VOLUMES		4
++#define FF_VOLUMES		1
+ /* Number of volumes (logical drives) to be used. (1-10) */
+ 
+ 
+@@ -219,7 +219,7 @@
+ / System Configurations
+ /---------------------------------------------------------------------------*/
+ 
+-#define FF_FS_TINY		1
++#define FF_FS_TINY		0
+ /* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
+ /  At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
+ /  Instead of private sector buffer eliminated from the file object, common sector
+@@ -289,7 +289,7 @@
+ /* #include <windows.h>	// O/S definitions  */
+ 
+ #define FLUSH_ON_NEW_CLUSTER    0   /* Sync the file on every new cluster */
+-#define FLUSH_ON_NEW_SECTOR     1   /* Sync the file on every new sector */
++#define FLUSH_ON_NEW_SECTOR     0   /* Sync the file on every new sector */
+ /* Only one of these two defines needs to be set to 1. If both are set to 0
+    the file is only sync when closed.
+    Clusters are group of sectors (eg: 8 sectors). Flushing on new cluster means
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_os_patches/rtc.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,13 @@
+diff --git a/targets/targets.json b/targets/targets.json
+index 6af8758dd..daf3f25c8 100755
+--- a/targets/targets.json
++++ b/targets/targets.json
+@@ -3110,7 +3110,7 @@
+         "macros": ["__SYSTEM_HFX=96000000", "TARGET=MAX32630", "TARGET_REV=0x4132", "BLE_HCI_UART", "OPEN_DRAIN_LEDS"],
+         "extra_labels": ["Maxim", "MAX32630"],
+         "supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
+-        "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SPI", "STDIO_MESSAGES", "USTICKER"],
++        "device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SPI", "STDIO_MESSAGES", "USTICKER"],
+         "features": ["BLE"],
+         "release_versions": ["2", "5"]
+     },
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_settings.py	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,45 @@
+"""
+mbed SDK
+Copyright (c) 2016 ARM Limited
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+"""
+
+from os.path import join, abspath, dirname
+
+#ROOT = abspath(join(dirname(__file__), "."))
+
+##############################################################################
+# Build System Settings
+##############################################################################
+#BUILD_DIR = abspath(join(ROOT, "build"))
+
+# ARM
+#ARM_PATH = "C:/Program Files/ARM"
+
+# GCC ARM
+#GCC_ARM_PATH = ""
+
+# GCC CodeRed
+#GCC_CR_PATH = "C:/code_red/RedSuite_4.2.0_349/redsuite/Tools/bin"
+
+# IAR
+#IAR_PATH = "C:/Program Files (x86)/IAR Systems/Embedded Workbench 7.0/arm"
+
+# Goanna static analyser. Please overload it in private_settings.py
+#GOANNA_PATH = "c:/Program Files (x86)/RedLizards/Goanna Central 3.2.3/bin"
+
+#BUILD_OPTIONS = []
+
+# mbed.org username
+#MBED_ORG_USER = ""
Binary file mbed_settings.pyc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/.gitattributes	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,2 @@
+* text=auto
+*.patch text eol=lf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/0001-porting-MAX32625PICO-to-mbed-os-5.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,611 @@
+From 0420b36056436f6f7b387b614de8ab9e0aa0f373 Mon Sep 17 00:00:00 2001
+From: Mahir Ozturk <Mahir.Ozturk@maximintegrated.com>
+Date: Wed, 29 Mar 2017 14:16:50 +0300
+Subject: [PATCH] porting MAX32625PICO to mbed-os 5
+
+---
+ .../TARGET_MAX32625PICO/PeripheralNames.h          |  88 +++++++++++
+ .../TARGET_MAX32625/TARGET_MAX32625PICO/PinNames.h | 140 ++++++++++++++++
+ .../TARGET_MAX32625PICO/low_level_init.c           |  56 +++++++
+ .../TARGET_MAX32625PICO/MAX32625.sct               |  16 ++
+ .../TARGET_MAX32625PICO/max32625.ld                | 176 +++++++++++++++++++++
+ .../TOOLCHAIN_IAR/TARGET_MAX32625PICO/MAX32625.icf |  29 ++++
+ .../TARGET_MAX32625/device/system_max32625.c       |   7 +
+ targets/targets.json                               |   9 ++
+ 8 files changed, 521 insertions(+)
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PeripheralNames.h
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PinNames.h
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/low_level_init.c
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_ARM_STD/TARGET_MAX32625PICO/MAX32625.sct
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_GCC_ARM/TARGET_MAX32625PICO/max32625.ld
+ create mode 100644 targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_IAR/TARGET_MAX32625PICO/MAX32625.icf
+
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PeripheralNames.h b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PeripheralNames.h
+new file mode 100644
+index 000000000..4686ef9c9
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PeripheralNames.h
+@@ -0,0 +1,88 @@
++/*******************************************************************************
++ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
++ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Maxim Integrated
++ * Products, Inc. shall not be used except as stated in the Maxim Integrated
++ * Products, Inc. Branding Policy.
++ *
++ * The mere transfer of this software does not imply any licenses
++ * of trade secrets, proprietary technology, copyrights, patents,
++ * trademarks, maskwork rights, or any other form of intellectual
++ * property whatsoever. Maxim Integrated Products, Inc. retains all
++ * ownership rights.
++ *******************************************************************************
++ */
++
++#ifndef MBED_PERIPHERALNAMES_H
++#define MBED_PERIPHERALNAMES_H
++
++#include "cmsis.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef enum {
++    UART_0 = MXC_BASE_UART0,
++    UART_1 = MXC_BASE_UART1,
++    UART_2 = MXC_BASE_UART2,
++    STDIO_UART = UART_1
++} UARTName;
++
++typedef enum {
++    I2C_0 = MXC_BASE_I2CM0,
++    I2C_1 = MXC_BASE_I2CM1
++} I2CName;
++
++typedef enum {
++    SPI_0 = MXC_BASE_SPIM0,
++    SPI_1 = MXC_BASE_SPIM1,
++    SPI_2 = MXC_BASE_SPIM2
++} SPIName;
++
++typedef enum {
++    PWM_0 = MXC_BASE_PT0,
++    PWM_1 = MXC_BASE_PT1,
++    PWM_2 = MXC_BASE_PT2,
++    PWM_3 = MXC_BASE_PT3,
++    PWM_4 = MXC_BASE_PT4,
++    PWM_5 = MXC_BASE_PT5,
++    PWM_6 = MXC_BASE_PT6,
++    PWM_7 = MXC_BASE_PT7,
++    PWM_8 = MXC_BASE_PT8,
++    PWM_9 = MXC_BASE_PT9,
++    PWM_10 = MXC_BASE_PT10,
++    PWM_11 = MXC_BASE_PT11,
++    PWM_12 = MXC_BASE_PT12,
++    PWM_13 = MXC_BASE_PT13,
++    PWM_14 = MXC_BASE_PT14,
++    PWM_15 = MXC_BASE_PT15
++} PWMName;
++
++typedef enum {
++    ADC = MXC_BASE_ADC
++} ADCName;
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PinNames.h b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PinNames.h
+new file mode 100644
+index 000000000..1cbd97e37
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/PinNames.h
+@@ -0,0 +1,140 @@
++/*******************************************************************************
++ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
++ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Maxim Integrated
++ * Products, Inc. shall not be used except as stated in the Maxim Integrated
++ * Products, Inc. Branding Policy.
++ *
++ * The mere transfer of this software does not imply any licenses
++ * of trade secrets, proprietary technology, copyrights, patents,
++ * trademarks, maskwork rights, or any other form of intellectual
++ * property whatsoever. Maxim Integrated Products, Inc. retains all
++ * ownership rights.
++ *******************************************************************************
++ */
++
++#ifndef MBED_PINNAMES_H
++#define MBED_PINNAMES_H
++
++#include "cmsis.h"
++#include "gpio_regs.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef enum {
++    PIN_INPUT  = 0, /* MXC_V_GPIO_OUT_MODE_HIGH_Z,*/
++    PIN_OUTPUT = 1  /* MXC_V_GPIO_OUT_MODE_NORMAL_DRIVE */
++} PinDirection;
++
++#define PORT_SHIFT  12
++#define PINNAME_TO_PORT(name)   ((unsigned int)(name) >> PORT_SHIFT)
++#define PINNAME_TO_PIN(name)    ((unsigned int)(name) & ~(0xFFFFFFFF << PORT_SHIFT))
++
++#define NOT_CONNECTED (int)0xFFFFFFFF
++
++typedef enum {
++    P0_0 = (0 << PORT_SHIFT), P0_1, P0_2, P0_3, P0_4, P0_5, P0_6, P0_7,
++    P1_0 = (1 << PORT_SHIFT), P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7,
++    P2_0 = (2 << PORT_SHIFT), P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7,
++    P3_0 = (3 << PORT_SHIFT), P3_1, P3_2, P3_3, P3_4, P3_5, P3_6, P3_7,
++    P4_0 = (4 << PORT_SHIFT), P4_1, P4_2, P4_3, P4_4, P4_5, P4_6, P4_7,
++
++    // Analog input pins
++    AIN_0 = (0xA << PORT_SHIFT), AIN_1, AIN_2, AIN_3, AIN_4, AIN_5, AIN_6, AIN_7, AIN_8, AIN_9,
++
++    // LEDs
++    LED1 = P2_4,
++    LED2 = P2_5,
++    LED3 = P2_6,
++    LED_RED = LED1,
++    LED_GREEN = LED2,
++    LED_BLUE = LED3,
++
++    // Push button
++    SW1 = P2_7,
++
++    // USB bridge connected UART pins
++    USBTX = P2_1,
++    USBRX = P2_0,
++    STDIO_UART_TX = USBTX,
++    STDIO_UART_RX = USBRX,
++
++    // I2C pins
++    I2C0_SCL = P1_7,
++    I2C0_SDA = P1_6,
++
++    I2C1_SCL = P3_5,
++    I2C1_SDA = P3_4,
++
++    // UART pins
++    UART0_RX  = P0_0,
++    UART0_TX  = P0_1,
++    UART0_CTS = P0_2,
++    UART0_RTS = P0_3,
++
++    UART1_RX  = P2_0,
++    UART1_TX  = P2_1,
++
++    UART2_RX  = P3_0,
++    UART2_TX  = P3_1,
++    UART2_CTS = P3_2,
++    UART2_RTS = P3_3,
++
++    // SPI pins
++    SPI0_SCK  = P0_4,
++    SPI0_MOSI = P0_5,
++    SPI0_MISO = P0_6,
++    SPI0_SS   = P0_7,
++
++    SPI1_SCK  = P1_0,
++    SPI1_MOSI = P1_1,
++    SPI1_MISO = P1_2,
++    SPI1_SS   = P1_3,
++
++    SPI2_SCK  = P2_4,
++    SPI2_MOSI = P2_5,
++    SPI2_MISO = P2_6,
++    SPI2_SS   = P2_7,
++
++    // Not connected
++    NC = NOT_CONNECTED
++} PinName;
++
++typedef enum {
++    PullUp,
++    PullDown,
++    OpenDrain,
++    PullNone,
++    PullDefault = PullUp
++} PinMode;
++
++typedef enum {
++    LED_ON = 0,
++    LED_OFF = 1
++} LedStates;
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/low_level_init.c b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/low_level_init.c
+new file mode 100644
+index 000000000..1c56f9891
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/TARGET_MAX32625PICO/low_level_init.c
+@@ -0,0 +1,56 @@
++/*******************************************************************************
++ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
++ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Maxim Integrated
++ * Products, Inc. shall not be used except as stated in the Maxim Integrated
++ * Products, Inc. Branding Policy.
++ *
++ * The mere transfer of this software does not imply any licenses
++ * of trade secrets, proprietary technology, copyrights, patents,
++ * trademarks, maskwork rights, or any other form of intellectual
++ * property whatsoever. Maxim Integrated Products, Inc. retains all
++ * ownership rights.
++ *******************************************************************************
++ */
++ 
++#include "cmsis.h"
++#include "ioman_regs.h"
++#include "gpio_regs.h"
++ 
++//******************************************************************************
++// This function will get called early in system initialization
++void low_level_init(void)
++{
++    /* The MAX32625PICO board utilizes a bootloader that can leave some 
++     * peripherals in a partially configured state.  This function resets
++     * those to allow proper initialization.
++     */
++    MXC_IOMAN->uart0_req = 0x0;         // Clear any requests
++    MXC_IOMAN->uart1_req = 0x0;         // Clear any requests
++
++    MXC_GPIO->inten[2] = 0x0;           // Clear interrupt enable
++    MXC_GPIO->int_mode[2] = 0x0;        // Clear interrupt mode
++    MXC_GPIO->in_mode[2] = 0x22222222;  // Clear input mode
++    MXC_GPIO->out_val[2] = 0x0;  // Clear output value
++    MXC_GPIO->out_mode[2] = 0xFFFFFFFF;  // Clear output mode
++    
++
++}
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_ARM_STD/TARGET_MAX32625PICO/MAX32625.sct b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_ARM_STD/TARGET_MAX32625PICO/MAX32625.sct
+new file mode 100644
+index 000000000..6ea0cb73b
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_ARM_STD/TARGET_MAX32625PICO/MAX32625.sct
+@@ -0,0 +1,16 @@
++; MAX32625
++; 512KB FLASH (0x70000) @ 0x000010000
++; 160KB RAM (0x24F00) @ 0x20003100
++
++LR_IROM1 0x000010000 0x70000  {    ; load region size_region
++    ER_IROM1 0x000010000 0x70000  {  ; load address = execution address 
++        *.o (RESET, +First)
++        *(InRoot$$Sections)
++        .ANY (+RO)
++    }
++
++    ; [RAM] Vector table dynamic copy: 68 vectors * 4 bytes = 272 (0x110)
++    RW_IRAM1 (0x20003100+0x110) (0x24F00-0x110)  {  ; RW data
++        .ANY (+RW +ZI)
++    }
++}
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_GCC_ARM/TARGET_MAX32625PICO/max32625.ld b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_GCC_ARM/TARGET_MAX32625PICO/max32625.ld
+new file mode 100644
+index 000000000..f51f007f1
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_GCC_ARM/TARGET_MAX32625PICO/max32625.ld
+@@ -0,0 +1,176 @@
++/*******************************************************************************
++ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
++ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of Maxim Integrated
++ * Products, Inc. shall not be used except as stated in the Maxim Integrated
++ * Products, Inc. Branding Policy.
++ *
++ * The mere transfer of this software does not imply any licenses
++ * of trade secrets, proprietary technology, copyrights, patents,
++ * trademarks, maskwork rights, or any other form of intellectual
++ * property whatsoever. Maxim Integrated Products, Inc. retains all
++ * ownership rights.
++ *******************************************************************************
++ */
++
++MEMORY
++{
++    FLASH (rx) : ORIGIN = 0x00010000, LENGTH = 0x00070000
++    RAM  (rwx) : ORIGIN = 0x20003100, LENGTH = 0x00024F00
++}
++
++/* Linker script to place sections and symbol values. Should be used together
++ * with other linker script that defines memory regions FLASH and RAM.
++ * It references following symbols, which must be defined in code:
++ *   Reset_Handler : Entry of reset handler
++ * 
++ * It defines following symbols, which code can use without definition:
++ *   __exidx_start
++ *   __exidx_end
++ *   __etext
++ *   __data_start__
++ *   __preinit_array_start
++ *   __preinit_array_end
++ *   __init_array_start
++ *   __init_array_end
++ *   __fini_array_start
++ *   __fini_array_end
++ *   __data_end__
++ *   __bss_start__
++ *   __bss_end__
++ *   __end__
++ *   end
++ *   __HeapLimit
++ *   __StackLimit
++ *   __StackTop
++ *   __stack
++ */
++ENTRY(Reset_Handler)
++
++SECTIONS
++{
++    .text :
++    {
++        KEEP(*(.isr_vector))
++        *(.text*)
++
++        KEEP(*(.init))
++        KEEP(*(.fini))
++
++        /* .ctors */
++        *crtbegin.o(.ctors)
++        *crtbegin?.o(.ctors)
++        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
++        *(SORT(.ctors.*))
++        *(.ctors)
++
++        /* .dtors */
++        *crtbegin.o(.dtors)
++        *crtbegin?.o(.dtors)
++        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
++        *(SORT(.dtors.*))
++        *(.dtors)
++
++        *(.rodata*)
++
++        KEEP(*(.eh_frame*))
++    } > FLASH
++
++    .ARM.extab :
++    {
++        *(.ARM.extab* .gnu.linkonce.armextab.*)
++    } > FLASH
++
++    __exidx_start = .;
++    .ARM.exidx :
++    {
++        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
++    } > FLASH
++    __exidx_end = .;
++
++    __etext = .;
++
++    .data : AT (__etext)
++    {
++        __data_start__ = .;
++        *(vtable)
++        *(.data*)
++
++        . = ALIGN(4);
++        /* preinit data */
++        PROVIDE_HIDDEN (__preinit_array_start = .);
++        KEEP(*(.preinit_array))
++        PROVIDE_HIDDEN (__preinit_array_end = .);
++
++        . = ALIGN(4);
++        /* init data */
++        PROVIDE_HIDDEN (__init_array_start = .);
++        KEEP(*(SORT(.init_array.*)))
++        KEEP(*(.init_array))
++        PROVIDE_HIDDEN (__init_array_end = .);
++
++
++        . = ALIGN(4);
++        /* finit data */
++        PROVIDE_HIDDEN (__fini_array_start = .);
++        KEEP(*(SORT(.fini_array.*)))
++        KEEP(*(.fini_array))
++        PROVIDE_HIDDEN (__fini_array_end = .);
++
++        . = ALIGN(4);
++        /* All data end */
++        __data_end__ = .;
++
++    } > RAM
++
++    .bss :
++    {
++        __bss_start__ = .;
++        *(.bss*)
++        *(COMMON)
++        __bss_end__ = .;
++    } > RAM
++
++    .heap :
++    {
++        __end__ = .;
++        end = __end__;
++        *(.heap*)
++        __HeapLimit = .;
++    } > RAM
++
++    /* .stack_dummy section doesn't contains any symbols. It is only
++     * used for linker to calculate size of stack sections, and assign
++     * values to stack symbols later */
++    .stack_dummy :
++    {
++        *(.stack)
++    } > RAM
++
++    /* Set stack top to end of RAM, and stack limit move down by
++     * size of stack_dummy section */
++    __StackTop = ORIGIN(RAM) + LENGTH(RAM);
++    __StackLimit = __StackTop - SIZEOF(.stack_dummy);
++    PROVIDE(__stack = __StackTop);
++
++    /* Check if data + heap + stack exceeds RAM limit */
++    ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
++}
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_IAR/TARGET_MAX32625PICO/MAX32625.icf b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_IAR/TARGET_MAX32625PICO/MAX32625.icf
+new file mode 100644
+index 000000000..bba1c8067
+--- /dev/null
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/device/TOOLCHAIN_IAR/TARGET_MAX32625PICO/MAX32625.icf
+@@ -0,0 +1,29 @@
++/* [ROM] */
++define symbol __intvec_start__        = 0x00010000;
++define symbol __region_ROM_start__    = 0x00010000;
++define symbol __region_ROM_end__      = 0x0007FFFF;
++
++/* [RAM] Vector table dynamic copy: 68 vectors * 4 bytes = 272 (0x110) bytes */
++define symbol __NVIC_start__          = 0x00010000;
++define symbol __NVIC_end__            = 0x00010110; /* to be aligned on 8 bytes */
++define symbol __region_RAM_start__    = 0x20003100;
++define symbol __region_RAM_end__      = 0x20027FFF;
++
++/* Memory regions */
++define memory mem with size = 4G;
++define region ROM_region      = mem:[from __region_ROM_start__   to __region_ROM_end__];
++define region RAM_region      = mem:[from __region_RAM_start__   to __region_RAM_end__];
++
++/* Stack and Heap */
++define symbol __size_cstack__ = 0x5000;
++define symbol __size_heap__   = 0xA000;
++define block CSTACK    with alignment = 8, size = __size_cstack__   { };
++define block HEAP      with alignment = 8, size = __size_heap__     { };
++
++initialize by copy { readwrite };
++do not initialize  { section .noinit };
++
++place at address mem:__intvec_start__ { readonly section .intvec };
++place in ROM_region   { readonly };
++place in RAM_region   { readwrite,
++                        block CSTACK, block HEAP };
+diff --git a/targets/TARGET_Maxim/TARGET_MAX32625/device/system_max32625.c b/targets/TARGET_Maxim/TARGET_MAX32625/device/system_max32625.c
+index 4f77b2116..bba36bb5c 100644
+--- a/targets/TARGET_Maxim/TARGET_MAX32625/device/system_max32625.c
++++ b/targets/TARGET_Maxim/TARGET_MAX32625/device/system_max32625.c
+@@ -171,6 +171,10 @@ __weak int PreInit(void)
+     return 0;
+ }
+ 
++/* Override this function for early platform initialization
++*/
++__weak void low_level_init(void) {}
++
+ /* This function is called just before control is transferred to main().
+  */
+ void SystemInit(void)
+@@ -258,6 +262,9 @@ void SystemInit(void)
+     __ISB();
+ #endif
+ 
++    /* Early platform initialization */
++    low_level_init();
++
+     /* Perform an initial trim of the internal ring oscillator */
+     CLKMAN_TrimRO();
+ }
+diff --git a/targets/targets.json b/targets/targets.json
+index ee38b950b..12d5cf61b 100644
+--- a/targets/targets.json
++++ b/targets/targets.json
+@@ -1904,6 +1904,15 @@
+         "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"],
+         "release_versions": ["2", "5"]
+     },
++	"MAX32625PICO": {
++        "inherits": ["Target"],
++        "core": "Cortex-M4F",
++        "macros": ["__SYSTEM_HFX=96000000","TARGET=MAX32625","TARGET_REV=0x4132"],
++        "extra_labels": ["Maxim", "MAX32625"],
++        "supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
++        "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"],
++        "release_versions": ["2", "5"]
++    },
+     "MAX32630FTHR": {
+         "inherits": ["Target"],
+         "core": "Cortex-M4F",
+-- 
+2.11.1.windows.1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/USBDevice.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,17 @@
+diff -r c5e178adb138 USBDevice/USBHAL_Maxim.cpp
+--- a/USBDevice/USBHAL_Maxim.cpp	Fri Nov 11 17:59:00 2016 +0000
++++ b/USBDevice/USBHAL_Maxim.cpp	Thu Mar 30 11:14:58 2017 +0300
+@@ -141,8 +141,13 @@
+ 
+     // attach IRQ handler and enable interrupts
+     instance = this;
++#if defined(TARGET_MAX32630)
+     NVIC_SetVector(USB_IRQn, &_usbisr);
++#else
++    NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
++#endif
+     NVIC_EnableIRQ(USB_IRQn);
++
+ }
+ 
+ USBHAL::~USBHAL(void)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/filesystem.patch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,15 @@
+diff --git a/features/filesystem/fat/ChaN/ffconf.h b/features/filesystem/fat/ChaN/ffconf.h
+index 22e1294277..8eba16f9f3 100644
+--- a/features/filesystem/fat/ChaN/ffconf.h
++++ b/features/filesystem/fat/ChaN/ffconf.h
+@@ -288,8 +288,8 @@
+ 
+ /* #include <windows.h>	// O/S definitions  */
+ 
+-#define FLUSH_ON_NEW_CLUSTER    0   /* Sync the file on every new cluster */
+-#define FLUSH_ON_NEW_SECTOR     1   /* Sync the file on every new sector */
++#define FLUSH_ON_NEW_CLUSTER    1   /* Sync the file on every new cluster */
++#define FLUSH_ON_NEW_SECTOR     0   /* Sync the file on every new sector */
+ /* Only one of these two defines needs to be set to 1. If both are set to 0
+    the file is only sync when closed.
+    Clusters are group of sectors (eg: 8 sectors). Flushing on new cluster means
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/version.h	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,11 @@
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+#include "build_version.h"
+//FIRMWARE_VERSION is also the BLE advertisement name of the device
+#ifdef ENABLE_SPO2
+#define FIRMWARE_VERSION           "HSP2SPO2_2.7.0.1"
+#else
+#define FIRMWARE_VERSION           "HSP2_2.7.0.1"
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/waerables_MBED.launch	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${project}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/${project_name}/tools/windows_run.bat}"/>
+<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="${workspace_loc:/${project_name}}"/>
+</launchConfiguration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/werror_build_profile.json	Wed Apr 10 14:56:25 2019 +0300
@@ -0,0 +1,44 @@
+{
+    "GCC_ARM": {
+        "common": ["-c", "-Wall", "-Wextra", "-Werror",
+                   "-Wno-unused-parameter", "-Wno-missing-field-initializers",
+                   "-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
+                   "-ffunction-sections", "-fdata-sections", "-funsigned-char",
+                   "-MMD", "-fno-delete-null-pointer-checks",
+                   "-fomit-frame-pointer", "-Os", "-DNDEBUG"],
+        "asm": ["-x", "assembler-with-cpp"],
+        "c": ["-std=gnu99"],
+        "cxx": ["-std=gnu++98", "-fno-rtti", "-Wvla"],
+        "ld": ["-Wl,--gc-sections", "-Wl,--wrap,main", "-Wl,--wrap,_malloc_r",
+               "-Wl,--wrap,_free_r", "-Wl,--wrap,_realloc_r",
+               "-Wl,--wrap,_calloc_r", "-Wl,--wrap,exit", "-Wl,--wrap,atexit"]
+    },
+    "ARM": {
+        "common": ["-c", "--gnu", "-Ospace", "--split_sections",
+                   "--apcs=interwork", "--brief_diagnostics", "--restrict",
+                   "--multibyte_chars", "-O3", "-DNDEBUG"],
+        "asm": [],
+        "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"],
+        "cxx": ["--cpp", "--no_rtti", "--no_vla"],
+        "ld": []
+    },
+    "uARM": {
+        "common": ["-c", "--gnu", "-Ospace", "--split_sections",
+                   "--apcs=interwork", "--brief_diagnostics", "--restrict",
+                   "--multibyte_chars", "-O3", "-D__MICROLIB",
+                   "--library_type=microlib", "-DMBED_RTOS_SINGLE_THREAD", "-DNDEBUG"],
+        "asm": [],
+        "c": ["--md", "--no_depend_system_headers", "--c99", "-D__ASSERT_MSG"],
+        "cxx": ["--cpp", "--no_rtti", "--no_vla"],
+        "ld": ["--library_type=microlib"]
+    },
+    "IAR": {
+        "common": [
+            "--no_wrap_diagnostics", "-e",
+            "--diag_suppress=Pa050,Pa084,Pa093,Pa082", "-Ohz", "-DNDEBUG"],
+        "asm": [],
+        "c": ["--vla"],
+        "cxx": ["--guard_calls", "--no_static_destruction"],
+        "ld": ["--skip_dynamic_initialization", "--threaded_lib"]
+    }
+}