//! Simple "Hello World" example for a raspberry with a 2.66 inch e-paper display. //! //! Connections: //! //! | Raspberry | EPD | //! |----------------|-------| //! | GPIO 11 (SCLK) | SCK | //! | GPIO 10 (MOSI) | MOSI | //! | GPIO 8 (CE0) | CS | //! | GPIO 24 | BUSY | //! | GPIO 25 | DC | //! | GPIO 17 | RESET | //! //! If you have another display size, simply replace `Display2in66` with your display. //! You have to enable SPI (e.g. with raspi-config) and you have to execute the binary with sudo: //! `cargo build --example raspberry --features="std" && sudo ./target/debug/examples/raspberry` use embedded_graphics::{ image::{Image, ImageRaw}, mono_font::{iso_8859_1::FONT_10X20, MonoTextStyle}, prelude::*, text::Text, }; use epd_spectra::{Display2in66, Epd, TriColor}; use rppal::{ gpio::Gpio, hal::Delay, spi::{Bus, Mode, SimpleHalSpiDevice, SlaveSelect, Spi}, }; use std::error::Error; fn main() -> Result<(), Box> { // setup a display buffer let mut display = Display2in66::default(); Text::new( "Hello", Point::new(10, 20), MonoTextStyle::new(&FONT_10X20, TriColor::Black), ) .draw(&mut display)?; Text::new( "World", Point::new(30, 60), MonoTextStyle::new(&FONT_10X20, TriColor::Red), ) .draw(&mut display)?; let ferris: ImageRaw = ImageRaw::new(FERRIS_IMG, FERRIS_WIDTH); let ferris: Image<_> = Image::new(&ferris, Point::new(0, 100)); ferris.draw(&mut display).unwrap(); // setup all peripherals needed for EPD driver let spi = Spi::new(Bus::Spi0, SlaveSelect::Ss0, 4_000_000, Mode::Mode0)?; let mut spi_device = SimpleHalSpiDevice::new(spi); let gpio = Gpio::new()?; let busy = gpio.get(24)?.into_input(); let dc = gpio.get(25)?.into_output(); let rst = gpio.get(17)?.into_output(); let mut delay = Delay {}; let epd = Epd::new(&mut spi_device, busy, dc, rst, &mut delay, 4096); let mut epd = epd.init(&mut spi_device, &mut delay)?; // show the display epd.update(&display, &mut spi_device, &mut delay)?; let _inactive_epd = epd.power_off(&mut spi_device, &mut delay)?; Ok(()) } // This code is generated with convert_bmp.py const FERRIS_WIDTH: u32 = 150; const FERRIS_IMG: &[u8] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 10, 160, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 42, 160, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 0, 42, 168, 2, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 2, 170, 128, 170, 168, 10, 170, 128, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 128, 10, 170, 162, 170, 170, 42, 170, 128, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 160, 10, 170, 170, 170, 170, 170, 170, 160, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 42, 170, 170, 170, 170, 170, 170, 160, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 160, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 42, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 2, 160, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 42, 160, 0, 32, 0, 0, 0, 0, 160, 0, 0, 0, 0, 2, 170, 130, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 10, 170, 0, 0, 0, 0, 170, 160, 0, 40, 0, 0, 0, 0, 170, 0, 0, 0, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 2, 170, 128, 0, 40, 0, 0, 0, 0, 170, 128, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 10, 170, 128, 0, 40, 0, 0, 40, 0, 170, 160, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 42, 170, 128, 0, 168, 0, 0, 168, 0, 170, 168, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 170, 170, 128, 0, 170, 0, 2, 168, 0, 42, 170, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 170, 170, 128, 2, 170, 0, 2, 170, 0, 42, 170, 128, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 2, 170, 170, 128, 2, 170, 0, 10, 170, 0, 42, 170, 128, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 2, 170, 170, 128, 10, 170, 0, 10, 170, 128, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2, 170, 170, 128, 42, 168, 0, 10, 170, 128, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 2, 170, 170, 128, 170, 168, 0, 10, 170, 160, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 2, 170, 170, 138, 170, 168, 0, 10, 170, 168, 42, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2, 170, 170, 170, 170, 160, 0, 10, 170, 168, 10, 170, 160, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 2, 170, 170, 170, 170, 160, 0, 10, 170, 170, 10, 170, 160, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 170, 170, 170, 170, 128, 0, 2, 170, 170, 170, 170, 160, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 170, 170, 170, 170, 0, 0, 2, 170, 170, 170, 170, 160, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 42, 170, 170, 170, 0, 0, 0, 170, 170, 170, 170, 128, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 42, 170, 170, 168, 0, 0, 0, 42, 170, 170, 170, 128, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 10, 170, 170, 160, 0, 0, 0, 10, 170, 170, 170, 128, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 2, 170, 170, 128, 0, 0, 0, 0, 170, 170, 170, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 2, 170, 168, 0, 0, 0, 0, 0, 42, 170, 168, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 2, 170, 160, 0, 0, 0, 0, 0, 2, 170, 168, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 1, 86, 170, 170, 170, 160, 21, 170, 170, 170, 170, 170, 170, 170, 170, 168, 10, 170, 0, 0, 0, 0, 0, 0, 0, 42, 168, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 85, 170, 170, 170, 128, 5, 106, 170, 170, 170, 170, 170, 170, 170, 160, 42, 168, 0, 0, 0, 0, 0, 0, 0, 42, 170, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 85, 106, 170, 170, 0, 5, 90, 170, 170, 170, 170, 170, 170, 170, 160, 170, 160, 0, 0, 0, 0, 0, 0, 0, 10, 170, 128, 10, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 85, 106, 170, 170, 0, 5, 90, 170, 170, 170, 170, 170, 170, 170, 130, 170, 160, 0, 0, 0, 0, 0, 0, 0, 2, 170, 168, 2, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 85, 90, 170, 169, 0, 5, 90, 170, 170, 170, 170, 170, 170, 170, 138, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 138, 170, 170, 170, 170, 170, 170, 170, 170, 164, 0, 85, 90, 170, 169, 64, 5, 86, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 164, 1, 85, 90, 170, 169, 80, 21, 86, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 69, 85, 90, 170, 169, 85, 85, 86, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 85, 85, 90, 170, 169, 85, 85, 86, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 85, 85, 90, 170, 169, 85, 85, 86, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 85, 85, 106, 170, 170, 85, 85, 90, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 85, 85, 106, 170, 170, 149, 85, 106, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 85, 85, 170, 170, 170, 165, 85, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 90, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 168, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 10, 130, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 160, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 42, 130, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 168, 10, 160, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 149, 86, 170, 170, 170, 170, 170, 170, 170, 170, 0, 42, 2, 170, 160, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 168, 2, 160, 2, 170, 170, 170, 170, 170, 170, 170, 170, 169, 85, 86, 170, 170, 170, 170, 170, 170, 170, 160, 0, 40, 2, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 168, 0, 168, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 85, 90, 170, 170, 170, 170, 170, 170, 168, 0, 0, 168, 10, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 0, 168, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 165, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 160, 10, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 128, 42, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 128, 0, 0, 2, 128, 10, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 170, 128, 10, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 0, 0, 0, 0, 2, 128, 42, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 160, 2, 128, 0, 0, 0, 0, 0, 170, 170, 170, 170, 170, 170, 170, 170, 168, 0, 0, 0, 0, 0, 10, 0, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 160, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 168, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 42, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 168, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 168, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 170, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ];