DIY Coffee Alarm using DS1302 RTC Module and HM-10 Bluetooth Module

Published  February 23, 2022   0
G Goudu Varaprasad
Author
Coffee Alarm using RTC module and AVR Microcontroller

I have come up with the idea of a Coffee Alarm as a solution to my own real-life problem. Like any other youngster, I normally have a lot of tasks to complete every day. Before going to bed every night, I set my alarm at 6 A.M., and when the alarm starts ringing, I snooze it repeatedly and wake up at around 9 A.M. I tried different alarm apps which demands to complete certain tasks to switch off the alarm. But nothing worked and at the end of the day, some of my tasks are left incomplete. I eventually found out this problem is a common problem for most of the people. Then I found drinking coffee is the best way to get out of bed. It is impossible to get to sleep after drinking coffee as the caffeine present in the coffee will not let us sleep. So, I have designed and fabricated a machine that will wake me up every day with a hot and fresh coffee. Future Scope: Currently the machine is not compatible with food-grade standards. I will modify the machine to make it food-grade using stainless steel and also include a wifi chip into the circuit so that it can be controlled using Alexa and Google Home as well. Finally, I wish to convert this idea into a market-ready product and help people who are facing the same issue as mine.

Component Required for Coffee Alarm

Components for Coffee Alarm

Project Used Hardware

  • Atmega328p microcontroller,
  • HM-10 bluetooth module,
  • DS1302 RTC Module,
  • 5V relay module,
  • 28BYJ-48 Stepper Motor,
  • 0.96" OLED display,
  • 10W speaker,
  • 5V DC BO Motor,
  • 24V Solenoid Valve,
  • 12V DC Adapter,
  • 250W water heater

Project Used Software

  • Arduino IDE, 
  • EasyEDA,
  • Audacity,
  • Encode Audio,
  • MIT App Inventor2, 
  • Tinkercad, 
  • Ultimaker Cura

Project Hardware/Software Selection

Atmega328p is easy to program using Arduino, an open-source IDE, which reduces the development time a lot. I chose HM-10 over HC-05 to make it compatible with both Android and iOS. The Stepper motor is used in the powder dispenser mechanism so that the user can control the amount of coffee premix to dispense according to their choice. (Not yet implemented this feature). Solenoid Valves are the best when it comes to dispensing water in a controlled manner and also do not cause any leakages. Additionally, an LED strip is included to some lighting to the machine. 10W speaker gives us enough loudness to wake you up from sleep. I could find only the 250W mini water heater which can be used easily in a prototype since it is so small in size and also very cheap. EasyEDA is my preferred designing tool as I can design both schematic and PCB and it also has a lot of 3D components available. Android App is designed in MIT app inventor2 which is a block-based online platform. A high level of coding is not required to design android apps. TinkerCad is used to design the screw mechanism to dispense the coffee premix and base plate to hold the mixer jar. Ultimaker Cura is used to slice the 3D Model for 3D printing.

Coffee Alarm Circuit Diagram

Coffee Alarm Circuit Diagram

Most of the components used in this prototype are in the form of a plug and play modules since I wish to modify this machine further to include more features and make it food-grade.

Coffee Alarm Model

You can learn how to burn Atmega328 IC here and can find more Atmega328 based projects by following the link.

Code

#include <SPI.h>                  
#include <Wire.h>                 //For OLED Display communication with atmega3328p
#include <Adafruit_GFX.h>         //For OLED Display
#include <Adafruit_SSD1306.h>     //For OLED Display
#include <ThreeWire.h>            //For RTC Module communicationi with atmega328p
#include <RtcDS1302.h>            //For RTC Module
#include <PCM.h>                  //For playing music using arduino
#include <EEPROM.h>               //Required for storing Alarm settings when power is off

//Pins for Stepper Motor
#define STEPPER_PIN_1 9   
#define STEPPER_PIN_2 6
#define STEPPER_PIN_3 7
#define STEPPER_PIN_4 8
#define OLED_RESET 4

// OLED Display Initialization
Adafruit_SSD1306 display(OLED_RESET);
ThreeWire myWire(4,5,2); // IO, SCLK, CE
RtcDS1302<ThreeWire> Rtc(myWire);            
char current_time[80];
int step_number = 0;
unsigned long start_time;

//Timing for different dispensing mechanisms
int powder_dispense_time = 25000;     
int water_dispense_time = 20000;
int mixer_time = 5000;
String inData = "";
int index; 
bool Alarm_Set;
int hours, minutes;

//Wakeup Music file
const unsigned char sample[] PROGMEM = {
  124, 123, 126, 129, 132, 134, 137, 139, 141, 143, 144, 145, 146, 147, 147, 146, 144, 143, 140, 138, 135, 131, 127, 123, 118, 112, 107, 102, 97, 93, 90, 88, 88, 90, 93, 99, 106, 114, 124, 135, 145, 154, 163, 169, 174, 177, 178, 177, 175, 171, 166, 160, 154, 148, 141, 134, 126, 119, 111, 103, 95, 87, 80, 73, 67, 64, 63, 66, 71, 79, 90, 102, 116, 132, 146, 158, 170, 178, 185, 190, 192, 192, 190, 187, 181, 175, 168, 161, 153, 145, 135, 126, 116, 107, 98, 89, 81, 74, 67, 62, 58, 56, 58, 62, 68, 78, 90, 104, 120, 136, 149, 163, 173, 181, 188, 191, 192, 192, 189, 184, 180, 174, 168, 161, 154, 147, 140, 133, 125, 118, 110, 102, 94, 88, 81, 75, 71, 68, 65, 65, 67, 72, 78, 88, 99, 111, 125, 138, 149, 160, 168, 175, 180, 183, 183, 182, 179, 174, 168, 163, 158, 152, 147, 142, 137, 132, 127, 120, 114, 109, 103, 98, 93, 89, 86, 84, 81, 81, 81, 83, 88, 92, 99, 107, 116, 126, 136, 145, 153, 159, 164, 168, 170, 170, 169, 167, 164, 161, 158, 154, 150, 146, 142, 139, 134, 131, 126, 122, 118, 113, 109, 106, 102, 99, 97, 94, 92, 91, 91, 91, 93, 95, 99, 104, 109, 116, 125, 132, 138, 145, 150, 155, 159, 162, 163, 164, 164, 162, 160, 158, 155, 152, 149, 146, 142, 139, 134, 130, 126, 121, 116, 112, 108, 104, 101, 98, 96, 95, 94, 93, 93, 94, 95, 98, 102, 107, 113, 120, 127, 134, 141, 147, 152, 156, 159, 161, 162, 161, 160, 158, 156, 154, 151, 148, 145, 141, 138, 134, 130, 126, 122, 118, 115, 112, 109, 107, 105, 103, 102, 101, 100, 100, 100, 101, 102, 104, 107, 111, 116, 122, 128, 133, 139, 144, 148, 152, 154, 155, 155, 155, 154, 153, 151, 149, 148, 146, 144, 141, 139, 136, 133, 130, 127, 124, 121, 119, 116, 114, 112, 110, 109, 107, 106, 106, 105, 105, 105, 106, 107, 110, 113, 117, 121, 126, 130, 135, 139, 142, 145, 147, 148, 149, 150, 150, 149, 148, 147, 147, 145, 144, 142, 140, 137, 135, 132, 129, 126, 123, 120, 118, 115, 114, 112, 110, 110, 109, 109, 109, 109, 110, 111, 112, 114, 116, 119, 122, 125, 128, 132, 135, 138, 140, 142, 144, 145, 145, 145, 145, 144, 144, 143, 142, 141, 139, 138, 136, 134, 131, 129, 127, 125, 123, 121, 119, 118, 117, 116, 115, 115, 115, 116, 116, 116, 117, 118, 120, 121, 122, 124, 126, 128, 130, 131, 133, 134, 135, 136, 137, 137, 137, 137, 137, 137, 136, 136, 135, 135, 134, 133, 133, 132, 131, 129, 128, 127, 125, 124, 123, 123, 122, 121, 121, 121, 121, 121, 121, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 125, 124, 124, 124, 124, 123, 123, 123, 124, 124, 125, 125, 125, 127, 128, 129, 129, 129, 129, 130, 131, 131, 131, 130, 130, 130, 130, 129, 129, 128, 127, 127, 128, 128, 128, 128, 127, 126, 126, 127, 127, 125, 124, 124, 126, 126, 126, 125, 125, 125, 126, 127, 127, 127, 127, 128, 129, 130, 129, 128, 128, 130, 133, 136, 141, 140, 124, 112, 114, 127, 140, 141, 129, 114, 110, 121, 135, 140, 132, 120, 116, 122, 132, 137, 133, 123, 116, 118, 125, 130, 130, 126, 123, 124, 126, 125, 125, 126, 128, 129, 128, 126, 127, 129, 132, 132, 131, 130, 130, 128, 128, 128, 128, 127, 125, 123, 124, 128, 130, 127, 123, 123, 126, 129, 130, 127, 123, 123, 126, 129, 129, 127, 124, 125, 127, 128, 127, 125, 125, 127, 129, 129, 131, 130, 127, 125, 125, 127, 130, 128, 125, 124, 126, 128, 130, 129, 125, 124, 127, 130, 129, 125, 122, 122, 124, 127, 126, 123, 122, 125, 127, 128, 127, 128, 128, 126, 125, 124, 126, 128, 127, 126, 125, 125, 127, 129, 128, 128, 127, 127, 129, 130, 131, 130, 127, 129, 131, 130, 129, 126, 123, 123, 130, 138, 133, 123, 117, 120, 133, 141, 135, 122, 114, 118, 129, 137, 135, 123, 114, 118, 130, 140, 137, 127, 115, 116, 132, 141, 132, 121, 116, 121, 134, 138, 132, 125, 121, 126, 135, 131, 126, 126, 121, 121, 127, 129, 126, 120, 119, 123, 127, 131, 131, 124, 122, 127, 131, 132, 133, 131, 126, 126, 131, 133, 134, 131, 126, 124, 125, 126, 129, 129, 124, 122, 120, 123, 132, 132, 125, 117, 116, 122, 127, 129, 127, 121, 121, 128, 136, 136, 129, 125, 126, 135, 145, 143, 137, 134, 135, 139, 146, 146, 137, 132, 131, 136, 141, 137, 128, 118, 108, 106, 104, 97, 90, 83, 83, 90, 98, 110, 125, 141, 159, 174, 186, 190, 189, 192, 191, 184, 173, 156, 136, 126, 123, 119, 114, 104, 93, 93, 90, 81, 71, 47, 35, 53, 77, 99, 114, 117, 131, 160, 189, 214, 220, 208, 196, 189, 184, 181, 167, 143, 125, 117, 124, 139, 138, 129, 119, 109, 103, 85, 51, 15, 0, 11, 46, 71, 89, 96, 115, 159, 205, 239, 245, 223, 198, 184, 178, 173, 159, 134, 114, 113, 134, 163, 171, 161, 150, 137, 124, 99, 54, 1, 0, 0, 0, 31, 67, 92, 112, 162, 229, 255, 255, 255, 225, 194, 174, 164, 146, 114, 92, 93, 114, 156, 186, 184, 173, 162, 146, 123, 78, 10, 0, 0, 0, 20, 69, 96, 106, 152, 226, 255, 255, 255, 223, 181, 159, 150, 138, 114, 100, 104, 125, 168, 199, 198, 189, 176, 159, 134, 86, 15, 0, 0, 0, 16, 72, 102, 111, 151, 219, 255, 255, 255, 209, 165, 144, 131, 118, 105, 101, 114, 145, 183, 207, 207, 195, 186, 172, 137, 81, 12, 0, 0, 0, 5, 66, 106, 127, 163, 224, 255, 255, 255, 210, 163, 133, 117, 104, 88, 90, 114, 150, 184, 200, 199, 189, 182, 177, 148, 85, 16, 0, 0, 0, 2, 57, 107, 136, 162, 217, 255, 255, 251, 196, 153, 129, 109, 94, 80, 87, 127, 169, 196, 207, 198, 188, 190, 185, 153, 81, 5, 0, 0, 0, 0, 47, 100, 149, 173, 218, 255, 255, 239, 190, 142, 126, 104, 86, 78, 91, 141, 183, 203, 209, 194, 186, 192, 178, 144, 72, 2, 0, 0, 0, 0, 50, 111, 164, 177, 216, 248, 239, 227, 185, 133, 122, 102, 82, 81, 95, 143, 192, 202, 204, 192, 181, 188, 173, 133, 76, 9, 0, 0, 0, 8, 74, 131, 176, 188, 218, 245, 233, 219, 168, 119, 113, 97, 78, 78, 107, 158, 197, 203, 199, 188, 185, 183, 163, 123, 66, 11, 0, 0, 0, 40, 95, 149, 176, 177, 216, 242, 227, 201, 143, 119, 119, 103, 84, 94, 128, 177, 204, 191, 188, 194, 191, 176, 142, 95, 50, 7, 0, 0, 0, 61, 126, 179, 189, 193, 240, 255, 228, 183, 131, 111, 107, 90, 77, 100, 147, 195, 197, 190, 201, 207, 194, 167, 113, 69, 24, 0, 0, 0, 19, 98, 156, 189, 186, 211, 255, 242, 204, 166, 121, 116, 103, 77, 90, 135, 174, 191, 188, 190, 212, 207, 175, 137, 89, 45, 0, 0, 0, 0, 83, 143, 177, 178, 203, 255, 255, 206, 167, 127, 121, 109, 63, 67, 122, 170, 192, 185, 183, 212, 220, 177, 129, 95, 57, 16, 0, 0, 0, 64, 126, 156, 168, 193, 255, 255, 209, 169, 137, 126, 116, 65, 55, 108, 160, 187, 181, 182, 217, 223, 184, 144, 113, 85, 29, 0, 0, 0, 48, 112, 131, 163, 194, 253, 255, 214, 174, 165, 139, 111, 60, 37, 96, 150, 172, 178, 186, 222, 233, 191, 156, 138, 106, 49, 0, 0, 0, 31, 90, 115, 157, 190, 245, 255, 225, 196, 184, 152, 117, 64, 47, 86, 125, 145, 157, 177, 217, 224, 192, 168, 148, 116, 58, 0, 0, 0, 18, 68, 90, 145, 184, 231, 255, 235, 214, 207, 168, 128, 83, 60, 87, 110, 118, 139, 171, 203, 214, 186, 170, 161, 119, 56, 1, 0, 0, 7, 42, 71, 130, 171, 224, 255, 242, 235, 224, 183, 143, 102, 82, 94, 107, 107, 129, 159, 185, 203, 186, 176, 176, 136, 68, 22, 0, 0, 20, 30, 51, 121, 155, 201, 238, 227, 246, 246, 198, 155, 123, 99, 98, 96, 91, 118, 145, 168, 186, 181, 170, 173, 140, 86, 51, 0, 0, 31, 25, 34, 94, 123, 162, 202, 211, 230, 246, 217, 180, 158, 133, 113, 109, 98, 99, 125, 142, 156, 165, 154, 157, 145, 102, 85, 48, 34, 73, 59, 48, 88, 103, 119, 156, 173, 191, 203, 190, 162, 155, 149, 129, 126, 130, 129, 129, 132, 142, 148, 146, 145, 140, 134, 118, 109, 102, 99, 103, 108, 101, 93, 100, 110, 109, 111, 113, 116, 118, 115, 120, 117, 126, 140, 150, 157, 162, 169, 176, 173, 174, 170, 158, 155, 142, 130, 127, 125, 122, 121, 118, 115, 112, 104, 96, 88, 83, 80, 77, 78, 82, 92, 106, 124, 137, 144, 155, 158, 162, 167, 168, 169, 167, 161, 158, 159, 153, 151, 154, 153, 148, 139, 129, 117, 106, 94, 82, 70, 63, 55, 58, 67, 79, 92, 103, 115, 126, 135, 142, 146, 149, 154, 154, 159, 161, 162, 167, 172, 177, 175, 168, 161, 151, 140, 128, 116, 103, 87, 76, 71, 67, 68, 70, 72, 78, 84, 92, 102, 109, 121, 127, 129, 136, 144, 149, 158, 166, 172, 181, 184, 184, 184, 178, 171, 165, 154, 139, 126, 113, 101, 95, 90, 84, 81, 80, 77, 78, 83, 84, 86, 92, 98, 102, 109, 121, 135, 144, 155, 168, 180, 190, 193, 191, 190, 189, 184, 175, 164, 155, 148, 138, 128, 118, 109, 103, 98, 95, 92, 84, 77, 76, 72, 73, 78, 85, 95, 109, 121, 134, 147, 157, 166, 174, 179, 183, 186, 182, 178, 176, 176, 172, 167, 158, 152, 144, 133, 125, 115, 103, 94, 85, 79, 76, 70, 70, 74, 81, 90, 98, 104, 114, 125, 137, 147, 156, 162, 167, 173, 177, 181, 183, 184, 182, 181, 176, 170, 161, 148, 134, 123, 112, 102, 91, 82, 74, 68, 67, 66, 65, 69, 76, 84, 96, 107, 119, 131, 142, 157, 171, 179, 186, 192, 197, 199, 200, 196, 189, 180, 167, 155, 143, 130, 117, 105, 91, 80, 69, 57, 50, 46, 45, 50, 59, 69, 83, 96, 114, 133, 149, 161, 175, 186, 197, 206, 208, 208, 208, 204, 197, 188, 174, 163, 151, 132, 115, 100, 86, 69, 55, 47, 39, 34, 34, 37, 47, 61, 77, 95, 115, 132, 148, 164, 179, 192, 202, 211, 215, 217, 217, 212, 205, 194, 177, 163, 145, 125, 108, 91, 74, 57, 44, 36, 29, 25, 25, 33, 49, 67, 84, 103, 123, 143, 161, 177, 193, 206, 216, 221, 223, 224, 221, 212, 201, 185, 170, 155, 135, 114, 95, 77, 58, 43, 31, 21, 15, 18, 26, 41, 58, 76, 99, 122, 143, 163, 181, 197, 210, 220, 226, 227, 225, 221, 213, 202, 186, 171, 153, 134, 115, 95, 75, 54, 38, 26, 16, 11, 13, 22, 37, 56, 76, 99, 123, 146, 167, 188, 204, 217, 228, 232, 232, 230, 223, 213, 200, 184, 166, 147, 128, 107, 86, 63, 43, 30, 19, 9, 8, 13, 24, 42, 63, 85, 108, 131, 154, 176, 194, 209, 223, 231, 235, 236, 232, 223, 212, 197, 181, 162, 141, 120, 99, 75, 51, 33, 19, 7, 3, 6, 14, 31, 52, 76, 101, 125, 146, 168, 188, 205, 220, 231, 232, 233, 231, 222, 213, 200, 185, 168, 148, 129, 110, 90, 65, 44, 29, 16, 8, 9, 15, 28, 47, 67, 90, 114, 135, 156, 177, 195, 209, 221, 226, 228, 229, 223, 215, 204, 191, 175, 158, 139, 119, 99, 77, 53, 35, 22, 10, 7, 12, 23, 40, 60, 81, 105, 129, 151, 172, 193, 212, 224, 232, 234, 235, 229, 218, 205, 191, 175, 156, 137, 117, 98, 75, 53, 35, 23, 13, 9, 15, 25, 40, 59, 78, 100, 123, 145, 166, 185, 202, 214, 222, 225, 227, 225, 218, 208, 196, 183, 168, 149, 130, 110, 87, 63, 44, 33, 23, 16, 16, 20, 32, 51, 72, 93, 117, 137, 157, 177, 195, 209, 219, 223, 225, 224, 219, 211, 198, 184, 168, 150, 132, 112, 91, 70, 50, 37, 26, 17, 14, 18, 32, 51, 72, 93, 114, 135, 155, 176, 194, 210, 220, 223, 225, 226, 222, 212, 199, 182, 167, 151, 134, 114, 93, 72, 50, 35, 25, 15, 11, 16, 29, 45, 67, 87, 107, 131, 154, 174, 194, 211, 220, 227, 230, 231, 226, 216, 203, 188, 174, 156, 137, 117, 96, 75, 55, 39, 28, 18, 10, 13, 24, 40, 62, 83, 102, 125, 148, 168, 189, 206, 215, 223, 226, 228, 227, 218, 206, 191, 177, 161, 143, 123, 103, 83, 62, 45, 33, 22, 12, 10, 19, 34, 55, 77, 96, 117, 142, 164, 184, 203, 215, 223, 227, 231, 230, 223, 212, 196, 181, 165, 147, 127, 107, 87, 65, 47, 35, 24, 15, 11, 16, 30, 51, 72, 91, 112, 135, 157, 178, 197, 211, 221, 226, 228, 229, 224, 213, 199, 184, 168, 152, 133, 111, 92, 71, 52, 38, 28, 19, 13, 18, 31, 49, 70, 89, 108, 130, 152, 173, 193, 207, 217, 222, 223, 226, 223, 213, 201, 186, 173, 159, 140, 118, 97, 77, 56, 40, 31, 21, 13, 14, 25, 42, 63, 84, 103, 124, 147, 169, 191, 207, 216, 222, 224, 228, 227, 219, 207, 190, 176, 161, 142, 121, 100, 80, 59, 41, 31, 23, 12, 11, 19, 34, 57, 81, 101, 121, 142, 163, 187, 205, 216, 224, 225, 227, 228, 222, 210, 194, 177, 161, 145, 127, 108, 87, 65, 45, 33, 25, 15, 12, 18, 29, 50, 74, 95, 116, 138, 157, 180, 201, 216, 226, 226, 225, 226, 223, 214, 200, 182, 164, 148, 131, 114, 94, 71, 49, 34, 28, 19, 13, 16, 24, 41, 66, 87, 109, 130, 148, 168, 190, 208, 222, 226, 225, 227, 226, 222, 211, 192, 174, 159, 142, 124, 105, 82, 58, 39, 31, 23, 12, 11, 18, 32, 55, 77, 98, 121, 141, 160, 182, 201, 217, 224, 224, 225, 226, 223, 216, 199, 181, 165, 148, 130, 111, 89, 65, 45, 35, 28, 16, 11, 15, 24, 45, 69, 90, 114, 134, 152, 174, 193, 212, 224, 225, 225, 227, 227, 222, 209, 190, 172, 153, 136, 118, 98, 75, 52, 37, 29, 19, 11, 13, 20, 36, 59, 82, 105, 126, 145, 165, 186, 206, 223, 227, 225, 227, 226, 223, 213, 196, 178, 159, 141, 123, 104, 83, 60, 41, 32, 25, 16, 16, 20, 31, 51, 72, 94, 118, 137, 156, 177, 196, 215, 226, 225, 226, 226, 224, 217, 204, 187, 169, 150, 130, 111, 91, 69, 47, 36, 30, 21, 17, 19, 25, 42, 61, 81, 106, 126, 147, 169, 189, 209, 226, 231, 230, 231, 229, 224, 213, 195, 177, 157, 137, 117, 98, 75, 50, 37, 33, 24, 14, 13, 17, 31, 52, 73, 96, 118, 138, 159, 180, 200, 218, 228, 227, 229, 231, 230, 224, 209, 190, 169, 149, 128, 109, 87, 63, 43, 37, 28, 13, 7, 7, 17, 37, 58, 81, 106, 129, 152, 175, 196, 216, 230, 233, 234, 235, 233, 227, 214, 197, 177, 156, 135, 115, 96, 72, 50, 40, 33, 18, 7, 5, 9, 26, 48, 72, 98, 124, 145, 168, 189, 211, 227, 234, 234, 232, 231, 227, 219, 204, 185, 165, 142, 121, 102, 79, 55, 42, 35, 24, 12, 10, 12, 24, 45, 66, 91, 115, 137, 159, 180, 199, 217, 229, 231, 230, 228, 226, 220, 205, 187, 169, 150, 130, 112, 93, 68, 49, 41, 33, 22, 18, 15, 19, 35, 55, 76, 106, 134, 155, 177, 195, 215, 232, 238, 236, 229, 223, 216, 202, 181, 159, 135, 108, 85, 63, 34, 14, 16, 28, 47, 59, 68, 80, 97, 119, 139, 158, 170, 171, 169, 170, 173, 185, 192, 191, 185, 181, 182, 178, 168, 149, 128, 103, 75, 52, 24, 12, 26, 54, 79, 90, 97, 104, 118, 141, 164, 179, 186, 180, 173, 169, 169, 178, 182, 177, 168, 163, 164, 164, 157, 141, 117, 81, 45, 12, 0, 6, 41, 76, 100, 116, 118, 128, 147, 163, 180, 188, 182, 174, 168, 164, 172, 183, 187, 183, 177, 171, 164, 154, 139, 115, 78, 36, 0, 0, 0, 26, 81, 118, 136, 139, 137, 149, 166, 183, 195, 192, 181, 169, 160, 162, 174, 179, 174, 167, 161, 155, 144, 133, 116, 83, 43, 1, 0, 0, 19, 84, 136, 163, 166, 153, 149, 152, 168, 185, 185, 173, 159, 148, 154, 173, 192, 193, 184, 176, 164, 153, 137, 116, 84, 39, 0, 0, 0, 0, 68, 132, 165, 174, 160, 144, 141, 151, 171, 182, 179, 166, 156, 161, 180, 199, 205, 193, 178, 165, 149, 135, 117, 91, 50, 7, 0, 0, 0, 57, 129, 169, 181, 166, 141, 131, 135, 155, 171, 175, 169, 160, 162, 177, 201, 211, 202, 183, 167, 149, 135, 116, 92, 58, 17, 0, 0, 0, 34, 110, 167, 188, 183, 153, 130, 123, 136, 161, 175, 181, 173, 170, 174, 188, 202, 198, 183, 164, 151, 136, 122, 105, 79, 42, 4, 0, 0, 6, 78, 148, 187, 196, 167, 134, 114, 113, 139, 164, 182, 188, 180, 178, 178, 191, 193, 185, 170, 155, 144, 129, 115, 95, 63, 25, 0, 0, 0, 44, 124, 180, 204, 188, 144, 112, 94, 111, 145, 175, 197, 194, 185, 175, 177, 189, 187, 183, 166, 154, 139, 122, 106, 78, 40, 3, 0, 0, 20, 95, 170, 202, 204, 159, 115, 84, 84, 119, 156, 190, 201, 192, 180, 172, 180, 183, 181, 175, 164, 158, 143, 129, 101, 62, 20, 0, 0, 0, 58, 140, 187, 204, 179, 126, 92, 71, 95, 132, 175, 204, 204, 195, 177, 171, 173, 170, 172, 165, 169, 161, 146, 124, 83, 41, 0, 0, 0, 22, 96, 169, 202, 205, 159, 113, 76, 70, 102, 146, 192, 212, 210, 193, 171, 167, 162, 163, 167, 167, 173, 156, 140, 108, 66, 28, 0, 0, 0, 43, 128, 186, 217, 195, 141, 90, 55, 70, 111, 170, 211, 223, 208, 180, 164, 162, 165, 170, 172, 175, 167, 148, 126, 91, 53, 14, 0, 0, 3, 75, 161, 208, 219, 170, 108, 57, 42, 81, 141, 206, 234, 227, 195, 165, 156, 159, 168, 177, 178, 176, 157, 135, 107, 69, 33, 0, 0, 0, 41, 127, 199, 226, 206, 137, 74, 37, 49, 105, 170, 220, 229, 205, 172, 150, 153, 164, 178, 190, 187, 179, 149, 121, 81, 44, 13, 0, 0, 19, 87, 164, 207, 211, 165, 101, 54, 41, 78, 139, 199, 229, 224, 190, 159, 142, 149, 163, 186, 195, 191, 169, 132, 97, 55, 28, 4, 0, 7, 51, 121, 183, 208, 195, 133, 78, 40, 54, 106, 174, 226, 240, 218, 175, 143, 133, 145, 172, 193, 196, 184, 147, 112, 73, 46, 24, 5, 0, 24, 78, 152, 200, 209, 169, 100, 48, 31, 74, 142, 211, 242, 233, 192, 149, 128, 138, 163, 194, 204, 198, 165, 125, 90, 57, 35, 12, 0, 0, 46, 119, 185, 214, 195, 129, 64, 30, 53, 117, 195, 242, 243, 206, 157, 127, 131, 158, 190, 209, 203, 177, 132, 96, 65, 43, 26, 2, 0, 22, 83, 162, 205, 213, 159, 88, 38, 36, 95, 172, 238, 248, 220, 163, 125, 119, 147, 183, 210, 213, 191, 145, 104, 67, 50, 36, 24, 10, 18, 66, 124, 186, 194, 176, 103, 53, 31, 71, 150, 220, 255, 233, 184, 127, 109, 130, 172, 213, 228, 213, 167, 108, 68, 38, 40, 36, 33, 26, 49, 92, 146, 180, 179, 138, 74, 41, 51, 118, 196, 252, 249, 204, 143, 107, 116, 158, 208, 236, 228, 187, 124, 73, 45, 40, 47, 44, 29, 32, 59, 120, 168, 189, 162, 98, 52, 40, 96, 168, 239, 250, 217, 156, 110, 112, 151, 201, 233, 224, 190, 133, 87, 63, 54, 57, 43, 21, 9, 42, 105, 175, 201, 181, 112, 58, 36, 79, 154, 224, 250, 216, 162, 111, 113, 151, 198, 225, 221, 189, 142, 96, 78, 72, 71, 54, 19, 0, 26, 97, 172, 207, 184, 120, 53, 29, 66, 145, 220, 250, 222, 165, 113, 110, 150, 197, 229, 222, 187, 141, 94, 77, 77, 77, 59, 20, 0, 12, 79, 169, 214, 200, 136, 55, 26, 58, 142, 222, 255, 225, 162, 105, 102, 150, 209, 242, 230, 186, 139, 95, 81, 84, 84, 65, 17, 0, 0, 74, 173, 220, 198, 124, 38, 18, 58, 156, 234, 255, 211, 136, 82, 96, 173, 243, 255, 224, 163, 113, 88, 89, 106, 96, 67, 0, 0, 0, 96, 207, 239, 198, 101, 15, 12, 77, 188, 255, 255, 181, 92, 63, 111, 216, 255, 255, 192, 115, 83, 90, 119, 138, 107, 47, 0, 0, 10, 120, 226, 233, 171, 71, 7, 38, 121, 221, 255, 217, 135, 76, 95, 168, 250, 255, 211, 143, 100, 111, 134, 141, 122, 63, 13, 0, 0, 54, 163, 238, 201, 122, 31, 22, 93, 181, 244, 224, 163, 103, 88, 141, 208, 255, 232, 174, 127, 116, 143, 148, 140, 96, 38, 0, 0, 0, 96, 196, 231, 163, 86, 17, 44, 118, 194, 232, 196, 143, 97, 108, 166, 224, 248, 210, 154, 127, 134, 160, 149, 122, 61, 16, 0, 0, 46, 129, 207, 200, 129, 61, 20, 76, 156, 225, 231, 167, 110, 91, 141, 206, 237, 231, 174, 140, 134, 156, 164, 131, 92, 34, 10, 0, 0, 79, 152, 203, 164, 98, 45, 43, 120, 193, 227, 198, 126, 101, 123, 182, 225, 219, 190, 148, 144, 154, 161, 140, 107, 82, 44, 10, 0, 5, 104, 193, 222, 143, 60, 22, 66, 161, 217, 215, 161, 111, 118, 158, 202, 214, 196, 166, 148, 163, 172, 159, 119, 93, 70, 41, 0, 0, 26, 128, 217, 207, 102, 32, 28, 115, 204, 219, 179, 122, 108, 149, 188, 210, 195, 177, 170, 168, 178, 163, 134, 103, 93, 65, 33, 0, 0, 66, 161, 219, 158, 59, 36, 80, 174, 211, 176, 138, 121, 144, 177, 180, 185, 186, 195, 193, 172, 152, 130, 121, 117, 102, 48, 0, 0, 0, 113, 183, 190, 116, 60, 73, 119, 167, 171, 150, 154, 160, 169, 164, 155, 183, 197, 204, 178, 155, 157, 156, 136, 108, 79, 37, 6, 0, 5, 115, 188, 188, 109, 63, 80, 121, 165, 167, 155, 167, 160, 158, 148, 160, 193, 206, 198, 167, 153, 159, 154, 120, 90, 77, 46, 13, 0, 0, 118, 188, 182, 102, 69, 99, 134, 154, 145, 151, 180, 172, 159, 143, 166, 206, 202, 186, 170, 171, 174, 143, 105, 88, 85, 47, 0, 0, 0, 133, 184, 167, 99, 70, 117, 145, 143, 141, 150, 181, 179, 149, 149, 172, 202, 203, 185, 179, 187, 173, 137, 100, 99, 100, 45, 0, 0, 0, 126, 174, 148, 100, 93, 130, 134, 115, 127, 160, 193, 175, 137, 153, 178, 203, 195, 176, 187, 189, 172, 139, 105, 100, 102, 60, 10, 0, 0, 87, 147, 144, 130, 115, 137, 131, 108, 126, 165, 190, 173, 142, 151, 182, 194, 183, 182, 190, 196, 181, 147, 119, 105, 97, 62, 18, 0, 0, 47, 121, 135, 132, 112, 122, 135, 125, 131, 160, 175, 175, 157, 147, 169, 187, 189, 192, 189, 188, 189, 167, 147, 117, 97, 85, 38, 9, 0, 0, 79, 114, 115, 113, 118, 144, 151, 140, 151, 163, 169, 162, 143, 145, 160, 174, 178, 174, 174, 173, 163, 156, 147, 132, 123, 111, 91, 70, 54, 53, 69, 83, 74, 72, 77, 89, 110, 112, 118, 125, 142, 157, 160, 163, 172, 181, 185, 188, 188, 188, 187, 187, 183, 174, 161, 153, 135, 104, 80, 59, 50, 48, 40, 25, 19, 35, 51, 66, 77, 97, 125, 159, 178, 185, 201, 205, 215, 215, 202, 194, 193, 196, 197, 188, 167, 152, 142, 121, 100, 77, 47, 36, 24, 8, 6, 15, 35, 55, 75, 93, 118, 148, 162, 177, 195, 207, 214, 209, 210, 209, 202, 202, 198, 189, 182, 164, 153, 147, 128, 105, 76, 49, 29, 17, 9, 0, 0, 22, 47, 70, 92, 110, 140, 167, 182, 197, 206, 211, 216, 214, 208, 203, 197, 197, 191, 182, 170, 158, 150, 136, 112, 82, 57, 37, 20, 14, 2, 0, 18, 38, 55, 70, 95, 129, 156, 171, 184, 199, 210, 219, 220, 220, 218, 214, 205, 197, 191, 185, 175, 160, 151, 135, 106, 83, 58, 30, 18, 9, 0, 0, 7, 28, 47, 69, 97, 123, 152, 165, 175, 194, 209, 220, 218, 212, 211, 211, 209, 199, 191, 184, 178, 169, 155, 137, 115, 92, 67, 40, 20, 7, 0, 0, 0, 22, 43, 66, 92, 119, 147, 172, 187, 203, 217, 225, 225, 221, 216, 212, 207, 197, 194, 193, 182, 167, 154, 141, 122, 97, 70, 47, 24, 9, 0, 0, 0, 0, 17, 44, 73, 101, 133, 160, 177, 196, 210, 222, 228, 225, 224, 220, 214, 207, 193, 188, 182, 171, 163, 148, 131, 115, 90, 70, 46, 19, 2, 0, 0, 0, 9, 31, 56, 82, 111, 140, 167, 187, 202, 219, 228, 228, 225, 218, 212, 209, 204, 195, 186, 182, 173, 160, 151, 135, 118, 99, 74, 54, 34, 13, 3, 3, 0, 0, 25, 48, 69, 99, 124, 152, 176, 186, 200, 217, 226, 227, 221, 214, 208, 203, 195, 185, 176, 170, 162, 152, 143, 132, 114, 91, 69, 51, 30, 8, 1, 4, 2, 8, 26, 49, 77, 108, 134, 159, 179, 197, 210, 220, 230, 225, 218, 215, 207, 198, 186, 172, 172, 168, 153, 143, 136, 126, 113, 95, 74, 55, 38, 22, 12, 18, 18, 14, 29, 49, 72, 99, 124, 154, 179, 194, 204, 217, 228, 227, 218, 211, 205, 197, 182, 172, 169, 160, 153, 146, 138, 131, 120, 106, 95, 77, 58, 43, 21, 12, 17, 18, 24, 38, 59, 85, 106, 136, 160, 179, 193, 201, 216, 222, 215, 209, 203, 198, 188, 175, 167, 157, 149, 149, 143, 135, 130, 121, 106, 88, 79, 64, 45, 31, 21, 21, 25, 25, 36, 57, 80, 106, 130, 154, 182, 196, 203, 210, 216, 215, 203, 201, 196, 191, 186, 175, 172, 171, 163, 146, 135, 124, 105, 97, 88, 68, 48, 32, 7, 0, 10, 38, 43, 69, 108, 142, 161, 177, 205, 207, 193, 196, 190, 177, 163, 153, 154, 145, 142, 154, 157, 158, 166, 171, 164, 150, 142, 133, 114, 98, 97, 80, 53, 54, 51, 37, 22, 45, 80, 77, 106, 150, 160, 157, 170, 193, 178, 150, 169, 166, 138, 143, 152, 147, 139, 148, 168, 158, 162, 184, 177, 159, 149, 153, 137, 113, 115, 109, 90, 74, 72, 61, 41, 26, 35, 72, 70, 93, 137, 142, 145, 162, 182, 169, 150, 164, 157, 136, 150, 154, 142, 140, 153, 166, 156, 162, 191, 181, 166, 176, 163, 130, 123, 120, 99, 91, 85, 77, 56, 40, 47, 16, 36, 86, 74, 113, 146, 142, 149, 157, 172, 160, 146, 166, 149, 128, 149, 150, 137, 140, 163, 163, 160, 183, 196, 185, 177, 183, 156, 128, 133, 122, 95, 95, 96, 69, 57, 52, 46, 23, 28, 82, 75, 88, 138, 138, 139, 151, 160, 157, 144, 162, 160, 138, 151, 159, 146, 147, 167, 173, 160, 177, 193, 178, 179, 173, 157, 140, 133, 134, 106, 98, 111, 83, 71, 76, 50, 41, 23, 40, 73, 62, 95, 129, 120, 131, 151, 156, 151, 151, 167, 150, 140, 160, 151, 150, 158, 163, 168, 166, 180, 180, 175, 180, 171, 151, 140, 129, 123, 113, 99, 109, 90, 72, 84, 60, 52, 46, 36, 77, 73, 87, 137, 128, 138, 152, 154, 159, 153, 161, 150, 139, 152, 145, 143, 151, 155, 164, 165, 176, 181, 179, 185, 164, 153, 149, 123, 125, 121, 104, 115, 111, 93, 95, 81, 67, 61, 32, 45, 75, 64, 96, 126, 120, 140, 143, 156, 163, 147, 163, 147, 134, 157, 146, 142, 158, 159, 154, 164, 177, 173, 173, 176, 164, 151, 147, 136, 125, 128, 124, 106, 110, 109, 87, 83, 71, 46, 36, 27, 52, 75, 71, 114, 129, 118, 151, 158, 156, 157, 159, 162, 144, 158, 163, 148, 163, 162, 159, 165, 160, 174, 168, 161, 178, 156, 142, 156, 138, 124, 132, 124, 114, 122, 108, 82, 83, 58, 40, 36, 21, 52, 67, 68, 116, 129, 122, 150, 174, 163, 158, 174, 155, 137, 153, 148, 138, 149, 158, 153, 159, 169, 166, 163, 168, 173, 158, 151, 153, 141, 132, 136, 131, 119, 122, 116, 94, 91, 68, 46, 46, 19, 33, 67, 62, 97, 130, 121, 142, 163, 158, 160, 165, 160, 146, 144, 149, 144, 147, 151, 153, 154, 158, 167, 163, 172, 177, 162, 163, 152, 140, 143, 132, 126, 128, 119, 114, 113, 98, 88, 73, 54, 43, 19, 39, 64, 58, 106, 127, 117, 152, 157, 157, 167, 162, 167, 146, 144, 157, 138, 143, 156, 149, 146, 159, 168, 154, 170, 179, 150, 157, 153, 128, 138, 130, 121, 135, 122, 120, 131, 105, 98, 89, 54, 54, 27, 22, 69, 52, 78, 129, 108, 131, 164, 156, 163, 172, 169, 155, 151, 156, 139, 143, 153, 143, 148, 159, 163, 161, 165, 173, 161, 154, 158, 140, 136, 140, 124, 132, 133, 112, 125, 122, 94, 99, 80, 54, 51, 25, 31, 63, 55, 85, 124, 111, 139, 171, 160, 166, 177, 165, 152, 154, 151, 138, 140, 145, 145, 153, 160, 168, 169, 168, 171, 160, 158, 149, 135, 140, 128, 123, 130, 121, 116, 118, 113, 97, 92, 78, 50, 52, 26, 27, 67, 56, 88, 128, 120, 149, 172, 172, 174, 172, 166, 148, 144, 143, 127, 130, 141, 141, 151, 160, 166, 169, 167, 168, 161, 153, 148, 137, 136, 133, 129, 131, 131, 127, 123, 119, 109, 95, 85, 64, 52, 40, 25, 56, 64, 75, 121, 126, 142, 172, 172, 175, 174, 169, 157, 143, 145, 136, 128, 142, 143, 148, 159, 165, 171, 169, 173, 163, 153, 157, 142, 133, 138, 130, 125, 129, 128, 118, 121, 113, 98, 93, 76, 59, 54, 33, 38, 71, 65, 95, 132, 127, 153, 175, 170, 174, 176, 165, 148, 146, 142, 132, 136, 140, 144, 150, 158, 163, 165, 168, 166, 157, 155, 150, 135, 136, 128, 117, 124, 121, 114, 118, 117, 102, 96, 88, 68, 59, 51, 31, 49, 69, 66, 109, 128, 125, 159, 170, 163, 172, 169, 152, 142, 139, 134, 127, 134, 141, 141, 153, 159, 161, 170, 167, 164, 160, 155, 145, 135, 136, 122, 121, 126, 114, 117, 124, 111, 103, 105, 85, 68, 64, 43, 31, 57, 64, 74, 116, 125, 133, 166, 169, 167, 179, 168, 150, 146, 141, 132, 131, 136, 140, 145, 152, 157, 163, 167, 166, 163, 159, 153, 141, 141, 137, 124, 132, 128, 118, 125, 122, 110, 108, 100, 83, 67, 60, 45, 35, 64, 69, 80, 122, 128, 139, 173, 173, 171, 180, 168, 152, 148, 144, 134, 134, 139, 142, 148, 158, 160, 165, 170, 166, 163, 159, 153, 140, 140, 135, 124, 130, 128, 120, 126, 120, 109, 110, 101, 83, 71, 64, 42, 43, 70, 66, 92, 124, 122, 150, 173, 167, 179, 181, 163, 155, 149, 137, 133, 136, 135, 141, 149, 157, 159, 167, 170, 163, 165, 159, 149, 144, 142, 131, 128, 131, 124, 123, 124, 117, 114, 108, 100, 85, 72, 68, 44, 49, 74, 64, 96, 125, 118, 151, 170, 161, 177, 174, 158, 157, 149, 138, 136, 137, 135, 142, 150, 155, 158, 166, 165, 159, 163, 154, 145, 145, 137, 128, 126, 121, 118, 120, 116, 114, 115, 104, 99, 91, 70, 67, 52, 47, 69, 68, 89, 117, 118, 143, 164, 157, 168, 172, 154, 153, 152, 136, 134, 140, 132, 138, 151, 148, 153, 165, 160, 161, 161, 150, 146, 140, 132, 126, 121, 122, 116, 118, 120, 114, 115, 108, 98, 93, 77, 66, 57, 47, 61, 67, 80, 105, 115, 132, 154, 157, 164, 169, 158, 155, 152, 141, 140, 140, 137, 142, 146, 149, 152, 159, 164, 161, 159, 156, 146, 138, 136, 126, 122, 124, 119, 120, 121, 118, 116, 114, 106, 98, 89, 76, 64, 53, 60, 65, 71, 100, 110, 117, 148, 154, 156, 171, 164, 152, 157, 149, 137, 145, 144, 137, 149, 153, 146, 158, 165, 158, 161, 162, 148, 146, 142, 130, 129, 126, 121, 124, 124, 120, 119, 119, 110, 104, 100, 81, 77, 64, 54, 70, 69, 85, 111, 110, 131, 152, 149, 161, 164, 154, 153, 151, 144, 142, 143, 142, 142, 147, 150, 149, 159, 159, 154, 159, 151, 143, 142, 135, 129, 127, 125, 124, 123, 123, 120, 121, 114, 108, 109, 93, 83, 80, 61, 59, 69, 71, 90, 108, 115, 136, 149, 150, 165, 162, 154, 159, 151, 147, 151, 146, 147, 149, 149, 153, 154, 157, 157, 155, 153, 147, 142, 139, 133, 129, 128, 123, 124, 125, 122, 122, 120, 114, 112, 105, 95, 88, 77, 63, 62, 70, 72, 88, 108, 112, 132, 151, 148, 160, 166, 152, 157, 156, 144, 149, 149, 142, 147, 149, 146, 151, 154, 153, 154, 153, 144, 141, 139, 132, 130, 128, 122, 122, 124, 119, 119, 121, 114, 113, 111, 99, 90, 82, 68, 61, 68, 72, 83, 102, 107, 123, 143, 143, 155, 162, 151, 156, 156, 147, 151, 148, 143, 149, 147, 146, 150, 151, 150, 153, 151, 142, 142, 139, 131, 131, 129, 123, 124, 123, 120, 120, 117, 116, 114, 110, 106, 96, 87, 79, 66, 68, 73, 78, 93, 103, 110, 130, 139, 144, 155, 153, 152, 155, 151, 150, 151, 147, 148, 149, 147, 148, 150, 151, 150, 151, 146, 141, 142, 136, 134, 133, 126, 129, 128, 125, 126, 121, 120, 117, 113, 112, 104, 95, 89, 76, 69, 73, 75, 85, 98, 101, 117, 134, 136, 151, 158, 152, 159, 160, 153, 157, 155, 151, 153, 151, 150, 152, 154, 153, 154, 151, 146, 146, 144, 140, 138, 133, 130, 130, 127, 126, 124, 119, 119, 117, 115, 113, 104, 96, 88, 74, 71, 73, 76, 88, 94, 101, 120, 130, 139, 154, 155, 156, 164, 161, 159, 163, 155, 154, 156, 150, 151, 154, 153, 154, 154, 148, 148, 148, 143, 142, 137, 128, 130, 127, 122, 122, 121, 118, 119, 120, 118, 114, 107, 97, 86, 74, 69, 71, 78, 86, 93, 105, 120, 131, 143, 153, 154, 157, 162, 160, 160, 159, 155, 153, 153, 149, 149, 153, 152, 151, 152, 147, 145, 146, 143, 140, 136, 131, 129, 127, 123, 121, 120, 119, 118, 119, 118, 112, 106, 98, 85, 73, 67, 70, 79, 84, 91, 107, 121, 133, 146, 153, 155, 159, 162, 162, 162, 160, 155, 155, 153, 148, 151, 152, 150, 153, 150, 144, 143, 142, 137, 135, 130, 125, 124, 122, 121, 121, 119, 119, 119, 119, 117, 111, 105, 97, 85, 74, 66, 67, 76, 83, 90, 105, 119, 130, 144, 152, 154, 158, 161, 161, 160, 158, 154, 153, 152, 149, 150, 150, 150, 152, 151, 148, 144, 142, 140, 135, 131, 127, 123, 121, 121, 120, 120, 120, 119, 120, 120, 114, 107, 100, 90, 78, 69, 67, 74, 82, 89, 99, 114, 126, 137, 148, 152, 154, 158, 159, 158, 157, 153, 151, 152, 149, 148, 150, 149, 150, 151, 147, 143, 141, 139, 135, 130, 125, 122, 120, 120, 119, 118, 118, 118, 119, 120, 116, 110, 103, 94, 82, 72, 66, 70, 78, 84, 92, 106, 120, 132, 144, 151, 153, 156, 159, 159, 157, 154, 151, 151, 150, 147, 147, 149, 149, 150, 149, 144, 142, 141, 138, 134, 130, 125, 123, 121, 119, 117, 117, 116, 117, 118, 117, 111, 105, 96, 86, 76, 66, 67, 75, 81, 89, 102, 116, 128, 141, 150, 153, 156, 158, 157, 156, 153, 150, 149, 147, 145, 145, 146, 148, 149, 149, 147, 143, 142, 139, 134, 130, 125, 121, 119, 118, 116, 117, 117, 116, 119, 118, 112, 107, 99, 90, 81, 70, 68, 75, 83, 89, 101, 114, 127, 140, 150, 154, 157, 160, 159, 158, 156, 152, 149, 148, 146, 144, 146, 147, 149, 150, 148, 145, 143, 141, 137, 131, 126, 123, 120, 119, 118, 118, 119, 119, 121, 122, 118, 112, 106, 97, 88, 77, 69, 73, 80, 86, 95, 107, 120, 134, 144, 151, 155, 156, 157, 158, 156, 153, 150, 149, 148, 147, 147, 149, 151, 151, 151, 147, 144, 142, 139, 135, 131, 126, 123, 123, 122, 121, 122, 121, 122, 124, 123, 120, 114, 107, 98, 87, 76, 72, 76, 83, 88, 98, 110, 123, 136, 146, 151, 153, 156, 157, 157, 155, 153, 150, 149, 148, 148, 148, 150, 152, 152, 151, 148, 144, 143, 141, 135, 131, 127, 124, 124, 124, 123, 124, 125, 125, 126, 126, 122, 116, 107, 98, 88, 78, 74, 79, 84, 90, 100, 112, 125, 138, 146, 150, 154, 155, 156, 155, 154, 152, 150, 149, 147, 147, 148, 150, 152, 152, 152, 148, 146, 143, 138, 133, 128, 124, 121, 121, 121, 121, 122, 124, 124, 125, 125, 121, 116, 108, 99, 89, 80, 76, 80, 84, 90, 100, 112, 124, 136, 144, 149, 152, 153, 154, 154, 153, 151, 150, 148, 147, 147, 147, 149, 150, 150, 150, 148, 144, 142, 139, 134, 129, 126, 123, 123, 123, 122, 123, 124, 124, 125, 126, 122, 117, 110, 100, 90, 82, 77, 79, 83, 88, 99, 110, 121, 133, 142, 146, 150, 152, 152, 152, 150, 148, 147, 146, 145, 145, 146, 147, 148, 149, 148, 145, 142, 140, 137, 133, 128, 125, 123, 121, 121, 121, 122, 123, 124, 125, 125, 121, 117, 110, 100, 91, 83, 77, 79, 84, 88, 98, 108, 119, 131, 139, 144, 148, 150, 150, 150, 149, 147, 146, 144, 143, 143, 144, 145, 146, 146, 146, 144, 142, 139, 136, 132, 127, 123, 121, 119, 119, 119, 121, 123, 123, 124, 125, 122, 117, 110, 101, 93, 85, 79, 80, 83, 87, 96, 106, 117, 129, 137, 143, 148, 148, 149, 151, 149, 147, 146, 145, 143, 143, 143, 145, 145, 145, 145, 143, 141, 138, 135, 132, 127, 123, 121, 119, 119, 119, 121, 122, 122, 123, 124, 123, 119, 113, 104, 97, 88, 81, 81, 82, 85, 93, 103, 115, 127, 136, 144, 148, 150, 152, 153, 151, 149, 148, 146, 145, 144, 145, 146, 146, 147, 147, 145, 143, 141, 137, 133, 129, 125, 123, 120, 120, 121, 121, 122, 124, 124, 125, 123, 120, 114, 106, 99, 91, 84, 83, 84, 87, 94, 103, 114, 126, 135, 142, 148, 151, 151, 153, 152, 150, 148, 146, 145, 144, 144, 144, 145, 145, 146, 145, 143, 141, 139, 136, 132, 128, 125, 123, 121, 121, 122, 123, 123, 124, 126, 125, 121, 117, 110, 103, 96, 89, 87, 87, 89, 95, 104, 113, 124, 134, 141, 148, 151, 152, 154, 153, 151, 150, 148, 146, 146, 146, 146, 146, 146, 146, 145, 143, 142, 139, 137, 133, 129, 126, 123, 120, 119, 118, 118, 118, 119, 121, 122, 119, 115, 110, 104, 98, 91, 88, 87, 89, 93, 101, 110, 120, 131, 138, 145, 149, 151, 153, 153, 152, 151, 149, 148, 148, 147, 147, 147, 146, 146, 145, 143, 142, 140, 137, 134, 130, 126, 123, 121, 119, 119, 119, 119, 120, 122, 122, 120, 117, 113, 107, 102, 96, 93, 92, 92, 96, 103, 110, 119, 130, 138, 144, 148, 150, 152, 153, 152, 151, 149, 148, 147, 147, 147, 146, 146, 147, 146, 145, 145, 144, 141, 137, 134, 130, 126, 123, 121, 119, 118, 117, 118, 120, 120, 118, 115, 112, 108, 105, 100, 96, 95, 96, 98, 103, 109, 116, 124, 132, 137, 142, 145, 148, 149, 149, 149, 149, 148, 147, 147, 147, 146, 146, 147, 146, 146, 145, 143, 141, 139, 135, 131, 127, 123, 120, 117, 114, 113, 114, 113, 113, 112, 111, 110, 108, 106, 103, 99, 99, 99, 100, 104, 108, 114, 121, 127, 133, 138, 142, 146, 148, 150, 151, 150, 150, 149, 149, 148, 147, 146, 145, 144, 143, 142, 141, 139, 137, 134, 131, 127, 124, 120, 116, 113, 111, 112, 111, 111, 111, 111, 111, 111, 110, 109, 108, 106, 106, 107, 108, 111, 114, 118, 123, 127, 132, 137, 140, 144, 147, 147, 148, 148, 148, 146, 145, 144, 142, 141, 141, 141, 141, 140, 138, 138, 135, 134, 138, 130, 119, 122, 121, 114, 112, 115, 114, 110, 111, 115, 114, 111, 113, 114, 111, 110, 111, 111, 110, 112, 115, 116, 118, 123, 126, 128, 131, 134, 137, 137, 139, 139, 139, 139, 139, 139, 138, 139, 139, 139, 139, 138, 138, 138, 138, 136, 134, 131, 129, 127, 124, 123, 122, 121, 121, 120, 120, 120, 117, 117, 118, 116, 113, 114, 114, 113, 114, 116, 119, 119, 119, 124, 125, 125, 127, 128, 129, 129, 130, 132, 132, 133, 135, 136, 136, 138, 139, 138, 138, 139, 138, 137, 136, 134, 133, 132, 131, 129, 127, 126, 126, 125, 125, 124, 123, 121, 120, 119, 119, 118, 116, 117, 116, 116, 118, 119, 121, 121, 122, 123, 124, 124, 126, 126, 127, 128, 129, 129, 131, 131, 132, 133, 133, 133, 133, 134, 134, 133, 134, 134, 133, 134, 134, 133, 134, 133, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 125, 124, 124, 121, 122, 122, 120, 121, 121, 120, 121, 122, 123, 124, 124, 125, 125, 125, 125, 127, 128, 128, 130, 131, 130, 131, 133, 132, 131, 133, 133, 131, 130, 131, 131, 130, 131, 132, 131, 131, 132, 131, 130, 130, 130, 130, 128, 126, 127, 127, 125, 126, 127, 126, 126, 126, 126, 127, 126, 126, 126, 125, 125, 125, 125, 126, 125, 126, 127, 127, 128, 128, 129, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 131, 130, 130, 129, 128, 129, 128, 126, 127, 127, 126, 126, 127, 126, 126, 126, 127, 127, 127, 127, 126, 125, 125, 124, 124, 124, 124, 123, 123, 123, 124, 124, 125, 126, 126, 127, 127, 127, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 129, 129, 128, 127, 127, 126, 126, 125, 124, 123, 123, 123, 122, 122, 122, 122, 123, 123, 123, 124, 124, 125, 126, 127, 128, 129, 131, 132, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 133, 132, 130, 128, 127, 125, 124, 122, 120, 119, 117, 115, 113, 112, 110, 109, 108, 108, 109, 111, 115, 120, 125, 132, 138, 143, 147, 152, 155, 157, 158, 158, 156, 153, 150, 147, 143, 140, 138, 135, 133, 129, 124, 119, 113, 107, 100, 92, 85, 78, 73, 70, 68, 70, 76, 87, 100, 116, 132, 148, 162, 173, 182, 187, 189, 188, 185, 181, 174, 166, 156, 148, 141, 136, 135, 135, 136, 135, 132, 126, 116, 105, 93, 82, 73, 66, 60, 57, 55, 56, 60, 70, 85, 103, 124, 145, 162, 176, 186, 191, 192, 190, 187, 182, 176, 168, 159, 149, 141, 134, 130, 130, 133, 137, 141, 143, 141, 137, 129, 118, 106, 93, 83, 74, 69, 66, 65, 65, 66, 69, 75, 86, 99, 115, 132, 149, 163, 175, 181, 184, 184, 181, 178, 173, 167, 160, 152, 144, 139, 136, 137, 141, 145, 148, 149, 147, 142, 135, 124, 113, 101, 91, 82, 76, 71, 68, 65, 65, 65, 67, 73, 83, 95, 111, 129, 146, 161, 173, 181, 185, 185, 183, 180, 176, 170, 162, 153, 145, 139, 138, 139, 142, 146, 149, 149, 148, 143, 134, 124, 113, 101, 91, 83, 78, 74, 72, 71, 71, 72, 74, 75, 81, 90, 102, 117, 134, 149, 163, 173, 178, 181, 180, 177, 174, 171, 164, 158, 153, 148, 146, 145, 145, 145, 146, 146, 145, 142, 137, 129, 120, 110, 99, 90, 84, 79, 77, 76, 76, 76, 78, 78, 79, 83, 91, 102, 115, 130, 145, 158, 169, 175, 179, 180, 178, 175, 170, 164, 158, 153, 150, 148, 146, 143, 142, 142, 142, 142, 140, 135, 129, 120, 111, 102, 94, 88, 85, 83, 81, 81, 80, 81, 82, 82, 85, 90, 98, 110, 124, 139, 151, 162, 170, 174, 176, 176, 174, 170, 165, 160, 156, 153, 150, 147, 144, 142, 143, 143, 144, 142, 138, 132, 124, 116, 109, 102, 97, 92, 89, 87, 85, 85, 85, 86, 86, 86, 88, 92, 99, 109, 121, 134, 146, 156, 163, 167, 169, 168, 166, 164, 161, 159, 158, 155, 152, 148, 145, 143, 142, 143, 143, 142, 139, 133, 126, 119, 113, 107, 102, 98, 96, 94, 93, 92, 91, 90, 89, 88, 88, 90, 96, 105, 116, 128, 139, 148, 156, 160, 162, 163, 162, 159, 157, 156, 154, 152, 148, 144, 142, 141, 142, 145, 146, 144, 141, 136, 129, 123, 118, 113, 109, 104, 101, 99, 98, 97, 96, 95, 93, 92, 90, 89, 91, 95, 103, 113, 124, 134, 143, 150, 154, 156, 156, 155, 155, 155, 154, 153, 151, 148, 145, 143, 144, 146, 148, 148, 145, 141, 136, 130, 125, 121, 117, 113, 109, 105, 102, 101, 99, 98, 96, 94, 93, 91, 89, 89, 92, 98, 107, 118, 128, 137, 144, 149, 152, 153, 153, 154, 155, 156, 155, 152, 149, 146, 146, 147, 149, 150, 150, 148, 144, 140, 135, 131, 127, 123, 119, 114, 111, 108, 106, 104, 102, 100, 98, 96, 94, 92, 91, 92, 96, 102, 111, 120, 129, 136, 142, 147, 149, 150, 151, 153, 155, 155, 153, 150, 148, 148, 149, 151, 152, 152, 150, 148, 144, 140, 136, 132, 129, 125, 121, 117, 113, 110, 108, 106, 104, 101, 99, 96, 94, 92, 91, 93, 97, 104, 113, 122, 130, 137, 142, 145, 148, 150, 152, 154, 155, 154, 151, 148, 147, 147, 149, 151, 153, 152, 150, 146, 142, 139, 136, 134, 130, 126, 121, 116, 113, 110, 108, 106, 103, 101, 98, 96, 93, 91, 90, 92, 97, 104, 113, 121, 128, 134, 139, 142, 144, 147, 150, 153, 154, 152, 150, 147, 146, 148, 150, 153, 153, 151, 148, 144, 141, 138, 135, 133, 129, 125, 121, 116, 113, 110, 108, 106, 104, 101, 99, 96, 93, 91, 90, 92, 98, 106, 114, 122, 129, 134, 137, 141, 144, 147, 151, 153, 153, 150, 148, 146, 146, 148, 152, 153, 153, 151, 147, 143, 140, 138, 135, 132, 128, 124, 120, 116, 112, 110, 107, 105, 104, 102, 99, 96, 93, 91, 91, 94, 100, 108, 116, 123, 128, 133, 137, 140, 144, 148, 152, 153, 152, 150, 147, 147, 148, 150, 153, 154, 153, 150, 147, 144, 142, 140, 137, 134, 131, 127, 123, 119, 116, 113, 110, 108, 105, 103, 100, 97, 94, 92, 93, 96, 101, 108, 116, 122, 128, 132, 136, 140, 145, 148, 151, 151, 149, 147, 145, 145, 147, 149, 152, 152, 151, 148, 145, 142, 140, 137, 134, 130, 127, 123, 119, 114, 109, 107, 104, 102, 100, 97, 94, 91, 89, 88, 90, 95, 102, 109, 116, 122, 126, 130, 134, 139, 143, 147, 149, 148, 146, 144, 144, 145, 148, 151, 152, 151, 149, 148, 146, 145, 143, 140, 136, 131, 126, 122, 118, 115, 112, 110, 107, 104, 101, 97, 95, 91, 90, 92, 96, 104, 113, 120, 126, 132, 135, 140, 145, 151, 155, 156, 154, 150, 147, 146, 148, 151, 153, 154, 153, 150, 148, 146, 145, 142, 139, 134, 129, 123, 119, 115, 112, 110, 107, 104, 100, 95, 92, 88, 85, 86, 91, 98, 106, 115, 122, 128, 134, 139, 146, 154, 159, 161, 159, 153, 148, 145, 147, 150, 154, 155, 153, 150, 147, 147, 146, 146, 143, 138, 131, 124, 118, 112, 108, 104, 100, 97, 92, 87, 83, 78, 75, 77, 84, 95, 108, 119, 127, 133, 140, 148, 158, 165, 168, 167, 161, 151, 146, 145, 148, 152, 152, 150, 147, 145, 145, 148, 151, 149, 143, 134, 125, 118, 112, 108, 103, 97, 88, 80, 74, 71, 68, 67, 71, 80, 94, 111, 125, 136, 145, 153, 162, 172, 179, 178, 171, 161, 148, 141, 139, 141, 146, 149, 149, 148, 148, 149, 151, 150, 145, 136, 125, 113, 102, 94, 88, 80, 69, 59, 53, 50, 48, 49, 58, 74, 95, 116, 132, 145, 159, 174, 190, 204, 209, 201, 185, 164, 145, 136, 134, 134, 138, 140, 142, 148, 157, 168, 176, 175, 165, 147, 126, 108, 94, 82, 68, 50, 30, 18, 18, 22, 31, 52, 76, 104, 135, 160, 183, 206, 225, 237, 238, 226, 208, 189, 168, 148, 133, 120, 111, 115, 126, 141, 160, 173, 180, 184, 181, 172, 154, 126, 94, 65, 38, 18, 0, 0, 0, 0, 0, 37, 87, 131, 163, 181, 202, 234, 255, 255, 255, 230, 193, 164, 146, 130, 114, 96, 86, 101, 133, 166, 188, 193, 189, 190, 195, 188, 157, 113, 64, 24, 0, 0, 0, 0, 0, 0, 29, 89, 133, 167, 195, 246, 255, 255, 255, 255, 231, 201, 180, 144, 102, 62, 40, 58, 100, 138, 158, 170, 195, 221, 232, 217, 174, 130, 92, 57, 16, 0, 0, 0, 0, 0, 10, 53, 96, 153, 211, 255, 255, 255, 255, 255, 255, 233, 182, 115, 72, 52, 49, 69, 87, 111, 155, 201, 230, 238, 227, 203, 182, 162, 112, 46, 0, 0, 0, 0, 0, 0, 12, 62, 122, 184, 244, 255, 255, 255, 255, 255, 248, 201, 139, 79, 55, 49, 45, 60, 89, 134, 187, 219, 227, 230, 220, 189, 156, 112, 57, 6, 0, 0, 0, 0, 0, 12, 50, 98, 170, 238, 255, 255, 255, 255, 255, 255, 200, 136, 90, 68, 50, 35, 45, 83, 144, 194, 205, 222, 255, 255, 215, 161, 127, 91, 34, 0, 0, 0, 0, 0, 0, 38, 74, 146, 217, 255, 255, 255, 255, 255, 255, 208, 161, 110, 63, 45, 24, 27, 77, 118, 157, 209, 235, 255, 255, 232, 188, 172, 127, 50, 0, 0, 0, 0, 0, 0, 19, 40, 77, 185, 254, 255, 255, 255, 255, 255, 229, 175, 146, 87, 39, 26, 30, 56, 87, 131, 197, 238, 238, 249, 255, 232, 166, 139, 102, 25, 0, 0, 0, 0, 0, 0, 48, 55, 152, 253, 255, 255, 255, 255, 255, 244, 181, 160, 95, 25, 29, 31, 23, 64, 117, 177, 221, 230, 255, 255, 220, 189, 160, 106, 49, 0, 0, 0, 0, 0, 0, 38, 27, 142, 240, 250, 255, 255, 255, 255, 234, 194, 172, 92, 43, 51, 26, 35, 91, 125, 180, 229, 235, 255, 255, 215, 188, 162, 98, 43, 0, 0, 0, 0, 0, 5, 19, 51, 167, 227, 242, 255, 255, 255, 255, 230, 211, 143, 64, 65, 61, 24, 39, 91, 131, 171, 213, 245, 254, 234, 211, 174, 133, 96, 17, 0, 0, 0, 0, 0, 0, 2, 150, 210, 198, 255, 255, 255, 255, 255, 226, 156, 102, 90, 64, 26, 46, 80, 99, 155, 206, 217, 235, 253, 215, 153, 148, 110, 8, 0, 0, 0, 0, 0, 0, 30, 139, 174, 221, 255, 255, 255, 255, 255, 225, 162, 124, 89, 52, 51, 55, 81, 129, 157, 194, 236, 236, 221, 207, 159, 125, 82, 5, 0, 0, 0, 0, 0, 0, 87, 169, 160, 247, 255, 255, 255, 255, 245, 193, 153, 112, 80, 44, 56, 87, 80, 136, 196, 184, 216, 246, 195, 158, 161, 100, 18, 6, 0, 0, 0, 0, 0, 83, 137, 153, 249, 255, 255, 255, 255, 240, 208, 160, 112, 86, 60, 65, 74, 98, 138, 161, 196, 219, 212, 199, 164, 127, 90, 31, 0, 0, 0, 0, 0, 28, 105, 123, 197, 255, 255, 255, 255, 243, 231, 199, 118, 108, 91, 48, 73, 96, 112, 157, 179, 200, 227, 203, 169, 161, 113, 45, 14, 0, 0, 0, 0, 0, 85, 104, 150, 255, 255, 255, 255, 255, 237, 216, 145, 131, 105, 68, 92, 83, 98, 156, 156, 177, 213, 179, 163, 149, 90, 55, 0, 0, 0, 0, 0, 45, 75, 111, 188, 220, 248, 255, 255, 251, 237, 190, 158, 133, 95, 103, 107, 103, 143, 148, 156, 199, 166, 133, 150, 114, 57, 16, 0, 0, 0, 0, 45, 87, 93, 176, 223, 207, 255, 255, 217, 227, 190, 146, 135, 108, 100, 98, 112, 136, 142, 170, 191, 171, 154, 149, 116, 68, 26, 0, 0, 0, 0, 45, 83, 88, 163, 208, 220, 247, 255, 244, 213, 189, 165, 127, 118, 115, 98, 113, 138, 141, 165, 182, 154, 152, 143, 90, 65, 22, 0, 16, 0, 0, 72, 75, 105, 184, 193, 223, 255, 234, 236, 210, 162, 162, 136, 108, 123, 127, 128, 149, 163, 156, 154, 141, 113, 69, 29, 40, 11, 0, 61, 49, 71, 140, 147, 175, 207, 225, 210, 194, 210, 157, 139, 149, 115, 128, 136, 146, 159, 165, 185, 157, 155, 148, 100, 64, 17, 24, 11, 0, 43, 44, 66, 124, 146, 183, 202, 232, 227, 204, 218, 171, 149, 148, 110, 126, 128, 126, 149, 158, 172, 157, 156, 151, 110, 77, 30, 32, 21, 0, 45, 51, 58, 120, 138, 172, 202, 220, 224, 207, 214, 174, 152, 153, 114, 131, 132, 123, 153, 155, 164, 162, 152, 138, 113, 77, 19, 37, 27, 0, 50, 58, 54, 126, 148, 172, 200, 223, 223, 202, 218, 176, 149, 155, 117, 127, 129, 122, 150, 152, 158, 159, 152, 135, 114, 81, 23, 44, 27, 0, 59, 53, 53, 130, 141, 161, 195, 222, 213, 199, 226, 173, 152, 170, 121, 130, 140, 127, 142, 154, 158, 141, 149, 137, 98, 77, 31, 44, 31, 3, 65, 55, 63, 131, 138, 162, 195, 215, 206, 199, 215, 168, 162, 162, 120, 140, 134, 125, 149, 147, 151, 145, 142, 128, 103, 71, 31, 54, 32, 10, 72, 55, 65, 132, 133, 158, 195, 208, 200, 204, 207, 166, 173, 163, 124, 149, 139, 127, 154, 153, 144, 146, 146, 118, 103, 72, 27, 57, 36, 11, 72, 60, 62, 126, 135, 149, 192, 204, 189, 206, 203, 161, 176, 161, 130, 151, 138, 133, 152, 148, 147, 146, 139, 122, 108, 68, 42, 64, 32, 30, 73, 52, 76, 120, 122, 153, 184, 192, 190, 200, 198, 171, 176, 163, 142, 153, 140, 139, 148, 144, 144, 138, 135, 121, 106, 77, 49, 70, 40, 33, 82, 47, 68, 124, 99, 140, 184, 166, 188, 206, 183, 183, 193, 161, 159, 171, 136, 147, 153, 126, 146, 135, 116, 129, 109, 85, 70, 72, 66, 45, 72, 70, 56, 100, 104, 108, 155, 159, 161, 192, 184, 176, 194, 177, 166, 176, 153, 147, 152, 133, 136, 136, 120, 126, 122, 109, 102, 88, 87, 84, 70, 82, 81, 69, 93, 98, 98, 129, 133, 140, 162, 161, 167, 174, 169, 169, 166, 159, 152, 152, 145, 140, 141, 134, 136, 134, 125, 129, 118, 108, 111, 100, 91, 91, 85, 79, 83, 88, 88, 103, 116, 121, 138, 145, 148, 161, 159, 157, 164, 157, 155, 156, 147, 149, 147, 142, 146, 139, 140, 140, 129, 130, 125, 111, 107, 102, 93, 89, 92, 89, 88, 99, 102, 109, 119, 124, 132, 135, 141, 144, 144, 151, 145, 149, 155, 145, 154, 154, 145, 155, 148, 139, 143, 133, 123, 124, 114, 106, 109, 102, 98, 103, 102, 104, 110, 111, 116, 121, 123, 126, 127, 130, 134, 133, 136, 143, 139, 142, 148, 146, 145, 146, 141, 136, 134, 133, 127, 122, 122, 116, 113, 113, 114, 115, 113, 118, 119, 117, 124, 124, 122, 127, 128, 129, 132, 135, 137, 138, 140, 142, 141, 140, 140, 137, 133, 133, 128, 124, 125, 120, 117, 120, 115, 115, 119, 115, 118, 121, 119, 123, 124, 124, 127, 128, 130, 131, 133, 135, 136, 138, 138, 138, 138, 135, 136, 133, 130, 130, 127, 125, 123, 123, 122, 120, 121, 120, 120, 121, 120, 122, 122, 122, 125, 125, 127, 129, 129, 132, 134, 134, 136, 137, 136, 135, 135, 133, 132, 131, 130, 128, 127, 126, 125, 124, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 127, 127, 128, 129, 130, 130, 131, 132, 132, 132, 132, 131, 131, 130, 130, 129, 128, 128, 127, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 127, 127, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 128, 128, 128, 127, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 128, 128, 127, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 128, 128, 128, 128, 129, 129, 129, 128, 127, 128, 129, 129, 128, 128, 128, 129, 129, 129, 128, 128, 129, 130, 130, 129, 129, 128, 128, 129, 130, 130, 129, 128, 129, 129, 129, 128, 129, 129, 129, 129, 129, 130, 129, 128, 128, 129, 129, 130, 130, 128, 129, 130, 129, 129, 129, 129, 129, 129, 129, 128, 129, 129, 129, 130, 130, 129, 128, 129, 129, 130, 129, 129, 129, 127, 130, 131, 130, 130, 127, 130, 129, 137, 155, 136, 103, 106, 136, 152, 148, 146, 126, 115, 135, 142, 135, 134, 142, 142, 122, 111, 117, 128, 133, 126, 121, 119, 122, 130, 132, 128, 128, 130, 126, 119, 125, 131, 130, 122, 117, 120, 123, 127, 128, 130, 134, 133, 129, 125, 126, 128, 129, 125, 119, 123, 128, 127, 124, 122, 125, 127, 129, 128, 122, 122, 126, 129, 126, 121, 121, 121, 121, 124, 125, 123, 125, 127, 125, 127, 128, 127, 125, 123, 125, 125, 125, 128, 128, 126, 127, 128, 128, 129, 128, 128, 131, 130, 129, 131, 130, 130, 129, 128, 128, 125, 125, 130, 130, 129, 130, 133, 135, 133, 126, 127, 130, 126, 125, 122, 122, 128, 134, 133, 128, 125, 128, 133, 134, 128, 123, 125, 126, 121, 121, 123, 123, 126, 123, 120, 125, 129, 126, 123, 126, 129, 131, 128, 128, 133, 134, 134, 134, 134, 139, 141, 138, 130, 131, 134, 119, 110, 99, 80, 72, 73, 71, 71, 87, 109, 128, 145, 156, 166, 179, 191, 186, 169, 164, 167, 171, 169, 163, 152, 144, 148, 131, 105, 102, 95, 79, 57, 14, 0, 21, 86, 120, 145, 166, 181, 204, 196, 161, 148, 155, 169, 164, 143, 134, 145, 166, 171, 161, 168, 180, 169, 142, 99, 66, 70, 63, 38, 0, 0, 35, 111, 132, 157, 155, 176, 202, 160, 125, 110, 120, 153, 129, 111, 135, 166, 208, 198, 166, 179, 189, 180, 153, 113, 80, 66, 69, 55, 10, 0, 0, 65, 127, 154, 159, 152, 189, 191, 142, 116, 109, 133, 160, 148, 137, 155, 187, 197, 183, 176, 183, 181, 163, 142, 118, 96, 82, 66, 57, 31, 0, 0, 54, 127, 164, 171, 156, 169, 170, 132, 104, 96, 125, 159, 157, 149, 142, 162, 199, 199, 187, 181, 177, 175, 154, 123, 97, 86, 90, 72, 28, 0, 0, 41, 136, 167, 165, 144, 151, 162, 128, 100, 93, 123, 174, 180, 163, 154, 172, 207, 200, 170, 149, 157, 173, 156, 130, 104, 85, 90, 77, 32, 0, 0, 28, 136, 182, 182, 150, 155, 172, 132, 98, 88, 119, 179, 189, 178, 163, 161, 182, 171, 155, 162, 171, 183, 170, 145, 127, 91, 73, 63, 31, 0, 0, 10, 141, 208, 209, 158, 126, 147, 127, 97, 86, 110, 190, 218, 190, 149, 137, 171, 191, 177, 157, 156, 176, 186, 157, 115, 79, 68, 70, 39, 0, 0, 10, 159, 232, 217, 148, 114, 126, 113, 93, 87, 132, 215, 230, 196, 150, 137, 167, 171, 154, 145, 156, 196, 203, 163, 129, 89, 81, 79, 47, 0, 0, 2, 162, 249, 240, 147, 81, 101, 104, 99, 97, 115, 209, 236, 202, 157, 116, 148, 168, 156, 159, 163, 195, 211, 169, 122, 75, 61, 69, 53, 0, 0, 0, 160, 255, 255, 156, 66, 81, 119, 122, 107, 109, 182, 236, 212, 147, 109, 124, 173, 186, 172, 187, 191, 192, 162, 114, 80, 60, 61, 53, 18, 0, 0, 125, 254, 255, 165, 73, 64, 105, 134, 120, 113, 177, 228, 215, 149, 93, 118, 171, 199, 193, 176, 190, 191, 161, 110, 73, 67, 84, 69, 32, 0, 0, 100, 234, 255, 191, 64, 40, 87, 119, 129, 121, 177, 246, 237, 157, 84, 80, 135, 192, 213, 198, 189, 189, 166, 126, 105, 78, 83, 82, 53, 0, 0, 33, 193, 255, 237, 94, 36, 67, 101, 129, 136, 164, 227, 242, 188, 100, 47, 97, 168, 218, 234, 197, 190, 172, 137, 109, 85, 85, 91, 54, 20, 0, 0, 125, 243, 255, 191, 48, 32, 82, 134, 156, 142, 175, 212, 211, 155, 79, 70, 134, 201, 232, 212, 181, 172, 146, 128, 111, 100, 90, 72, 44, 0, 0, 12, 172, 255, 255, 132, 36, 27, 75, 153, 169, 168, 195, 210, 194, 124, 74, 100, 155, 213, 219, 192, 187, 169, 142, 110, 90, 79, 96, 78, 46, 0, 0, 43, 188, 255, 243, 102, 8, 25, 97, 164, 184, 194, 203, 194, 164, 99, 72, 106, 173, 227, 220, 197, 182, 160, 134, 99, 82, 84, 93, 86, 45, 0, 0, 40, 185, 255, 255, 118, 18, 15, 85, 174, 190, 203, 197, 178, 155, 108, 73, 109, 162, 228, 244, 198, 174, 119, 113, 113, 107, 126, 111, 79, 49, 0, 0, 0, 148, 255, 255, 171, 50, 17, 56, 144, 175, 194, 186, 181, 183, 119, 77, 88, 154, 222, 235, 200, 168, 144, 127, 119, 100, 117, 122, 101, 52, 27, 0, 0, 94, 193, 255, 233, 89, 37, 49, 113, 167, 164, 160, 180, 196, 173, 97, 80, 145, 201, 236, 212, 162, 139, 133, 126, 109, 115, 124, 99, 68, 34, 10, 0, 0, 113, 229, 255, 206, 81, 30, 60, 120, 177, 184, 180, 179, 155, 131, 91, 123, 186, 216, 236, 202, 135, 93, 106, 138, 154, 154, 127, 81, 46, 9, 1, 0, 0, 140, 244, 255, 209, 54, 20, 58, 131, 182, 166, 170, 182, 185, 155, 107, 109, 159, 213, 211, 184, 146, 124, 138, 141, 133, 126, 130, 105, 73, 25, 14, 0, 0, 85, 192, 255, 249, 126, 28, 16, 76, 178, 203, 199, 194, 160, 152, 111, 114, 158, 186, 203, 177, 145, 150, 143, 130, 127, 143, 149, 128, 74, 29, 7, 11, 0, 1, 133, 238, 255, 222, 70, 0, 22, 127, 194, 202, 191, 184, 191, 175, 131, 104, 144, 175, 188, 175, 136, 127, 124, 137, 145, 152, 147, 129, 70, 38, 21, 31, 6, 0, 73, 214, 255, 255, 104, 2, 16, 113, 205, 201, 170, 160, 168, 181, 141, 114, 127, 158, 191, 165, 130, 123, 147, 172, 147, 130, 118, 121, 111, 67, 67, 79, 56, 0, 0, 59, 231, 255, 255, 88, 0, 2, 121, 215, 202, 182, 164, 147, 149, 120, 106, 145, 160, 192, 186, 143, 137, 130, 125, 127, 121, 137, 150, 148, 101, 53, 39, 27, 4, 0, 39, 196, 255, 255, 154, 0, 0, 64, 196, 241, 194, 171, 149, 168, 144, 89, 87, 138, 197, 211, 157, 92, 104, 134, 163, 158, 122, 129, 140, 130, 75, 53, 56, 50, 34, 0, 39, 180, 255, 255, 161, 32, 0, 79, 179, 201, 187, 170, 181, 176, 119, 75, 78, 137, 195, 197, 154, 119, 119, 147, 157, 143, 130, 139, 144, 114, 87, 67, 85, 87, 57, 9, 0, 94, 215, 255, 222, 97, 32, 46, 94, 167, 198, 207, 208, 173, 119, 68, 74, 123, 170, 203, 184, 157, 149, 137, 141, 138, 129, 135, 140, 138, 120, 92, 98, 100, 95, 69, 32, 0, 13, 135, 228, 255, 187, 62, 16, 47, 123, 189, 196, 205, 195, 170, 134, 82, 77, 119, 181, 202, 182, 145, 130, 136, 151, 151, 142, 142, 145, 137, 109, 85, 73, 75, 98, 93, 62, 24, 0, 57, 164, 230, 229, 137, 65, 68, 112, 171, 171, 159, 168, 163, 173, 136, 109, 117, 136, 183, 183, 166, 156, 148, 158, 147, 125, 122, 129, 150, 142, 110, 85, 77, 83, 83, 71, 47, 12, 15, 109, 207, 254, 204, 86, 28, 40, 106, 183, 199, 197, 175, 149, 137, 115, 114, 127, 150, 170, 166, 160, 161, 155, 147, 142, 138, 143, 151, 137, 114, 91, 83, 106, 123, 114, 88, 52, 17, 0, 60, 169, 244, 241, 138, 53, 25, 58, 139, 192, 207, 190, 161, 148, 125, 113, 107, 125, 161, 186, 193, 177, 143, 130, 122, 124, 142, 151, 151, 132, 108, 85, 94, 107, 123, 122, 84, 31, 0, 0, 89, 203, 255, 226, 112, 34, 30, 93, 173, 203, 204, 174, 129, 125, 117, 140, 154, 157, 163, 155, 156, 153, 149, 148, 133, 131, 138, 144, 147, 130, 116, 103, 103, 95, 97, 93, 80, 46, 23, 10, 66, 162, 211, 230, 157, 76, 47, 68, 135, 189, 202, 200, 176, 160, 131, 103, 108, 122, 167, 188, 181, 164, 140, 125, 122, 133, 142, 146, 141, 132, 122, 121, 112, 94, 93, 84, 94, 89, 62, 39, 6, 60, 150, 214, 228, 145, 74, 53, 76, 146, 184, 190, 191, 171, 162, 141, 107, 100, 112, 152, 184, 199, 174, 133, 126, 130, 141, 134, 125, 133, 154, 165, 147, 100, 86, 85, 95, 109, 81, 62, 46, 22, 33, 105, 171, 222, 198, 108, 63, 57, 109, 179, 202, 197, 166, 142, 138, 132, 131, 122, 129, 156, 181, 180, 156, 128, 124, 142, 156, 156, 150, 143, 139, 126, 113, 95, 87, 92, 107, 111, 93, 58, 20, 6, 20, 97, 183, 237, 218, 138, 61, 46, 93, 164, 204, 211, 189, 156, 145, 122, 111, 117, 133, 157, 173, 162, 157, 152, 151, 159, 146, 124, 119, 127, 146, 150, 134, 108, 86, 86, 88, 105, 86, 58, 33, 25, 39, 79, 154, 198, 219, 176, 109, 86, 91, 133, 163, 166, 169, 164, 169, 166, 139, 129, 106, 111, 132, 143, 171, 169, 173, 160, 131, 118, 108, 118, 139, 149, 151, 136, 108, 96, 90, 97, 103, 91, 81, 64, 47, 31, 54, 127, 190, 231, 199, 134, 96, 86, 118, 153, 159, 159, 148, 145, 161, 153, 139, 113, 101, 128, 159, 179, 166, 139, 130, 135, 144, 135, 129, 132, 147, 164, 145, 115, 94, 85, 91, 105, 101, 83, 62, 45, 31, 35, 89, 155, 213, 220, 170, 119, 82, 101, 149, 167, 165, 139, 127, 149, 156, 155, 144, 128, 130, 141, 145, 151, 146, 145, 154, 153, 154, 146, 134, 135, 137, 130, 121, 103, 94, 94, 95, 103, 96, 78, 58, 39, 33, 51, 107, 171, 210, 216, 171, 120, 99, 106, 132, 150, 149, 137, 138, 153, 168, 165, 144, 118, 108, 117, 137, 153, 157, 158, 156, 153, 155, 151, 145, 136, 124, 122, 114, 108, 105, 104, 104, 100, 90, 70, 55, 43, 33, 
};

void Make_Coffee();
void Alarm_Status();
void OneStep();

void setup() {
  pinMode(12, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(13,HIGH);
  digitalWrite(12,LOW);
  digitalWrite(10,HIGH);
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  Rtc.Begin();
  pinMode(STEPPER_PIN_1, OUTPUT);
  pinMode(STEPPER_PIN_2, OUTPUT);
  pinMode(STEPPER_PIN_3, OUTPUT);
  pinMode(STEPPER_PIN_4, OUTPUT);

  //Reading Alarm setings when powered on.
  Alarm_Status();
  Alarm_Set = EEPROM.read(0);
  hours=EEPROM.read(1);
  minutes=EEPROM.read(2);
}

void loop() {

  //Checking for incoming data from bluetooth module
  while (Serial.available() > 0) {   // if HM10 sends something then read
    inData = Serial.readString();
  }
  if(inData!=""){
      int len=inData.length();
      for(int i=0;i<len-1;i++){
          if(inData[i]==':'){
              index = i;
              Serial.println("index is :"+String(i));
            }
        }
      hours = (inData.substring(0,index)).toInt();
      minutes = (inData.substring(index+1)).toInt();
      EEPROM.write(0,1);
      EEPROM.write(1,hours);
      EEPROM.write(2,minutes);
      Alarm_Set = 1;
      Alarm_Status();
      inData=""; 
    }

    //Updating time on OLED display in real time
  RtcDateTime now = Rtc.GetDateTime();
  display.setTextSize(2);
  display.setTextColor(WHITE, BLACK);
  display.setCursor(33,1);
  sprintf(current_time, "%02d:%02d", now.Hour(), now.Minute());
  display.println(current_time);
  display.display();

  if(Alarm_Set){
      if(hours == now.Hour() && minutes == now.Minute()){
        Make_Coffee(); 
      }
    }
  delay(700);
}

//Function to display alarm status on OLED display
void Alarm_Status(){
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE, BLACK);
  if(EEPROM.read(0)==0){
       display.setCursor(25,22);
       display.println("Alarm Not Set"); 
    }
  else{
       display.setCursor(10,22); 
       sprintf(current_time, "Alarm Set: %02d:%02d", EEPROM.read(1), EEPROM.read(2));
       display.println(current_time); 
    }
  display.display();
}

//Functin to make coffee
void Make_Coffee(){
  //Start Heating Water
  digitalWrite(10,LOW);
  //Powder Dispenser
  start_time = millis();
  while(millis()-start_time<powder_dispense_time){
      OneStep();
      delay(2);
    }
  digitalWrite(6,LOW);  
  digitalWrite(7,LOW);
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  //StOP Heating Water
  delay(3000);
  digitalWrite(10,HIGH);
  delay(1000);
  //Hot Water Dispenser
  digitalWrite(13,LOW);
  delay(water_dispense_time);
  digitalWrite(13,HIGH);
  delay(1000);
  //Coffee Mixer 
  digitalWrite(12,HIGH);
  delay(mixer_time);
  digitalWrite(12,LOW);
  delay(2000);
  //Alarm Ringtone
  EEPROM.write(0,0);
  Alarm_Set=0;
  Alarm_Status();
  while(1){
       startPlayback(sample, sizeof(sample));  
       delay(3000);
    } 
}

//Stepper Motor Routine
void OneStep(){
  switch(step_number){
  case 0:
  digitalWrite(STEPPER_PIN_1, LOW);
  digitalWrite(STEPPER_PIN_2, LOW);
  digitalWrite(STEPPER_PIN_3, LOW);
  digitalWrite(STEPPER_PIN_4, HIGH);
  break;
  case 1:
  digitalWrite(STEPPER_PIN_1, LOW);
  digitalWrite(STEPPER_PIN_2, LOW);
  digitalWrite(STEPPER_PIN_3, HIGH);
  digitalWrite(STEPPER_PIN_4, LOW);
  break;
  case 2:
  digitalWrite(STEPPER_PIN_1, LOW);
  digitalWrite(STEPPER_PIN_2, HIGH);
  digitalWrite(STEPPER_PIN_3, LOW);
  digitalWrite(STEPPER_PIN_4, LOW);
  break;
  case 3:
  digitalWrite(STEPPER_PIN_1, HIGH);
  digitalWrite(STEPPER_PIN_2, LOW);
  digitalWrite(STEPPER_PIN_3, LOW);
  digitalWrite(STEPPER_PIN_4, LOW);

step_number++;
  if(step_number > 3){
    step_number = 0;
  }
}

Video

Have any question realated to this Article?

Ask Our Community Members