From b1826a91679605f93cdeddaca2aed622945f0d67 Mon Sep 17 00:00:00 2001 From: Polprzewodnikowy Date: Mon, 23 Aug 2021 22:30:47 +0200 Subject: [PATCH] goot --- fw/SummerCart64.qsf | 9 +- fw/btldr/Makefile | 36 - fw/cntrllr/Makefile | 33 - fw/cntrllr/cntrllr.bin.bak | Bin 972 -> 0 bytes fw/cpu/bootloader/Makefile | 36 + fw/{btldr => cpu/bootloader}/bin2sv.py | 0 .../bootloader/cpu_bootloader.sv} | 0 .../bootloader/cpu_bootloader_template.sv} | 0 fw/{btldr/btldr.c => cpu/bootloader/main.c} | 2 +- .../btldr.ld => cpu/bootloader/prv32_rx.ld} | 0 fw/{btldr/btldr.h => cpu/bootloader/sys.h} | 0 fw/cpu/controller/Makefile | 36 + fw/cpu/controller/bin2rom.py | 25 + fw/{cntrllr => cpu/controller}/main.c | 0 .../controller/prv32_rwx.ld} | 0 fw/{cntrllr => cpu/controller}/rtc.c | 0 fw/{cntrllr => cpu/controller}/rtc.h | 0 fw/{cntrllr => cpu/controller}/startup.S | 0 fw/{cntrllr => cpu/controller}/sys.h | 0 fw/rtl/intel/flash/intel_flash.qsys | 26 +- .../intel/flash/intel_flash/intel_flash.bsf | 111 -- .../intel/flash/intel_flash/intel_flash.cmp | 13 - .../intel/flash/intel_flash/intel_flash.ppf | 17 - .../intel/flash/intel_flash/intel_flash_bb.v | 20 - .../flash/intel_flash/intel_flash_inst.v | 11 - .../flash/intel_flash/intel_flash_inst.vhd | 25 - fw/sfp.spf | 15 - fw/stp.stp | 1231 ----------------- 28 files changed, 115 insertions(+), 1531 deletions(-) delete mode 100644 fw/btldr/Makefile delete mode 100644 fw/cntrllr/Makefile delete mode 100644 fw/cntrllr/cntrllr.bin.bak create mode 100644 fw/cpu/bootloader/Makefile rename fw/{btldr => cpu/bootloader}/bin2sv.py (100%) rename fw/{btldr/btldr.sv => cpu/bootloader/cpu_bootloader.sv} (100%) rename fw/{btldr/btldr_template.sv => cpu/bootloader/cpu_bootloader_template.sv} (100%) rename fw/{btldr/btldr.c => cpu/bootloader/main.c} (93%) rename fw/{btldr/btldr.ld => cpu/bootloader/prv32_rx.ld} (100%) rename fw/{btldr/btldr.h => cpu/bootloader/sys.h} (100%) create mode 100644 fw/cpu/controller/Makefile create mode 100644 fw/cpu/controller/bin2rom.py rename fw/{cntrllr => cpu/controller}/main.c (100%) rename fw/{cntrllr/cntrllr.ld => cpu/controller/prv32_rwx.ld} (100%) rename fw/{cntrllr => cpu/controller}/rtc.c (100%) rename fw/{cntrllr => cpu/controller}/rtc.h (100%) rename fw/{cntrllr => cpu/controller}/startup.S (100%) rename fw/{cntrllr => cpu/controller}/sys.h (100%) delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash.bsf delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash.cmp delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash.ppf delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash_bb.v delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash_inst.v delete mode 100644 fw/rtl/intel/flash/intel_flash/intel_flash_inst.vhd delete mode 100644 fw/sfp.spf delete mode 100644 fw/stp.stp diff --git a/fw/SummerCart64.qsf b/fw/SummerCart64.qsf index 9c40c35..7916986 100644 --- a/fw/SummerCart64.qsf +++ b/fw/SummerCart64.qsf @@ -53,7 +53,7 @@ set_global_assignment -name QIP_FILE rtl/intel/fifo/intel_fifo_8.qip set_global_assignment -name QIP_FILE rtl/intel/pll/intel_pll.qip set_global_assignment -name SDC_FILE SummerCart64.sdc set_global_assignment -name SIGNALTAP_FILE stp.stp -set_global_assignment -name SYSTEMVERILOG_FILE btldr/btldr.sv +set_global_assignment -name SYSTEMVERILOG_FILE cpu/bootloader/cpu_bootloader.sv set_global_assignment -name SYSTEMVERILOG_FILE picorv32/picorv32.v set_global_assignment -name SYSTEMVERILOG_FILE rtl/cpu/cpu_bus.sv set_global_assignment -name SYSTEMVERILOG_FILE rtl/cpu/cpu_cfg.sv @@ -216,7 +216,7 @@ set_global_assignment -name USE_CONFIGURATION_DEVICE OFF # Signal Tap Assignments # ====================== set_global_assignment -name ENABLE_SIGNALTAP ON -set_global_assignment -name USE_SIGNALTAP_FILE stp.stp +set_global_assignment -name USE_SIGNALTAP_FILE output_files/signaltap.stp # Power Estimation Assignments # ============================ @@ -304,6 +304,5 @@ set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top # ------------------------ set_global_assignment -name QIP_FILE rtl/intel/gpio/intel_gpio_ddro.qip -set_global_assignment -name SOURCE_FILE sfp.spf -set_global_assignment -name SLD_FILE db/stp_auto_stripped.stp -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top +set_global_assignment -name SLD_FILE db/stp_auto_stripped.stp \ No newline at end of file diff --git a/fw/btldr/Makefile b/fw/btldr/Makefile deleted file mode 100644 index c907def..0000000 --- a/fw/btldr/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -CROSS=riscv64-unknown-elf- -FLAGS=\ - -mabi=ilp32 \ - -march=rv32i \ - -std=c11 \ - -Os \ - -Wall \ - -Wstrict-prototypes \ - -fverbose-asm \ - -ffunction-sections \ - -fdata-sections \ - -Tbtldr.ld \ - -Wl,--gc-sections \ - -ffreestanding \ - -nostartfiles \ - -nostdlib - -all: btldr.bin btldr.sv print_size - -btldr.elf: btldr.ld btldr.c - @$(CROSS)gcc $(FLAGS) btldr.c -o btldr.elf - -btldr.bin: btldr.elf - @$(CROSS)objcopy -O binary btldr.elf btldr.bin - -btldr.sv: btldr.bin - @python3 bin2sv.py btldr.bin btldr_template.sv btldr.sv - -print_size: - @echo 'Size of target .elf file:' - $(CROSS)size -B btldr.elf - -clean: - @rm -f btldr.sv btldr.bin btldr.elf - -.PHONY: clean diff --git a/fw/cntrllr/Makefile b/fw/cntrllr/Makefile deleted file mode 100644 index bd7f1f4..0000000 --- a/fw/cntrllr/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -CROSS=riscv64-unknown-elf- -FLAGS=\ - -mabi=ilp32 \ - -march=rv32i \ - -std=c11 \ - -Os \ - -Wall \ - -Wstrict-prototypes \ - -fverbose-asm \ - -ffunction-sections \ - -fdata-sections \ - -Wl,--gc-sections \ - -ffreestanding \ - -nostartfiles \ - -nostdlib - -all: cntrllr.bin print_size - -cntrllr.elf: cntrllr.ld main.c rtc.c startup.S - @$(CROSS)gcc $(FLAGS) -Tcntrllr.ld main.c rtc.c startup.S -o cntrllr.elf - -cntrllr.bin: cntrllr.elf - @$(CROSS)objcopy -O binary cntrllr.elf cntrllr.bin - -print_size: - @echo 'Size of target .elf file:' - @$(CROSS)size -B cntrllr.elf - @echo $(shell $(CROSS)size -B cntrllr.elf | awk 'NR==2 { printf "\nTotal memory used: %.2f%%\n",(100/(16*1024))*($$4) }') - -clean: - @rm -f cntrllr.bin cntrllr.elf - -.PHONY: clean diff --git a/fw/cntrllr/cntrllr.bin.bak b/fw/cntrllr/cntrllr.bin.bak deleted file mode 100644 index f4aa51dc7dd1fb8a05a98d0a0ac79f97675fe4cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmZ8gO=uHQ5S~qT_nEY{t*;XFU=|h(c#yQItzr)wnF?B7oXLU{nLpmqakiJ}|G63KjN)JiP&_lDA?IK0Xq2|0=Xj0=k9|u zLNJ~%ER0e?^fneW2gBu3NQ^`?jWH>V{ zL0>{mjGar2NZq|5!0+!p*cXYnO8)cz``T*0{><=r2Gc^lK|}-yk0r+@&h9$;6UmG; zo|s6dk`oC8k77)N+Ya5Wai*hvr|z7{!2$t^k|vNZ7D3jK8cs<{@_<=SDtagchGjLX zSEihS+?K7S>X>y^l(;6~Kk{*KOU!>lm9i zYq4IF@(NHF*8Zm-Hcveg0eWBtC~s8*UwoXokH@)z8}SP?Hp8J^qcInUGj7~0dGU;~ z_Bp;vCx4<3<7)kUzQvHw4sPR6q~oTz(wJy%sC#^a4LG{sR562(sgyt*Lo!iRGf!-j}``e#yk`uL&04nS zn15mrzo6c-faR<8ZZL`-kR^+8Ov?`ltG8m5i`7)AQ1Q361=^2wbRItuJk=fQ K3A3ldHu?`?WJVtV diff --git a/fw/cpu/bootloader/Makefile b/fw/cpu/bootloader/Makefile new file mode 100644 index 0000000..f59a2e7 --- /dev/null +++ b/fw/cpu/bootloader/Makefile @@ -0,0 +1,36 @@ +CROSS=riscv64-unknown-elf- +FLAGS=\ + -mabi=ilp32 \ + -march=rv32i \ + -std=c11 \ + -Os \ + -Wall \ + -Wstrict-prototypes \ + -fverbose-asm \ + -ffunction-sections \ + -fdata-sections \ + -Tprv32_rx.ld \ + -Wl,--gc-sections \ + -ffreestanding \ + -nostartfiles \ + -nostdlib + +all: bootloader.bin cpu_bootloader.sv print_size + +bootloader.elf: prv32_rx.ld main.c + @$(CROSS)gcc $(FLAGS) main.c -o bootloader.elf + +bootloader.bin: bootloader.elf + @$(CROSS)objcopy -O binary bootloader.elf bootloader.bin + +cpu_bootloader.sv: bootloader.bin + @python3 bin2sv.py bootloader.bin cpu_bootloader_template.sv cpu_bootloader.sv + +print_size: + @echo 'Size of target .elf file:' + $(CROSS)size -B bootloader.elf + +clean: + @rm -f cpu_bootloader.sv bootloader.bin bootloader.elf + +.PHONY: clean diff --git a/fw/btldr/bin2sv.py b/fw/cpu/bootloader/bin2sv.py similarity index 100% rename from fw/btldr/bin2sv.py rename to fw/cpu/bootloader/bin2sv.py diff --git a/fw/btldr/btldr.sv b/fw/cpu/bootloader/cpu_bootloader.sv similarity index 100% rename from fw/btldr/btldr.sv rename to fw/cpu/bootloader/cpu_bootloader.sv diff --git a/fw/btldr/btldr_template.sv b/fw/cpu/bootloader/cpu_bootloader_template.sv similarity index 100% rename from fw/btldr/btldr_template.sv rename to fw/cpu/bootloader/cpu_bootloader_template.sv diff --git a/fw/btldr/btldr.c b/fw/cpu/bootloader/main.c similarity index 93% rename from fw/btldr/btldr.c rename to fw/cpu/bootloader/main.c index 844b3ef..928dabb 100644 --- a/fw/btldr/btldr.c +++ b/fw/cpu/bootloader/main.c @@ -1,4 +1,4 @@ -#include "btldr.h" +#include "sys.h" int reset_handler (void) { #ifdef BOOT_UART diff --git a/fw/btldr/btldr.ld b/fw/cpu/bootloader/prv32_rx.ld similarity index 100% rename from fw/btldr/btldr.ld rename to fw/cpu/bootloader/prv32_rx.ld diff --git a/fw/btldr/btldr.h b/fw/cpu/bootloader/sys.h similarity index 100% rename from fw/btldr/btldr.h rename to fw/cpu/bootloader/sys.h diff --git a/fw/cpu/controller/Makefile b/fw/cpu/controller/Makefile new file mode 100644 index 0000000..d589e2a --- /dev/null +++ b/fw/cpu/controller/Makefile @@ -0,0 +1,36 @@ +CROSS=riscv64-unknown-elf- +FLAGS=\ + -mabi=ilp32 \ + -march=rv32i \ + -std=c11 \ + -Os \ + -Wall \ + -Wstrict-prototypes \ + -fverbose-asm \ + -ffunction-sections \ + -fdata-sections \ + -Tprv32_rwx.ld \ + -Wl,--gc-sections \ + -ffreestanding \ + -nostartfiles \ + -nostdlib + +all: controller.bin print_size + +controller.elf: prv32_rwx.ld main.c rtc.c startup.S + @$(CROSS)gcc $(FLAGS) main.c rtc.c startup.S -o controller.elf + +controller.bin: controller.elf + @$(CROSS)objcopy -O binary controller.elf tmp.bin + @python3 bin2rom.py tmp.bin controller.bin + @rm -f tmp.bin + +print_size: + @echo 'Size of target .elf file:' + @$(CROSS)size -B controller.elf + @echo $(shell $(CROSS)size -B controller.elf | awk 'NR==2 { printf "\nTotal memory used: %.2f%%\n",(100/(16*1024))*($$4) }') + +clean: + @rm -f controller.bin controller.elf + +.PHONY: clean diff --git a/fw/cpu/controller/bin2rom.py b/fw/cpu/controller/bin2rom.py new file mode 100644 index 0000000..2f496fe --- /dev/null +++ b/fw/cpu/controller/bin2rom.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import os +import sys + +binary = None +rom = None + +binary_name = sys.argv[1] or 'binary.bin' +rom_name = sys.argv[2] or 'rom.bin' + +try: + binary = open(binary_name, mode='rb') + rom = open(rom_name, mode='wb') + + length = os.path.getsize(binary_name) + rom.write(length.to_bytes(4, byteorder='little')) + rom.write(binary.read()) + +except Exception as e: + print(f'Unable to convert the rom: {e}', file=sys.stderr) + sys.exit(-1) + +finally: + if (binary): binary.close() + if (rom): rom.close() diff --git a/fw/cntrllr/main.c b/fw/cpu/controller/main.c similarity index 100% rename from fw/cntrllr/main.c rename to fw/cpu/controller/main.c diff --git a/fw/cntrllr/cntrllr.ld b/fw/cpu/controller/prv32_rwx.ld similarity index 100% rename from fw/cntrllr/cntrllr.ld rename to fw/cpu/controller/prv32_rwx.ld diff --git a/fw/cntrllr/rtc.c b/fw/cpu/controller/rtc.c similarity index 100% rename from fw/cntrllr/rtc.c rename to fw/cpu/controller/rtc.c diff --git a/fw/cntrllr/rtc.h b/fw/cpu/controller/rtc.h similarity index 100% rename from fw/cntrllr/rtc.h rename to fw/cpu/controller/rtc.h diff --git a/fw/cntrllr/startup.S b/fw/cpu/controller/startup.S similarity index 100% rename from fw/cntrllr/startup.S rename to fw/cpu/controller/startup.S diff --git a/fw/cntrllr/sys.h b/fw/cpu/controller/sys.h similarity index 100% rename from fw/cntrllr/sys.h rename to fw/cpu/controller/sys.h diff --git a/fw/rtl/intel/flash/intel_flash.qsys b/fw/rtl/intel/flash/intel_flash.qsys index 97c1025..2d52889 100644 --- a/fw/rtl/intel/flash/intel_flash.qsys +++ b/fw/rtl/intel/flash/intel_flash.qsys @@ -7,17 +7,17 @@ description="" tags="INTERNAL_COMPONENT=true" categories="System" /> - @@ -71,8 +71,8 @@ Read only,Read only,Hidden,Read only,Read only $${FILENAME}_onchip_flash_0 - C:/Dev/SummerCollection/sw/bootloader/build/SummerLoader64.hex - C:/Dev/SummerCollection/sw/bootloader/build/SummerLoader64.hex + ../sw/bootloader/build/SummerLoader64.hex + ../sw/bootloader/build/SummerLoader64.hex diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash.bsf b/fw/rtl/intel/flash/intel_flash/intel_flash.bsf deleted file mode 100644 index 19b6b19..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash.bsf +++ /dev/null @@ -1,111 +0,0 @@ -/* -WARNING: Do NOT edit the input and output ports in this file in a text -editor if you plan to continue editing the block that represents it in -the Block Editor! File corruption is VERY likely to occur. -*/ -/* -Copyright (C) 2020 Intel Corporation. All rights reserved. -Your use of Intel Corporation's design tools, logic functions -and other software and tools, and any partner logic -functions, and any output files from any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are expressly subject -to the terms and conditions of the Intel Program License -Subscription Agreement, the Intel Quartus Prime License Agreement, -the Intel FPGA IP License Agreement, or other applicable license -agreement, including, without limitation, that your use is for -the sole purpose of programming logic devices manufactured by -Intel and sold by Intel or its authorized distributors. Please -refer to the applicable agreement for further details, at -https://fpgasoftware.intel.com/eula. -*/ -(header "symbol" (version "1.1")) -(symbol - (rect 0 0 368 264) - (text "intel_flash" (rect 154 -1 192 11)(font "Arial" (font_size 10))) - (text "inst" (rect 8 248 20 260)(font "Arial" )) - (port - (pt 0 72) - (input) - (text "clock" (rect 0 0 20 12)(font "Arial" (font_size 8))) - (text "clock" (rect 4 61 34 72)(font "Arial" (font_size 8))) - (line (pt 0 72)(pt 144 72)(line_width 1)) - ) - (port - (pt 0 112) - (input) - (text "avmm_data_addr[15..0]" (rect 0 0 96 12)(font "Arial" (font_size 8))) - (text "avmm_data_addr[15..0]" (rect 4 101 130 112)(font "Arial" (font_size 8))) - (line (pt 0 112)(pt 144 112)(line_width 3)) - ) - (port - (pt 0 128) - (input) - (text "avmm_data_read" (rect 0 0 73 12)(font "Arial" (font_size 8))) - (text "avmm_data_read" (rect 4 117 88 128)(font "Arial" (font_size 8))) - (line (pt 0 128)(pt 144 128)(line_width 1)) - ) - (port - (pt 0 192) - (input) - (text "avmm_data_burstcount[1..0]" (rect 0 0 115 12)(font "Arial" (font_size 8))) - (text "avmm_data_burstcount[1..0]" (rect 4 181 160 192)(font "Arial" (font_size 8))) - (line (pt 0 192)(pt 144 192)(line_width 3)) - ) - (port - (pt 0 232) - (input) - (text "reset_n" (rect 0 0 30 12)(font "Arial" (font_size 8))) - (text "reset_n" (rect 4 221 46 232)(font "Arial" (font_size 8))) - (line (pt 0 232)(pt 144 232)(line_width 1)) - ) - (port - (pt 0 144) - (output) - (text "avmm_data_readdata[31..0]" (rect 0 0 113 12)(font "Arial" (font_size 8))) - (text "avmm_data_readdata[31..0]" (rect 4 133 154 144)(font "Arial" (font_size 8))) - (line (pt 0 144)(pt 144 144)(line_width 3)) - ) - (port - (pt 0 160) - (output) - (text "avmm_data_waitrequest" (rect 0 0 99 12)(font "Arial" (font_size 8))) - (text "avmm_data_waitrequest" (rect 4 149 130 160)(font "Arial" (font_size 8))) - (line (pt 0 160)(pt 144 160)(line_width 1)) - ) - (port - (pt 0 176) - (output) - (text "avmm_data_readdatavalid" (rect 0 0 107 12)(font "Arial" (font_size 8))) - (text "avmm_data_readdatavalid" (rect 4 165 142 176)(font "Arial" (font_size 8))) - (line (pt 0 176)(pt 144 176)(line_width 1)) - ) - (drawing - (text "clk" (rect 129 43 276 99)(font "Arial" (color 128 0 0)(font_size 9))) - (text "clk" (rect 149 67 316 144)(font "Arial" (color 0 0 0))) - (text "data" (rect 120 83 264 179)(font "Arial" (color 128 0 0)(font_size 9))) - (text "address" (rect 149 107 340 224)(font "Arial" (color 0 0 0))) - (text "read" (rect 149 123 322 256)(font "Arial" (color 0 0 0))) - (text "readdata" (rect 149 139 346 288)(font "Arial" (color 0 0 0))) - (text "waitrequest" (rect 149 155 364 320)(font "Arial" (color 0 0 0))) - (text "readdatavalid" (rect 149 171 376 352)(font "Arial" (color 0 0 0))) - (text "burstcount" (rect 149 187 358 384)(font "Arial" (color 0 0 0))) - (text "nreset" (rect 108 203 252 419)(font "Arial" (color 128 0 0)(font_size 9))) - (text "reset_n" (rect 149 227 340 464)(font "Arial" (color 0 0 0))) - (text " system " (rect 333 248 714 506)(font "Arial" )) - (line (pt 144 32)(pt 224 32)(line_width 1)) - (line (pt 224 32)(pt 224 248)(line_width 1)) - (line (pt 144 248)(pt 224 248)(line_width 1)) - (line (pt 144 32)(pt 144 248)(line_width 1)) - (line (pt 145 52)(pt 145 76)(line_width 1)) - (line (pt 146 52)(pt 146 76)(line_width 1)) - (line (pt 145 92)(pt 145 196)(line_width 1)) - (line (pt 146 92)(pt 146 196)(line_width 1)) - (line (pt 145 212)(pt 145 236)(line_width 1)) - (line (pt 146 212)(pt 146 236)(line_width 1)) - (line (pt 0 0)(pt 368 0)(line_width 1)) - (line (pt 368 0)(pt 368 264)(line_width 1)) - (line (pt 0 264)(pt 368 264)(line_width 1)) - (line (pt 0 0)(pt 0 264)(line_width 1)) - ) -) diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash.cmp b/fw/rtl/intel/flash/intel_flash/intel_flash.cmp deleted file mode 100644 index cc629d9..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash.cmp +++ /dev/null @@ -1,13 +0,0 @@ - component intel_flash is - port ( - clock : in std_logic := 'X'; -- clk - avmm_data_addr : in std_logic_vector(15 downto 0) := (others => 'X'); -- address - avmm_data_read : in std_logic := 'X'; -- read - avmm_data_readdata : out std_logic_vector(31 downto 0); -- readdata - avmm_data_waitrequest : out std_logic; -- waitrequest - avmm_data_readdatavalid : out std_logic; -- readdatavalid - avmm_data_burstcount : in std_logic_vector(1 downto 0) := (others => 'X'); -- burstcount - reset_n : in std_logic := 'X' -- reset_n - ); - end component intel_flash; - diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash.ppf b/fw/rtl/intel/flash/intel_flash/intel_flash.ppf deleted file mode 100644 index da55bf6..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash.ppf +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash_bb.v b/fw/rtl/intel/flash/intel_flash/intel_flash_bb.v deleted file mode 100644 index 850851e..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash_bb.v +++ /dev/null @@ -1,20 +0,0 @@ - -module intel_flash ( - clock, - avmm_data_addr, - avmm_data_read, - avmm_data_readdata, - avmm_data_waitrequest, - avmm_data_readdatavalid, - avmm_data_burstcount, - reset_n); - - input clock; - input [15:0] avmm_data_addr; - input avmm_data_read; - output [31:0] avmm_data_readdata; - output avmm_data_waitrequest; - output avmm_data_readdatavalid; - input [1:0] avmm_data_burstcount; - input reset_n; -endmodule diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash_inst.v b/fw/rtl/intel/flash/intel_flash/intel_flash_inst.v deleted file mode 100644 index e92b73f..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash_inst.v +++ /dev/null @@ -1,11 +0,0 @@ - intel_flash u0 ( - .clock (), // clk.clk - .avmm_data_addr (), // data.address - .avmm_data_read (), // .read - .avmm_data_readdata (), // .readdata - .avmm_data_waitrequest (), // .waitrequest - .avmm_data_readdatavalid (), // .readdatavalid - .avmm_data_burstcount (), // .burstcount - .reset_n () // nreset.reset_n - ); - diff --git a/fw/rtl/intel/flash/intel_flash/intel_flash_inst.vhd b/fw/rtl/intel/flash/intel_flash/intel_flash_inst.vhd deleted file mode 100644 index b78e294..0000000 --- a/fw/rtl/intel/flash/intel_flash/intel_flash_inst.vhd +++ /dev/null @@ -1,25 +0,0 @@ - component intel_flash is - port ( - clock : in std_logic := 'X'; -- clk - avmm_data_addr : in std_logic_vector(15 downto 0) := (others => 'X'); -- address - avmm_data_read : in std_logic := 'X'; -- read - avmm_data_readdata : out std_logic_vector(31 downto 0); -- readdata - avmm_data_waitrequest : out std_logic; -- waitrequest - avmm_data_readdatavalid : out std_logic; -- readdatavalid - avmm_data_burstcount : in std_logic_vector(1 downto 0) := (others => 'X'); -- burstcount - reset_n : in std_logic := 'X' -- reset_n - ); - end component intel_flash; - - u0 : component intel_flash - port map ( - clock => CONNECTED_TO_clock, -- clk.clk - avmm_data_addr => CONNECTED_TO_avmm_data_addr, -- data.address - avmm_data_read => CONNECTED_TO_avmm_data_read, -- .read - avmm_data_readdata => CONNECTED_TO_avmm_data_readdata, -- .readdata - avmm_data_waitrequest => CONNECTED_TO_avmm_data_waitrequest, -- .waitrequest - avmm_data_readdatavalid => CONNECTED_TO_avmm_data_readdatavalid, -- .readdatavalid - avmm_data_burstcount => CONNECTED_TO_avmm_data_burstcount, -- .burstcount - reset_n => CONNECTED_TO_reset_n -- nreset.reset_n - ); - diff --git a/fw/sfp.spf b/fw/sfp.spf deleted file mode 100644 index 3d30506..0000000 --- a/fw/sfp.spf +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/fw/stp.stp b/fw/stp.stp deleted file mode 100644 index 4c56e9c..0000000 --- a/fw/stp.stp +++ /dev/null @@ -1,1231 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 'cpu_soc:cpu_soc_inst|cpu_dma:cpu_dma_inst|dma.request' == rising edge - - - - - - - - - - - - - - 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 - 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 - - - - - - - - - - - - - - - - - - - 0000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000001000000000000000000000000000000000000000000000011000000000000010000000000000000000010000000000100000000000000000000000000000000000000011101100000000000000001000000000000000000001000000000010000000000000000000000000000000000000101110110011000001110110000100000000000000000100000000000010000000000000000000000000000000000010010010000100000111011000010000000000000000010000000000001000000000000000000000000000000000001001001000010000011101100001000000000000000001000000000000100000000000000000000000000000000000100100100001000001110110000100000000000000000100000000000010000000000000000000000000000000000010010010000100000111011000010000000000000000010000000000001000000000000000000000000000000000001001001000010000011101100001000000000000000001000000000000110000000000000000000000000000000000100100100001000001110110000100000000000000000100000000000010000000000001000000000000000000000000010010000100000111011000010111111111111111100011111111100000000000000100000000000000000000000001001000101011001001000111011111111111111110001111111110000000000000010000000000000000000000000000001000101100100100011101111111111111111000111111111000000000000001000000000000000000000010000000101000100000000100110111111111111111100011111111001000000000000100000000000000000000001000000000000010000000010011011111111111111110001111111100110000000000010000000000000000000000100000000000001000000001001101111111111111111000111111110010000000000000000000000010000000000000000000000000100000000100110111111111101111100011111111100000000000000000000000001000000000000000000000100000100000000001011111111110111110001111111110000000000000000000000000100000000000000000000000000010000000000101111111111011111000111111111000000000000000000000000010000000000010000000001000000000000000010111111111101111100011111111001000000000000000000000001000000000001000000000000000000000000001011111111110111110001111111100110000000000000000000000100000000000100000000000000000000000000101111111111011111000111111110010000000000001000000000010000000000000000000000000000000000000010111111111111111100001111111100000000000000100000000001000000000000000000000100000000000000001011111111111111110000111111110000000000000010000000000100000000000001111000000000000000000000101111111111111111000011111111000000000000001000000000010000000000010111100001100000011100000010111111111111111100001111111001000000000000100000000001000000000001000000001010000001110000001011111111111111110000111111100110000000000010000000000100000000000100000000101000000111000000101111111111111111000011111110010000000000000000000000000010000000000000000010100000011100000010111111111101111100001111111100000000000000000000000000001000000000000000001101100000000001111011111111110111110000111111110000000000000000000000000000100000000000000000000110000000000111101111111111011111000011111111000000000000000000000000000010000000010000000001000000100000000010111111111101111100001111111001000000000000000000000000001000000001000100000000000010000000001011111111110111110000111111100110000000000000000000000000100000000100010000000000001000000000101111111111011111000011111110010000000000001000000000000010000000000001000000000000100000000010111111111111111100010111111100000000000000100000000000001000000000000100000100000000100000001011111111111111110001011111110000000000000010000000000000100000000000000000000000000010000000101111111111111111000101111111000000000000001000000000000010000000010000000001010000000000000010111111111111111100010111111001000000000000100000000000001000000001000000000001000000000000001011111111111111110001011111100110000000000010000000000000100000000100000000000100000000000000101111111111111111000101111110010000000000000000000000010010000000000000000000010000000000000010111111111101111100010111111100000000000000000000000001001000000000000000000100000000000000001011111111110111110001011111110000000000000000000000000100100000000000000000000000000000000000101111111111011111000101111111000000000000000000000000010010000000010000000001000000000000000010111111111101111100010111111001000000000000000000000001001000000001000101000000000000000000001011111111110111110001011111100110000000000000000000000100100000000100010100000000000000000000101111111111011111000101111110010000000000001000000000010010000000000001010000000000000000000010111111111111111100000111111100000000000000100000000001001000000000000101000100000000101000001011111111111111110000011111110000000000000010000000000100100000000001001001000000000010100000101111111111111111000001111111000000000000001000000000010010000000010100100101110100000100100010111111111111111100000111111001000000000000100000000001001000000001010010110011010000010010001011111111111111110000011111100110000000000010000000000100100000000101001011001101000001001000101111111111111111000001111110010000000000000000000000000001000000000100101100110100000100100010111111111101111100000111111100000000000000000000000000000100000000010010110110100100010110101011111111110111110000011111110000000000000000000000000000010000000001101110001010010001011010101111111111011111000001111111000000000000000000000000000001000000010110111001101011010111001010111111111101111100000111111001000000000000000000000000000100000001001000101010101101011100101011111111110111110000011111100110000000000000000000000000010000000100100010101010110101110010101111111111011111000001111110010000000000001000000000000001000000000010001010101011010111001010111111111111111100011011111100000000000000100000000000000100000000001000101100111001000101111011111111111111110001101111110000000000000010000000000000010000000000111010100011100100010111101111111111111111000110111111000000000000001000000000000001000000010011101011000010111101010110111111111111111100011011111001000000000000100000000000000100000001011101101000001011110101011011111111111111110001101111100110000000000010000000000000010000000101110110100000101111010101101111111111111111000110111110010000000000000000000000010001000000000111011010000010111101010110111111111101111100011011111100000000000000000000000001000100000000011101101111101011101101011011111111110111110001101111110000000000000000000000000100010000000001000111101110101110110101101111111111011111000110111111000000000000000000000000010001000000010100011111110110100011111110111111111101111100011011111001000000000000000000000001000100000001001110010011011010001111111011111111110111110001101111100110000000000000000000000100010000000100111001001101101000111111101111111111011111000110111110010000000000001000000000010001000000000011100100110110100011111110111111111111111100001011111100000000000000100000000001000100000000001110010100011111110010101011111111111111110000101111110000000000000010000000000100010000000001111100100001111111001010101111111111111111000010111111000000000000001000000000010001000000010111110011111001011110010110111111111111111100001011111001000000000000100000000001000100000001000000000011100101111001011011111111111111110000101111100110000000000010000000000100010000000100000000001110010111100101101111111111111111000010111110010000000000000000000000000011000000000000000000111001011110010110111111111101111100001011111100000000000000000000000000001100000000000000000101110010000000111011111111110111110000101111110000000000000000000000000000110000000000000000000111001000000011101111111111011111000010111111000000000000000000000000000011000000010000000001000000000000000010111111111101111100001011111001000000000000000000000000001100000001000000000000000000000000001011111111110111110000101111100110000000000000000000000000110000000100000000000000000000000000101111111111011111000010111110010000000000001000000000000011000000000000000000000000000000000010111111111111111100010011111100000000000000100000000000001100000000000000000100000000000000001011111111111111110001001111110000000000000010000000000000110000000000000000000000000000000000101111111111111111000100111111000000000000001000000000000011000000010000000001000000000000000010111111111111111100010011111001000000000000100000000000001100000001000000000000000000000000001011111111111111110001001111100110000000000010000000000000110000000100000000000000000000000000101111111111111111000100111110010000000000000000000000010011000000000000000000000000000000000010111111111101111100010011111100000000000000000000000001001100000000000000000100000000000000001011111111110111110001001111110000000000000000000000000100110000000000000000000000000000000000101111111111011111000100111111000000000000000000000000010011000000010000000001000000000000000010111111111101111100010011111001000000000000000000000001001100000001000000000000000000000000001011111111110111110001001111100110000000000000000000000100110000000100000000000000000000000000101111111111011111000100111110010000000000001000000000010011000000000000000000000000000000000010111111111111111100000011111100000000000000100000000001001100000000000000000100000000000000001011111111111111110000001111110000000000000010000000000100110000000000000000000000000000000000101111111111111111000000111111000000000000001000000000010011000000010000000001000000000000000010111111111111111100000011111001000000000000100000000001001100000001000101010000000000000000001011111111111111110000001111100110000000000010000000000100110000000100010101000000000000000000101111111111111111000000111110010000000000000000000000000000100000000001010100000000000000000010111111111101111100000011111100000000000000000000000000000010000000000101010100000000101010001011111111110111110000001111110000000000000000000000000000001000000000001001000000000010101000101111111111011111000000111111000000000000000000000000000000100000010000100101010101000100100010111111111101111100000011111001000000000000000000000000000010000001010100010001010100010010001011111111110111110000001111100110000000000000000000000000001000000101010001000101010001001000101111111111011111000000111110010000000000001000000000000000100000000101000100010101000100100010111111111111111100011101111100000000000000100000000000000010000000010100010110100100100010001011111111111111110001110111110000000000000010000000000000001000000000000010001010010010001000101111111111111111000111011111000000000000001000000000000000100000010000001001010001000001001010111111111111111100011101111001000000000000100000000000000010000001000110010001000100000100101011111111111111110001110111100110000000000010000000000000001000000100011001000100010000010010101111111111111111000111011110010000000000000000000000010000100000000001100100010001000001001010111111111101111100011101111100000000000000000000000001000010000000000110010100001000110010001011111111110111110001110111110000000000000000000000000100001000000001010001000000100011001000101111111111011111000111011111000000000000000000000000010000100000010101000101111001001000100010111111111101111100011101111001000000000000000000000001000010000001011100010011100100100010001011111111110111110001110111100110000000000000000000000100001000000101110001001110010010001000101111111111011111000111011110010000000000001000000000010000100000000111000100111001001000100010111111111111111100001101111100000000000000100000000001000010000000011100010111000101100010101011111111111111110000110111110000000000000010000000000100001000000001010001001100010110001010101111111111111111000011011111000000000000001000000000010000100000010101000101110001001000101110111111111111111100001101111001000000000000100000000001000010000001001110010011000100100010111011111111111111110000110111100110000000000010000000000100001000000100111001001100010010001011101111111111111111000011011110010000000000000000000000000010100000000011100100110001001000101110111111111101111100001101111100000000000000000000000000001010000000001110010101000101110010101011111111110111110000110111110000000000000000000000000000101000000000010001000100010111001010101111111111011111000011011111000000000000000000000000000010100000010001000101011001001000100110111111111101111100001101111001000000000000000000000000001010000001000000100001100100100010011011111111110111110000110111100110000000000000000000000000101000000100000010000110010010001001101111111111011111000011011110010000000000001000000000000010100000000000001000011001001000100110111111111111111100010101111100000000000000100000000000001010000000000000100101000100000100001011111111111111110001010111110000000000000010000000000000101000000001111001000100010000010000101111111111111111000101011111000000000000001000000000000010100000010111100101100010011100100010111111111111111100010101111001000000000000100000000000001010000001001100010010001001110010001011111111111111110001010111100110000000000010000000000000101000000100110001001000100111001000101111111111111111000101011110010000000000000000000000010010100000000011000100100010011100100010111111111101111100010101111100000000000000000000000001001010000000001100010101100101100010111011111111110111110001010111110000000000000000000000000100101000000000000010000110010110001011101111111111011111000101011111000000000000000000000000010010100000010000001001010001000001000110111111111101111100010101111001000000000000000000000001001010000001001011010001000100000100011011111111110111110001010111100110000000000000000000000100101000000100101101000100010000010001101111111111011111000101011110010000000000001000000000010010100000000010110100010001000001000110111111111111111100000101111100000000000000100000000001001010000000001011010100001001011010001011111111111111110000010111110000000000000010000000000100101000000001010001000000100101101000101111111111111111000001011111000000000000001000000000010010100000010101000101101101001000100110111111111111111100000101111001000000000000100000000001001010000001000110010010110100100010011011111111111111110000010111100110000000000010000000000100101000000100011001001011010010001001101111111111111111000001011110010000000000000000000000000001100000000001100100101101001000100110111111111101111100000101111100000000000000000000000000000110000000000110010101000100110010101011111111110111110000010111110000000000000000000000000000011000000000010001000100010011001010101111111111011111000001011111000000000000000000000000000001100000010001000101011001001000100010111111111101111100000101111001000000000000000000000000000110000001010000010001100100100010001011111111110111110000010111100110000000000000000000000000011000000101000001000110010010001000101111111111011111000001011110010000000000001000000000000001100000000100000100011001001000100010111111111111111100011001111100000000000000100000000000000110000000010000010111000100000010001011111111111111110001100111110000000000000010000000000000011000000000000010001100010000001000101111111111111111000110011111000000000000001000000000000001100000010000001001000001000001001010111111111111111100011001111001000000000000100000000000000110000001000000000000000100000100101011111111111111110001100111100110000000000010000000000000011000000100000000000000010000010010101111111111111111000110011110010000000000000000000000010001100000000000000000000001000001001010111111111101111100011001111100000000000000000000000001000110000000000000000100001000000000001011111111110111110001100111110000000000000000000000000100011000000000000000000000100000000000101111111111011111000110011111000000000000000000000000010001100000010000000001000000000000000010111111111101111100011001111001000000000000000000000001000110000001000000000000000000000000001011111111110111110001100111100110000000000000000000000100011000000100000000000000000000000000101111111111011111000110011110010000000000001000000000010001100000000000000000000000000000000010111111111111111100001001111100000000000000100000000001000110000000000000000100000000000000001011111111111111110000100111110000000000000010000000000100011000000000000000000000000000000000101111111111111111000010011111000000000000001000000000010001100000010000000001000000000000000010111111111111111100001001111001000000000000100000000001000110000001000000000000000000000000001011111111111111110000100111100110000000000010000000000100011000000100000000000000000000000000101111111111111111000010011110010000000000000000000000000011100000000000000000000000000000000010111111111101111100001001111100000000000000000000000000001110000000000000000100000000000000001011111111110111110000100111110000000000000000000000000000111000000000000000000000000000000000101111111111011111000010011111000000000000000000000000000011100000010000000001000000000000000010111111111101111100001001111001000000000000000000000000001110000001000000000000000000000000001011111111110111110000100111100110000000000000000000000000111000000100000000000000000000000000101111111111011111000010011110010000000000001000000000000011100000000000000000000000000000000010111111111111111100010001111100000000000000100000000000001110000000000000000100000000000000001011111111111111110001000111110000000000000010000000000000111000000001100001000000000000000000101111111111111111000100011111000000000000001000000000000011100000010110000101100000010000100010111111111111111100010001111001000000000000100000000000001110000001001011010010000001000010001011111111111111110001000111100110000000000010000000000000111000000100101101001000000100001000101111111111111111000100011110010000000000000000000000010011100000000010110100100000010000100010111111111101111100010001111100000000000000000000000001001110000000001011010100000101011010111011111111110111110001000111110000000000000000000000000100111000000000011001000000010101101011101111111111011111000100011111000000000000000000000000010011100000010001100101001101001100100110111111111101111100010001111001000000000000000000000001001110000001010100010000110100110010011011111111110111110001000111100110000000000000000000000100111000000101010001000011010011001001101111111111011111000100011110010000000000001000000000010011100000000101000100001101001100100110111111111111111100000001111100000000000000100000000001001110000000010100010111100100100010001011111111111111110000000111110000000000000010000000000100111000000000100000001110010010001000101111111111111111000000011111000000000000001000000000010011100000010010000001010001010000001010111111111111111100000001111001000000000000100000000001001110000001011000000001000101000000101011111111111111110000000111100110000000000010000000000100111000000101100000000100010100000010101111111111111111000000011110010000000000000000000000000000010000000110000000010001010000001010111111111101111100000001111100000000000000000000000000000001000000011000000110000001000000011011111111110111110000000111110000000000000000000000000000000100000000000010101000000100000001101111111111011111000000011111000000000000000000000000000000010000010000001011000000000001011110111111111101111100000001111001000000000000000000000000000001000001000010010000000000000101111011111111110111110000000111100110000000000000000000000000000100000100001001000000000000010111101111111111011111000000011110010000000000001000000000000000010000000000100100000000000001011110111111111111111100011110111100000000000000100000000000000001000000000010010100001010010010001011111111111111110001111011110000000000000010000000000000000100000000000010000000101001001000101111111111111111000111101111000000000000001000000000000000010000010000001001001001000001000010111111111111111100011110111001000000000000100000000000000001000001010110001000100100000100001011111111111111110001111011100110000000000010000000000000000100000101011000100010010000010000101111111111111111000111101110010000000000000000000000010000010000000101100010001001000001000010111111111101111100011110111100000000000000000000000001000001000000010110001110001000110001001011111111110111110001111011110000000000000000000000000100000100000000001010001000100011000100101111111111011111000111101111000000000000000000000000010000010000010000101001011000100101001010111111111101111100011110111001000000000000000000000001000001000001000001111001100010010100101011111111110111110001111011100110000000000000000000000100000100000100000111100110001001010010101111111111011111000111101110010000000000001000000000010000010000000000011110011000100101001010111111111111111100001110111100000000000000100000000001000001000000000001111100101000001111001011111111111111110000111011110000000000000010000000000100000100000000000100000010100000111100101111111111111111000011101111000000000000001000000000010000010000010000010001000111100010000010111111111111111100001110111001000000000000100000000001000001000001010110001000011110001000001011111111111111110000111011100110000000000010000000000100000100000101011000100001111000100000101111111111111111000011101110010000000000000000000000000010010000000101100010000111100010000010111111111101111100001110111100000000000000000000000000001001000000010110001110010000110001001011111111110111110000111011110000000000000000000000000000100100000000101011001001000011000100101111111111011111000011101111000000000000000000000000000010010000010010101101011000110101101010111111111101111100001110111001000000000000000000000000001001000001000000000001100011010110101011111111110111110000111011100110000000000000000000000000100100000100000000000110001101011010101111111111011111000011101110010000000000001000000000000010010000000000000000011000110101101010111111111111111100010110111100000000000000100000000000001001000000000000000100101100000000011011111111111111110001011011110000000000000010000000000000100100000000010001000010110000000001101111111111111111000101101111000000000000001000000000000010010000010001000101000000001000100010111111111111111100010110111001000000000000100000000000001001000001010000000000000000100010001011111111111111110001011011100110000000000010000000000000100100000101000000000000000010001000101111111111111111000101101110010000000000000000000000010010010000000100000000000000001000100010111111111101111100010110111100000000000000000000000001001001000000010000000111000100000000001011111111110111110001011011110000000000000000000000000100100100000000001001001100010000000000101111111111011111000101101111000000000000000000000000010010010000010000100101000000000100101010111111111101111100010110111001000000000000000000000001001001000001000001010000000000010010101011111111110111110001011011100110000000000000000000000100100100000100000101000000000001001010101111111111011111000101101110010000000000001000000000010010010000000000010100000000000100101010111111111111111100000110111100000000000000100000000001001001000000000001010100100100001010001011111111111111110000011011110000000000000010000000000100100100000000110010000010010000101000101111111111111111000001101111000000000000001000000000010010010000010011001001000101011001000010111111111111111100000110111001000000000000100000000001001001000001010110101000010101100100001011111111111111110000011011100110000000000010000000000100100100000101011010100001010110010000101111111111111111000001101110010000000000000000000000000001010000000101101010000101011001000010111111111101111100000110111100000000000000000000000000000101000000010110101111001000110101011011111111110111110000011011110000000000000000000000000000010100000000101010001100100011010101101111111111011111000001101111000000000000000000000000000001010000010010101001011010110101001010111111111101111100000110111001000000000000000000000000000101000001000001111001101011010100101011111111110111110000011011100110000000000000000000000000010100000100000111100110101101010010101111111111011111000001101110010000000000001000000000000001010000000000011110011010110101001010111111111111111100011010111100000000000000100000000000000101000000000001111100101000001111011011111111111111110001101011110000000000000010000000000000010100000000000100000010100000111101101111111111111111000110101111000000000000001000000000000001010000010000010001000111100010000010111111111111111100011010111001000000000000100000000000000101000001010000100000011110001000001011111111111111110001101011100110000000000010000000000000010100000101000010000001111000100000101111111111111111000110101110010000000000000000000000010001010000000100001000000111100010000010111111111101111100011010111100000000000000000000000001000101000000010000100110010000000100001011111111110111110001101011110000000000000000000000000100010100000001101011001001000000010000101111111111011111000110101111000000000000000000000000010001010000010110101101100010010101101010111111111101111100011010111001000000000000000000000001000101000001000000000010001001010110101011111111110111110001101011100110000000000000000000000100010100000100000000001000100101011010101111111111011111000110101110010000000000001000000000010001010000000000000000100010010101101010111111111111111100001010111100000000000000100000000001000101000000000000000100101100000000111011111111111111110000101011110000000000000010000000000100010100000000010000000010110000000011101111111111111111000010101111000000000000001000000000010001010000010001000001000000001000000010111111111111111100001010111001000000000000100000000001000101000001010001100000000000100000001011111111111111110000101011100110000000000010000000000100010100000101000110000000000010000000101111111111111111000010101110010000000000000000000000000011010000000100011000000000001000000010111111111101111100001010111100000000000000000000000000001101000000010001100111000000001100001011111111110111110000101011110000000000000000000000000000110100000000001000001100000000110000101111111111011111000010101111000000000000000000000000000011010000010000100001000110000100001010111111111101111100001010111001000000000000000000000000001101000001011110000000011000010000101011111111110111110000101011100110000000000000000000000000110100000101111000000001100001000010101111111111011111000010101110010000000000001000000000000011010000000111100000000110000100001010111111111111111100010010111100000000000000100000000000001101000000011110000110100001110000001011111111111111110001001011110000000000000010000000000000110100000001111111101010000111000000101111111111111111000100101111000000000000001000000000000011010000010111111111111000011111111110111111111111111100010010111001000000000000100000000000001101000001010101000011100001111111111011111111111111110001001011100110000000000010000000000000110100000101010100001110000111111111101111111111111111000100101110010000000000000000000000010011010000000101010000111000011111111110111111111101111100010010111100000000000000000000000001001101000000010101000111111110101000111011111111110111110001001011110000000000000000000000000100110100000000000000001111111010100011101111111111011111000100101111000000000000000000000000010011010000010000000001010100000000001010111111111101111100010010111001000000000000000000000001001101000001011111111001010000000000101011111111110111110001001011100110000000000000000000000100110100000101111111100101000000000010101111111111011111000100101110010000000000001000000000010011010000000111111110010100000000001010111111111111111100000010111100000000000000100000000001001101000000011111111110000001111111001011111111111111110000001011110000000000000010000000000100110100000001001111101000000111111100101111111111111111000000101111000000000000001000000000010011010000010100111111111111100111111110111111111111111100000010111001000000000000100000000001001101000001010000100011111110011111111011111111111111110000001011100110000000000010000000000100110100000101000010001111111001111111101111111111111111000000101110010000000000000000000000000000110000000100001000111111100111111110111111111101111100000010111100000000000000000000000000000011000000010000100110111110000100101011111111110111110000001011110000000000000000000000000000001100000001001010001011111000010010101111111111011111000000101111000000000000000000000000000000110000010100101001100010000101001010111111111101111100000010111001000000000000000000000000000011000001000000000010001000010100101011111111110111110000001011100110000000000000000000000000001100000100000000001000100001010010101111111111011111000000101110010000000000001000000000000000110000000000000000100010000101001010111111111111111100011100111100000000000000100000000000000011000000000000000100101000000000101011111111111111110001110011110000000000000010000000000000001100000000010000000010100000000010101111111111111111000111001111000000000000001000000000000000110000010001000001000000001000000010111111111111111100011100111001000000000000100000000000000011000001010110001000000000100000001011111111111111110001110011100100000000000010000000000000001100000101011000100000000010000000101111111111111111000111001110010000000000001000000000000000110000010101100010000000001000000010111111111111111100011100111001000000000000100000000000000011000001010110001000000000100000001011111111111111110001110011100100000000000010000000000000001100000101011000100000000010000000101111111111111111000111001110010000000000001000000000000000110000010101100010000000001000000010111111111111111100011100111001000000000000100000000000000011000001010110001000000000100000001011111111111111110001110011100100000000000010000000000000001100000101011000100000000010000000101111111111111111000111001110010000000000001000000000000000110000010101100010000000001000000010111111111111111100011100111001000000000000100000000000000011000001010110001000000000100000001011111111111111110001110011100100000000000010000000000000001100000101011000100000000010000000101111111111111111000111001110010000000000001000000000000000110000010101100010000000001000000010111111111111111100011100111001000000000000100000000000000011000001010110001000000000100000001011111111111111110001110011100110000000000010000000000000001100000101011000100000000010000000101111111111111111000111001110010000000000000000000000010000110000000101100010000000001000000010111111111101111100011100111100000000000000000000000001000011000000010110001111000000110001001011111111110111110001110011110000000000000000000000000100001100000000001011001100000011000100101111111111011111000111001111000000000000000000000000010000110000010000101101011000100101101010111111111101111100011100111001000000000000000000000001000011000001000000000001100010010110101011111111110111110001110011100110000000000000000000000100001100000100000000000110001001011010101111111111011111000111001110010000000000001000000000010000110000000000000000011000100101101010111111111111111100001100111100000000000000100000000001000011000000000000000100101100000000001011111111111111110000110011110000000000000010000000000100001100000000010001000010110000000000101111111111111111000011001111000000000000001000000000010000110000010001000101000000001000100010111111111111111100001100111001000000000000100000000001000011000001010110001000000000100010001011111111111111110000110011100110000000000010000000000100001100000101011000100000000010001000101111111111111111000011001110010000000000000000000000000010110000000101100010000000001000100010111111111101111100001100111100000000000000000000000000001011000000010110001111000100110001001011111111110111110000110011110000000000000000000000000000101100000000101011001100010011000100101111111111011111000011001111000000000000000000000000000010110000010010101101011000110101101010111111111101111100001100111001000000000000000000000000001011000001000000000001100011010110101011111111110111110000110011100110000000000000000000000000101100000100000000000110001101011010101111111111011111000011001110010000000000001000000000000010110000000000000000011000110101101010111111111111111100010100111100000000000000100000000000001011000000000000000100101100000000011011111111111111110001010011110000000000000010000000000000101100000000001001000010110000000001101111111111111111000101001111000000000000001000000000000010110000010000100101000000000100100010111111111111111100010100111001000000000000100000000000001011000001010110101000000000010010001011111111111111110001010011100110000000000010000000000000101100000101011010100000000001001000101111111111111111000101001110010000000000000000000000010010110000000101101010000000000100100010111111111101111100010100111100000000000000000000000001001011000000010110101110100100110101001011111111110111110001010011110000000000000000000000000100101100000000001010001010010011010100101111111111011111000101001111000000000000000000000000010010110000010000101001011010100101001010111111111101111100010100111001000000000000000000000001001011000001000001111001101010010100101011111111110111110001010011100110000000000000000000000100101100000100000111100110101001010010101111111111011111000101001110010000000000001000000000010010110000000000011110011010100101001010111111111111111100000100111100000000000000100000000001001011000000000001111100101000001111001011111111111111110000010011110000000000000010000000000100101100000000000100000010100000111100101111111111111111000001001111000000000000001000000000010010110000010000010001000111100010000010111111111111111100000100111001000000000000100000000001001011000001010110101000011110001000001011111111111111110000010011100110000000000010000000000100101100000101011010100001111000100000101111111111111111000001001110010000000000000000000000000001110000000101101010000111100010000010111111111101111100000100111100000000000000000000000000000111000000010110101110010000110101001011111111110111110000010011110000000000000000000000000000011100000000101010001001000011010100101111111111011111000001001111000000000000000000000000000001110000010010101001011010110101001010111111111101111100000100111001000000000000000000000000000111000001000001111001101011010100101011111111110111110000010011100110000000000000000000000000011100000100000111100110101101010010101111111111011111000001001110010000000000001000000000000001110000000000011110011010110101001010111111111111111100011000111100000000000000100000000000000111000000000001111100101000001111011011111111111111110001100011110000000000000010000000000000011100000000010100000010100000111101101111111111111111000110001111000000000000001000000000000001110000010001010001000111101010000010111111111111111100011000111001000000000000100000000000000111000001011100000000011110101000001011111111111111110001100011100110000000000010000000000000011100000101110000000001111010100000101111111111111111000110001110010000000000000000000000010001110000000111000000000111101010000010111111111101111100011000111100000000000000000000000001000111000000011100000111010001100000001011111111110111110001100011110000000000000000000000000100011100000000000011101101000110000000101111111111011111000110001111000000000000000000000000010001110000010000001111010000000001111110111111111101111100011000111001000000000000000000000001000111000001000000000001000000000111111011111111110111110001100011100110000000000000000000000100011100000100000000000100000000011111101111111111011111000110001110010000000000001000000000010001110000000000000000010000000001111110111111111111111100001000111100000000000000100000000001000111000000000000000100001110000000001011111111111111110000100011110000000000000010000000000100011100000000000100000000111000000000101111111111111111000010001111000000000000001000000000010001110000010000010001000000000010000010111111111111111100001000111001000000000000100000000001000111000001010110101000000000001000001011111111111111110000100011100110000000000010000000000100011100000101011010100000000000100000101111111111111111000010001110010000000000000000000000000011110000000101101010000000000010000010111111111101111100001000111100000000000000000000000000001111000000010110101110010000110101001011111111110111110000100011110000000000000000000000000000111100000000000010001001000011010100101111111111011111000010001111000000000000000000000000000011110000010000001001011010100001001010111111111101111100001000111001000000000000000000000000001111000001000001111001101010000100101011111111110111110000100011100110000000000000000000000000111100000100000111100110101000010010101111111111011111000010001110010000000000001000000000000011110000000000011110011010100001001010111111111111111100010000111100000000000000100000000000001111000000000001111100001000001111001011111111111111110001000011110000000000000010000000000000111100000000001100000000100000111100101111111111111111000100001111000000000000001000000000000011110000010000110001000111100110000010111111111111111100010000111001000000000000100000000000001111000001000000000000011110011000001011111111111111110001000011100110000000000010000000000000111100000100000000000001111001100000101111111111111111000100001110010000000000000000000000010011110000000000000000000111100110000010111111111101111100010000111100000000000000000000000001001111000000000000000100110000000000001011111111110111110001000011110000000000000000000000000100111100000000000000000011000000000000101111111111011111000100001111000000000000000000000000010011110000010000000001000000000000000010111111111101111100010000111001000000000000000000000001001111000001000000000000000000000000001011111111110111110001000011100110000000000000000000000100111100000100000000000000000000000000101111111111011111000100001110010000000000001000000000010011110000000000000000000000000000000010111111111111111100000000111100000000000000100000000001001111000000000000000100000000000000001011111111111111110000000011110000000000000010000000000100111100000000000000000000000000000000101111111111111111000000001111000000000000001000000000010011110000010000000001000000000000000010111111111111111100000000111001000000000000100000000001001111000001000000000000000000000000001011111111111111110000000011100110000000000010000000000100111100000100000000000000000000000000101111111111111111000000001110010000000000000000000000000000001000000000000000000000000000000010111111111101111100000000111100000000000000000000000000000000100000000000000100000000000000001011111111110111110000000011110000000000000000000000000000000010000000000000000000000000000000101111111111011111000000001111000000000000000000000000000000001000010000000001000000000000000010111111111101111100000000111001000000000000000000000000000000100001000000000000000000000000001011111111110111110000000011100110000000000000000000000000000010000100000000000000000000000000101111111111011111000000001110010000000000001000000000000000001000000000000000000000000000000010111111111111111100011111011100000000000000100000000000000000100000000000000100000000000000001011111111111111110001111101110000000000000010000000000000000010000000000000000000000000000000101111111111111111000111110111000000000000001000000000000000001000010000000001000000000000000010111111111111111100011111011001000000000000100000000000000000100001000111110000000000000000001011111111111111110001111101100110000000000010000000000000000010000100011111000000000000000000101111111111111111000111110110010000000000000000000000010000001000000001111100000000000000000010111111111101111100011111011100000000000000000000000001000000100000000111110100000000111110001011111111110111110001111101110000000000000000000000000100000010000000011100000000000011111000101111111111011111000111110111000000000000000000000000010000001000010001110001011111001110000010111111111101111100011111011001000000000000000000000001000000100001011101001001111100111000001011111111110111110001111101100110000000000000000000000100000010000101110100100111110011100000101111111111011111000111110110010000000000001000000000010000001000000111010010011111001110000010111111111111111100001111011100000000000000100000000001000000100000011101001111110001101001001011111111111111110000111101110000000000000010000000000100000010000000000001101111000110100100101111111111111111000011110111000000000000001000000000010000001000010000000111010100100000111110111111111111111100001111011001000000000000100000000001000000100001011011001001010010000011111011111111111111110000111101100110000000000010000000000100000010000101101100100101001000001111101111111111111111000011110110010000000000000000000000000010001000000110110010010100100000111110111111111101111100001111011100000000000000000000000000001000100000011011001110000111011001001011111111110111110000111101110000000000000000000000000000100010000000001000101000011101100100101111111111011111000011110111000000000000000000000000000010001000010000100011001100100100011110111111111101111100001111011001000000000000000000000000001000100001000011111000110010010001111011111111110111110000111101100110000000000000000000000000100010000100001111100011001001000111101111111111011111000011110110010000000000001000000000000010001000000000111110001100100100011110111111111111111100010111011100000000000000100000000000001000100000000011111100100010011111001011111111111111110001011101110000000000000010000000000000100010000000100000000010001001111100101111111111111111000101110111000000000000001000000000000010001000010010000001001111110000000010111111111111111100010111011001000000000000100000000000001000100001010100000000111111000000001011111111111111110001011101100110000000000010000000000000100010000101010000000011111100000000101111111111111111000101110110010000000000000000000000010010001000000101000000001111110000000010111111111101111100010111011100000000000000000000000001001000100000010100000110000000100000011011111111110111110001011101110000000000000000000000000100100010000000011110101000000010000001101111111111011111000101110111000000000000000000000000010010001000010001111011010000001111011010111111111101111100010111011001000000000000000000000001001000100001001101000001000000111101101011111111110111110001011101100110000000000000000000000100100010000100110100000100000011110110101111111111011111000101110110010000000000001000000000010010001000000011010000010000001111011010111111111111111100000111011100000000000000100000000001001000100000001101000101111011101000001011111111111111110000011101110000000000000010000000000100100010000000000011100111101110100000101111111111111111000001110111000000000000001000000000010010001000010000001111010100000001110110111111111111111100000111011001000000000000100000000001001000100001010001110001010000000111011011111111111111110000011101100110000000000010000000000100100010000101000111000101000000011101101111111111111111000001110110010000000000000000000000000001001000000100011100010100000001110110111111111101111100000111011100000000000000000000000000000100100000010001110110001110001110001011111111110111110000011101110000000000000000000000000000010010000001001100101000111000111000101111111111011111000001110111000000000000000000000000000001001000010100110011100111000110011010111111111101111100000111011001000000000000000000000000000100100001000000000010011100011001101011111111110111110000011101100110000000000000000000000000010010000100000000001001110001100110101111111111011111000001110110010000000000001000000000000001001000000000000000100111000110011010111111111111111100011011011100000000000000100000000000000100100000000000000100110010000000101011111111111111110001101101110000000000000010000000000000010010000000000000100011001000000010101111111111111111000110110111000000000000001000000000000001001000010000000011000000000000010010111111111111111100011011011001000000000000100000000000000100100001010101110000000000000001001011111111111111110001101101100110000000000010000000000000010010000101010111000000000000000100101111111111111111000110110110010000000000000000000000010001001000000101011100000000000000010010111111111101111100011011011100000000000000000000000001000100100000010101110110000010101110001011111111110111110001101101110000000000000000000000000100010010000001000100001000001010111000101111111111011111000110110111000000000000000000000000010001001000010100010001110111000010001010111111111101111100011011011001000000000000000000000001000100100001001111111011011100001000101011111111110111110001101101100110000000000000000000000100010010000100111111101101110000100010101111111111011111000110110110010000000000001000000000010001001000000011111110110111000010001010111111111111111100001011011100000000000000100000000001000100100000001111111100010001111111101011111111111111110000101101110000000000000010000000000100010010000000010100000001000111111110101111111111111111000010110111000000000000001000000000010001001000010001010001011111101010000110111111111111111100001011011001000000000000100000000001000100100001000111110001111110101000011011111111111111110000101101100110000000000010000000000100010010000100011111000111111010100001101111111111111111000010110110010000000000000000000000000011001000000001111100011111101010000110111111111101111100001011011100000000000000000000000000001100100000000111110101010000111110001011111111110111110000101101110000000000000000000000000000110010000000011100100101000011111000101111111111011111000010110111000000000000000000000000000011001000010001110011011111001110010010111111111101111100001011011001000000000000000000000000001100100001011101101001111100111001001011111111110111110000101101100110000000000000000000000000110010000101110110100111110011100100101111111111011111000010110110010000000000001000000000000011001000000111011010011111001110010010111111111111111100010011011100000000000000100000000000001100100000011101101111110011101101001011111111111111110001001101110000000000000010000000000000110010000000000001101111001110110100101111111111111111000100110111000000000000001000000000000011001000010000000111010110100000111110111111111111111100010011011001000000000000100000000000001100100001010110011001011010000011111011111111111111110001001101100110000000000010000000000000110010000101011001100101101000001111101111111111111111000100110110010000000000000000000000010011001000000101100110010110100000111110111111111101111100010011011100000000000000000000000001001100100000010110011110000110110011001011111111110111110001001101110000000000000000000000000100110010000001001110001000011011001100101111111111011111000100110111000000000000000000000000010011001000010100111001111001100111001010111111111101111100010011011001000000000000000000000001001100100001000001000011100110011100101011111111110111110001001101100110000000000000000000000100110010000100000100001110011001110010101111111111011111000100110110010000000000001000000000010011001000000000010000111001100111001010111111111111111100000011011100000000000000100000000001001100100000000001000100111000001000101011111111111111110000001101110000000000000010000000000100110010000000010010000011100000100010101111111111111111000000110111000000000000001000000000010011001000010001001001000100001001000010111111111111111100000011011001000000000000100000000001001100100001001010100000010000100100001011111111111111110000001101100110000000000010000000000100110010000100101010000001000010010000101111111111111111000000110110010000000000000000000000000000101000000010101000000100001001000010111111111101111100000011011100000000000000000000000000000010100000001010100101001001010100001011111111110111110000001101110000000000000000000000000000001010000001101010000100100101010000101111111111011111000000110111000000000000000000000000000000101000010110101001101010010101000110111111111101111100000011011001000000000000000000000000000010100001011110010010101001010100011011111111110111110000001101100110000000000000000000000000001010000101111001001010100101010001101111111111011111000000110110010000000000001000000000000000101000000111100100101010010101000110111111111111111100011101011100000000000000100000000000000010100000011110010110101001110010111011111111111111110001110101110000000000000010000000000000001010000001111111101010100111001011101111111111111111000111010111000000000000001000000000000000101000010111111111111001011111111110111111111111111100011101011001000000000000100000000000000010100001000000010011100101111111111011111111111111110001110101100110000000000010000000000000001010000100000001001110010111111111101111111111111111000111010110010000000000000000000000010000101000000000000100111001011111111110111111111101111100011101011100000000000000000000000001000010100000000000010101111110000010111011111111110111110001110101110000000000000000000000000100001010000001000100000111111000001011101111111111011111000111010111000000000000000000000000010000101000010100010001100001000010000010111111111101111100011101011001000000000000000000000001000010100001000001100010000100001000001011111111110111110001110101100110000000000000000000000100001010000100000110001000010000100000101111111111011111000111010110010000000000001000000000010000101000000000011000100001000010000010111111111111111100001101011100000000000000100000000001000010100000000001100100010000001100101011111111111111110000110101110000000000000010000000000100001010000000000000000001000000110010101111111111111111000011010111000000000000001000000000010000101000010000000001000110000000000010111111111111111100001101011001000000000000100000000001000010100001000010000000011000000000001011111111111111110000110101100110000000000010000000000100001010000100001000000001100000000000101111111111111111000011010110010000000000000000000000000010101000000000100000000110000000000010111111111101111100001101011100000000000000000000000000001010100000000010000100000000010000001011111111110111110000110101110000000000000000000000000000101010000000000000000000000001000000101111111111011111000011010111000000000000000000000000000010101000010000000001001000000000000010111111111101111100001101011001000000000000000000000000001010100001000100000000100000000000001011111111110111110000110101100110000000000000000000000000101010000100010000000010000000000000101111111111011111000011010110010000000000001000000000000010101000000001000000001000000000000010111111111111111100010101011100000000000000100000000000001010100000000100000100000000100000001011111111111111110001010101110000000000000010000000000000101010000000111011000000000010000000101111111111111111000101010111000000000000001000000000000010101000010011101101010000011101100010111111111111111100010101011001000000000000100000000000001010100001000111100001000001110110001011111111111111110001010101100110000000000010000000000000101010000100011110000100000111011000101111111111111111000101010110010000000000000000000000010010101000000001111000010000011101100010111111111101111100010101011100000000000000000000000001001010100000000111100101101100111100011011111111110111110001010101110000000000000000000000000100101010000001101000000110110011110001101111111111011111000101010111000000000000000000000000010010101000010110100001111110010100000010111111111101111100010101011001000000000000000000000001001010100001000100101011111001010000001011111111110111110001010101100110000000000000000000000100101010000100010010101111100101000000101111111111011111000101010110010000000000001000000000010010101000000001001010111110010100000010111111111111111100000101011100000000000000100000000001001010100000000100101100100000100101111011111111111111110000010101110000000000000010000000000100101010000000000110100010000010010111101111111111111111000001010111000000000000001000000000010010101000010000011011010010100011010010111111111111111100000101011001000000000000100000000001001010100001010000000001001010001101001011111111111111110000010101100110000000000010000000000100101010000101000000000100101000110100101111111111111111000001010110010000000000000000000000000001101000000100000000010010100011010010111111111101111100000101011100000000000000000000000000000110100000010000000110011010000000001011111111110111110000010101110000000000000000000000000000011010000000000011001001101000000000101111111111011111000001010111000000000000000000000000000001101000010000001101000000000001101010111111111101111100000101011001000000000000000000000000000110100001000000000000000000000110101011111111110111110000010101100110000000000000000000000000011010000100000000000000000000011010101111111111011111000001010110010000000000001000000000000001101000000000000000000000000001101010111111111111111100011001011100000000000000100000000000000110100000000000000100001100000000001011111111111111110001100101110000000000000010000000000000011010000000001000000000110000000000101111111111111111000110010111000000000000001000000000000001101000010000100001000000000100000010111111111111111100011001011001000000000000100000000000000110100001001000000000000000010000001011111111111111110001100101100110000000000010000000000000011010000100100000000000000001000000101111111111111111000110010110010000000000000000000000010001101000000010000000000000000100000010111111111101111100011001011100000000000000000000000001000110100000001000000100100001000000001011111111110111110001100101110000000000000000000000000100011010000001100111100010000100000000101111111111011111000110010111000000000000000000000000010001101000010110011111100000010011110110111111111101111100011001011001000000000000000000000001000110100001000011101010000001001111011011111111110111110001100101100110000000000000000000000100011010000100001110101000000100111101101111111111011111000110010110010000000000001000000000010001101000000000111010100000010011110110111111111111111100001001011100000000000000100000000001000110100000000011101100011110011101111011111111111111110000100101110000000000000010000000000100011010000000000010000001111001110111101111111111111111000010010111000000000000001000000000010001101000010000001001001110100001000010111111111111111100001001011001000000000000100000000001000110100001000000010000111010000100001011111111111111110000100101100110000000000010000000000100011010000100000001000011101000010000101111111111111111000010010110010000000000000000000000000011101000000000000100001110100001000010111111111101111100001001011100000000000000000000000000001110100000000000010100001000000010001011111111110111110000100101110000000000000000000000000000111010000000000000100000100000001000101111111111011111000010010111000000000000000000000000000011101000010000000011000001000000010010111111111101111100001001011001000000000000000000000000001110100001000010110000000100000001001011111111110111110000100101100110000000000000000000000000111010000100001011000000010000000100101111111111011111000010010110010000000000001000000000000011101000000000101100000001000000010010111111111111111100010001011100000000000000100000000000001110100000000010110100000010010110001011111111111111110001000101110000000000000010000000000000111010000000000000000000001001011000101111111111111111000100010111000000000000001000000000000011101000010000000001001011000000000010111111111111111100010001011001000000000000100000000000001110100001000000010000101100000000001011111111111111110001000101100110000000000010000000000000111010000100000001000010110000000000101111111111111111000100010110010000000000000000000000010011101000000000000100001011000000000010111111111101111100010001011100000000000000000000000001001110100000000000010100000000000010001011111111110111110001000101110000000000000000000000000100111010000000000000100000000000001000101111111111011111000100010111000000000000000000000000010011101000010000000011000001000000010010111111111101111100010001011001000000000000000000000001001110100001000010010000000100000001001011111111110111110001000101100110000000000000000000000100111010000100001001000000010000000100101111111111011111000100010110010000000000001000000000010011101000000000100100000001000000010010111111111111111100000001011100000000000000100000000001001110100000000010010100000010010010001011111111111111110000000101110000000000000010000000000100111010000000000000000000001001001000101111111111111111000000010111000000000000001000000000010011101000010000000001001001000000000010111111111111111100000001011001000000000000100000000001001110100001000000010000100100000000001011111111111111110000000101100110000000000010000000000100111010000100000001000010010000000000101111111111111111000000010110010000000000000000000000000000011000000000000100001001000000000010111111111101111100000001011100000000000000000000000000000001100000000000010100000000000010001011111111110111110000000101110000000000000000000000000000000110000000000000100000000000001000101111111111011111000000010111000000000000000000000000000000011000010000000011000001000000010010111111111101111100000001011001000000000000000000000000000001100001000011010000000100000001001011111111110111110000000101100110000000000000000000000000000110000100001101000000010000000100101111111111011111000000010110010000000000001000000000000000011000000000110100000001000000010010111111111111111100011110011100000000000000100000000000000001100000000011010100000010011010001011111111111111110001111001110000000000000010000000000000000110000000000000000000001001101000101111111111111111000111100111000000000000001000000000000000011000010000000001001101000000000010111111111111111100011110011001000000000000100000000000000001100001000111100000110100000000001011111111111111110001111001100110000000000010000000000000000110000100011110000011010000000000101111111111111111000111100110010000000000000000000000010000011000000001111000001101000000000010111111111101111100011110011100000000000000000000000001000001100000000111100100000000111100001011111111110111110001111001110000000000000000000000000100000110000000001000000000000011110000101111111111011111000111100111000000000000000000000000010000011000010000100001011110000100000010111111111101111100011110011001000000000000000000000001000001100001000100101001111000010000001011111111110111110001111001100110000000000000000000000100000110000100010010100111100001000000101111111111011111000111100110010000000000001000000000010000011000000001001010011110000100000010111111111111111100001110011100000000000000100000000001000001100000000100101100100000100101001011111111111111110000111001110000000000000010000000000100000110000000000111000010000010010100101111111111111111000011100111000000000000001000000000010000011000010000011101010010100011100010111111111111111100001110011001000000000000100000000001000001100001010100100001001010001110001011111111111111110000111001100110000000000010000000000100000110000101010010000100101000111000101111111111111111000011100110010000000000000000000000000010011000000101001000010010100011100010111111111101111100001110011100000000000000000000000000001001100000010100100110011100100100001011111111110111110000111001110000000000000000000000000000100110000000001000001001110010010000101111111111011111000011100111000000000000000000000000000010011000010000100001010010000100001010111111111101111100001110011001000000000000000000000000001001100001000000000001001000010000101011111111110111110000111001100110000000000000000000000000100110000100000000000100100001000010101111111111011111000011100110010000000000001000000000000010011000000000000000010010000100001010111111111111111100010110011100000000000000100000000000001001100000000000000100100000000000001011111111111111110001011001110000000000000010000000000000100110000000000000000010000000000000101111111111111111000101100111000000000000001000000000000010011000010000000001000000000000000010111111111111111100010110011001000000000000100000000000001001100001010110001000000000000000001011111111111111110001011001100110000000000010000000000000100110000101011000100000000000000000101111111111111111000101100110010000000000000000000000010010011000000101100010000000000000000010111111111101111100010110011100000000000000000000000001001001100000010110001110000000110001001011111111110111110001011001110000000000000000000000000100100110000001001000001000000011000100101111111111011111000101100111000000000000000000000000010010011000010100100001111000100100001010111111111101111100010110011001000000000000000000000001001001100001000000000011100010010000101011111111110111110001011001100110000000000000000000000100100110000100000000001110001001000010101111111111011111000101100110010000000000001000000000010010011000000000000000111000100100001010111111111111111100000110011100000000000000100000000001001001100000000000000100100000000000101011111111111111110000011001110000000000000010000000000100100110000000011000000010000000000010101111111111111111000001100111000000000000001000000000010010011000010001100001000000001100000010111111111111111100000110011001000000000000100000000001001001100001010101000000000000110000001011111111111111110000011001100110000000000010000000000100100110000101010100000000000011000000101111111111111111000001100110010000000000000000000000000001011000000101010000000000001100000010111111111101111100000110011100000000000000000000000000000101100000010101000111100000101000001011111111110111110000011001110000000000000000000000000000010110000000000010001110000010100000101111111111011111000001100111000000000000000000000000000001011000010000001001010100000001001010111111111101111100000110011001000000000000000000000000000101100001000000000001010000000100101011111111110111110000011001100110000000000000000000000000010110000100000000000101000000010010101111111111011111000001100110010000000000001000000000000001011000000000000000010100000001001010111111111111111100011010011100000000000000100000000000000101100000000000000100001000000000001011111111111111110001101001110000000000000010000000000000010110000001011011100000100000000000101111111111111111000110100111000000000000001000000000000001011000010101101111100000001101110010111111111111111100011010011001000000000000100000000000000101100001000000000010000000110111001011111111111111110001101001100110000000000010000000000000010110000100000000001000000011011100101111111111111111000110100110010000000000000000000000010001011000000000000000100000001101110010111111111101111100011010011100000000000000000000000001000101100000000000000101101110000000101011111111110111110001101001110000000000000000000000000100010110000000000000000110111000000010101111111111011111000110100111000000000000000000000000010001011000010000000001000000000000000010111111111101111100011010011001000000000000000000000001000101100001000000000000000000000000001011111111110111110001101001100110000000000000000000000100010110000100000000000000000000000000101111111111011111000110100110010000000000001000000000010001011000000000000000000000000000000010111111111111111100001010011100000000000000100000000001000101100000000000000100000000000000001011111111111111110000101001110000000000000010000000000100010110000000000000000000000000000000101111111111111111000010100111000000000000001000000000010001011000010000000001000000000000000010111111111111111100001010011001000000000000100000000001000101100001011100100000000000000000001011111111111111110000101001100110000000000010000000000100010110000101110010000000000000000000101111111111111111000010100110010000000000000000000000000011011000000111001000000000000000000010111111111101111100001010011100000000000000000000000000001101100000011100100110000001100100001011111111110111110000101001110000000000000000000000000000110110000001011110101000000110010000101111111111011111000010100111000000000000000000000000000011011000010101111011110010001111011110111111111101111100001010011001000000000000000000000000001101100001011111111011001000111101111011111111110111110000101001100110000000000000000000000000110110000101111111101100100011110111101111111111011111000010100110010000000000001000000000000011011000000111111110110010001111011110111111111111111100010010011100000000000000100000000000001101100000011111111111111011111111101011111111111111110001001001110000000000000010000000000000110110000000001011101111101111111110101111111111111111000100100111000000000000001000000000000011011000010000101111011111100101111110111111111111111100010010011001000000000000100000000000001101100001011110101001111110010111111011111111111111110001001001100110000000000010000000000000110110000101111010100111111001011111101111111111111111000100100110010000000000000000000000010011011000000111101010011111100101111110111111111101111100010010011100000000000000000000000001001101100000011110101110101111110101001011111111110111110001001001110000000000000000000000000100110110000001100110101010111111010100101111111111011111000100100111000000000000000000000000010011011000010110011011111010110011011110111111111101111100010010011001000000000000000000000001001101100001000000000011101011001101111011111111110111110001001001100110000000000000000000000100110110000100000000001110101100110111101111111111011111000100100110010000000000001000000000010011011000000000000000111010110011011110111111111111111100000010011100000000000000100000000001001101100000000000000100011010000000111011111111111111110000001001110000000000000010000000000100110110000000000000000001101000000011101111111111111111000000100111000000000000001000000000010011011000010000000001000000000000000010111111111111111100000010011001000000000000100000000001001101100001011110101000000000000000001011111111111111110000001001100110000000000010000000000100110110000101111010100000000000000000101111111111111111000000100110010000000000000000000000000000111000000111101010000000000000000010111111111101111100000010011100000000000000000000000000000011100000011110101110000001110101001011111111110111110000001001110000000000000000000000000000001110000000010110101000000111010100101111111111011111000000100111000000000000000000000000000000111000010001011011011010101011011110111111111101111100000010011001000000000000000000000000000011100001000000000001101010101101111011111111110111110000001001100110000000000000000000000000001110000100000000000110101010110111101111111111011111000000100110010000000000001000000000000000111000000000000000011010101011011110111111111111111100011100011100000000000000100000000000000011100000000000000101011010000000001011111111111111110001110001110000000000000010000000000000001110000000010000000101101000000000101111111111111111000111000111000000000000001000000000000000111000010001000001000000001000000010111111111111111100011100011001000000000000100000000000000011100001011110101000000000100000001011111111111111110001110001100110000000000010000000000000001110000101111010100000000010000000101111111111111111000111000110010000000000000000000000010000111000000111101010000000001000000010111111111101111100011100011100000000000000000000000001000011100000011110101111000001110101001011111111110111110001110001110000000000000000000000000100001110000001010110101100000111010100101111111111011111000111000111000000000000000000000000010000111000010101011011111010101011011110111111111101111100011100011001000000000000000000000001000011100001000000000011101010101101111011111111110111110001110001100110000000000000000000000100001110000100000000001110101010110111101111111111011111000111000110010000000000001000000000010000111000000000000000111010101011011110111111111111111100001100011100000000000000100000000001000011100000000000000101011010000000101011111111111111110000110001110000000000000010000000000100001110000000001000000101101000000010101111111111111111000011000111000000000000001000000000010000111000010000100001000000000100000010111111111111111100001100011001000000000000100000000001000011100001011110101000000000010000001011111111111111110000110001100110000000000010000000000100001110000101111010100000000001000000101111111111111111000011000110010000000000000000000000000010111000000111101010000000000100000010111111111101111100001100011100000000000000000000000000001011100000011110101110100001110101001011111111110111110000110001110000000000000000000000000000101110000000110110101010000111010100101111111111011111000011000111000000000000000000000000000010111000010011011011011010111011011110111111111101111100001100011001000000000000000000000000001011100001000000000001101011101101111011111111110111110000110001100110000000000000000000000000101110000100000000000110101110110111101111111111011111000011000110010000000000001000000000000010111000000000000000011010111011011110111111111111111100010100011100000000000000100000000000001011100000000000000101011010000000011011111111111111110001010001110000000000000010000000000000101110000000011000000101101000000001101111111111111111000101000111000000000000001000000000000010111000010001100001000000001100000010111111111111111100010100011001000000000000100000000000001011100001011110101000000000110000001011111111111111110001010001100110000000000010000000000000101110000101111010100000000011000000101111111111111111000101000110010000000000000000000000010010111000000111101010000000001100000010111111111101111100010100011100000000000000000000000001001011100000011110101111100001110101001011111111110111110001010001110000000000000000000000000100101110000001110110101110000111010100101111111111011111000101000111000000000000000000000000010010111000010111011011111010111011011110111111111101111100010100011001000000000000000000000001001011100001000000000011101011101101111011111111110111110001010001100110000000000000000000000100101110000100000000001110101110110111101111111111011111000101000110010000000000001000000000010010111000000000000000111010111011011110111111111111111100000100011100000000000000100000000001001011100000000000000101011010000000111011111111111111110000010001110000000000000010000000000100101110000000000100000101101000000011101111111111111111000001000111000000000000001000000000010010111000010000010001000000000010000010111111111111111100000100011001000000000000100000000001001011100001000111100000000000001000001011111111111111110000010001100110000000000010000000000100101110000100011110000000000000100000101111111111111111000001000110010000000000000000000000000001111000000001111000000000000010000010111111111101111100000100011100000000000000000000000000000111100000000111100100010000111100001011111111110111110000010001110000000000000000000000000000011110000000001000000001000011110000101111111111011111000001000111000000000000000000000000000001111000010000100001011110000100000010111111111101111100000100011001000000000000000000000000000111100001000100101001111000010000001011111111110111110000010001100110000000000000000000000000011110000100010010100111100001000000101111111111011111000001000110010000000000001000000000000001111000000001001010011110000100000010111111111111111100011000011100000000000000100000000000000111100000000100101100100000100101001011111111111111110001100001110000000000000010000000000000011110000000000111000010000010010100101111111111111111000110000111000000000000001000000000000001111000010000011101010010100011100010111111111111111100011000011001000000000000100000000000000111100001010100100001001010001110001011111111111111110001100001100110000000000010000000000000011110000101010010000100101000111000101111111111111111000110000110010000000000000000000000010001111000000101001000010010100011100010111111111101111100011000011100000000000000000000000001000111100000010100100110011100100100001011111111110111110001100001110000000000000000000000000100011110000000001000001001110010010000101111111111011111000110000111000000000000000000000000010001111000010000100001010010000100001010111111111101111100011000011001000000000000000000000001000111100001000000000001001000010000101011111111110111110001100001100110000000000000000000000100011110000100000000000100100001000010101111111111011111000110000110010000000000001000000000010001111000000000000000010010000100001010111111111111111100001000011100000000000000100000000001000111100000000000000100100000000000001011111111111111110000100001110000000000000010000000000100011110000000000000000010000000000000101111111111111111000010000111000000000000001000000000010001111000010000000001000000000000000010111111111111111100001000011001000000000000100000000001000111100001000111100000000000000000001011111111111111110000100001100110000000000010000000000100011110000100011110000000000000000000101111111111111111000010000110010000000000000000000000000011111000000001111000000000000000000010111111111101111100001000011100000000000000000000000000001111100000000111100100000000111100001011111111110111110000100001110000000000000000000000000000111110000000101000000000000011110000101111111111011111000010000111000000000000000000000000000011111000010010100001011110010100000010111111111101111100001000011001000000000000000000000000001111100001011000101001111001010000001011111111110111110000100001100110000000000000000000000000111110000101100010100111100101000000101111111111011111000010000110010000000000001000000000000011111000000110001010011110010100000010111111111111111100010000011100000000000000100000000000001111100000011000101110100001000101011011111111111111110001000001110000000000000010000000000000111110000000001111101010000100010101101111111111111111000100000111000000000000001000000000000011111000010000111111000010100111111110111111111111111100010000011001000000000000100000000000001111100001000111100000001010011111111011111111111111110001000001100110000000000010000000000000111110000100011110000000101001111111101111111111111111000100000110010000000000000000000000010011111000000001111000000010100111111110111111111101111100010000011100000000000000000000000001001111100000000111100100111110111100001011111111110111110001000001110000000000000000000000000100111110000001101000000011111011110000101111111111011111000100000111000000000000000000000000010011111000010110100001111110010100000010111111111101111100010000011001000000000000000000000001001111100001011000101011111001010000001011111111110111110001000001100110000000000000000000000100111110000101100010101111100101000000101111111111011111000100000110010000000000001000000000010011111000000110001010111110010100000010111111111111111100000000011100000000000000100000000001001111100000011000101110100001000101111011111111111111110000000001110000000000000010000000000100111110000000000111101010000100010111101111111111111111000000000111000000000000001000000000010011111000010000011111000010100011111110111111111111111100000000011001000000000000100000000001001111100001000111100000001010001111111011111111111111110000000001100110000000000010000000000100111110000100011110000000101000111111101111111111111111000000000110010000000000000000000000000000000100000001111000000010100011111110111111111101111100000000011100000000000000000000000000000000010000000111100100011110111100001011111111110111110000000001110000000000000000000000000000000001000000011000000001111011110000101111111111011111000000000111000000000000000000000000000000000100010001100001011110001100000010111111111101111100000000011001000000000000000000000000000000010001000100101001111000110000001011111111110111110000000001100110000000000000000000000000000001000100010010100111100011000000101111111111011111000000000110010000000000001000000000000000000100000001001010011110001100000010111111111111111100011111101100000000000000100000000000000000010000000100101101100000100101001011111111111111110001111110110000000000000010000000000000000001000000000110000110000010010100101111111111111111000111111011000000000000001000000000000000000100010000011001010010100011000010111111111111111100011111101001000000000000100000000000000000010001010100100001001010001100001011111111111111110001111110100110000000000010000000000000000001000101010010000100101000110000101111111111111111000111111010010000000000000000000000010000000100000101001000010010100011000010111111111101111100011111101100000000000000000000000001000000010000010100100110011000100100001011111111110111110001111110110000000000000000000000000100000001000000011000101001100010010000101111111111011111000111111011000000000000000000000000010000000100010001100011010010001100011010111111111101111100011111101001000000000000000000000001000000010001000000000001001000110001101011111111110111110001111110100110000000000000000000000100000001000100000000000100100011000110101111111111011111000111111010010000000000001000000000010000000100000000000000010010001100011010111111111111111100001111101100000000000000100000000001000000010000000000000101100010000000001011111111111111110000111110110000000000000010000000000100000001000000000000000110001000000000101111111111111111000011111011000000000000001000000000010000000100010000000001000000000000000010111111111111111100001111101001000000000000100000000001000000010001000101100000000000000000001011111111111111110000111110100110000000000010000000000100000001000100010110000000000000000000101111111111111111000011111010010000000000000000000000000010000100000001011000000000000000000010111111111101111100001111101100000000000000000000000000001000010000000101100100000000101100001011111111110111110000111110110000000000000000000000000000100001000001001000000000000010110000101111111111011111000011111011000000000000000000000000000010000100010100100001110110000100000010111111111101111100001111101001000000000000000000000000001000010001000000000011011000010000001011111111110111110000111110100110000000000000000000000000100001000100000000001101100001000000101111111111011111000011111010010000000000001000000000000010000100000000000000110110000100000010111111111111111100010111101100000000000000100000000000001000010000000000000100100000000000101011111111111111110001011110110000000000000010000000000000100001000000000001000010000000000010101111111111111111000101111011000000000000001000000000000010000100010000000101000000000000100010111111111111111100010111101001000000000000100000000000001000010001010110101000000000000010001011111111111111110001011110100110000000000010000000000000100001000101011010100000000000001000101111111111111111000101111010010000000000000000000000010010000100000101101010000000000000100010111111111101111100010111101100000000000000000000000001001000010000010110101110000100110101001011111111110111110001011110110000000000000000000000000100100001000001001000001000010011010100101111111111011111000101111011000000000000000000000000010010000100010100100001111010100100001010111111111101111100010111101001000000000000000000000001001000010001000000000011101010010000101011111111110111110001011110100110000000000000000000000100100001000100000000001110101001000010101111111111011111000101111010010000000000001000000000010010000100000000000000111010100100001010111111111111111100000111101100000000000000100000000001001000010000000000000100100000000000101011111111111111110000011110110000000000000010000000000100100001000000010000000010000000000010101111111111111111000001111011000000000000001000000000010010000100010001000001000000001000000010111111111111111100000111101001000000000000100000000001001000010001000100100000000000100000001011111111111111110000011110100110000000000010000000000100100001000100010010000000000010000000101111111111111111000001111010010000000000000000000000000001000100000001001000000000001000000010111111111101111100000111101100000000000000000000000000000100010000000100100101000000100100001011111111110111110000011110110000000000000000000000000000010001000001000100000100000010010000101111111111011111000001111011000000000000000000000000000001000100010100010001110010000010000010111111111101111100000111101001000000000000000000000000000100010001011111000011001000001000001011111111110111110000011110100110000000000000000000000000010001000101111100001100100000100000101111111111011111000001111010010000000000001000000000000001000100000111110000110010000010000010111111111111111100011011101100000000000000100000000000000100010000011111000110010001111000101011111111111111110001101110110000000000000010000000000000010001000000000001001001000111100010101111111111111111000110111011000000000000001000000000000001000100010000000101011100000000101110111111111111111100011011101001000000000000100000000000000100010001000000000001110000000010111011111111111111110001101110100110000000000010000000000000010001000100000000000111000000001011101111111111111111000110111010010000000000000000000000010001000100000000000000011100000000101110111111111101111100011011101100000000000000000000000001000100010000000000000100000100000000001011111111110111110001101110110000000000000000000000000100010001000000000000000000010000000000101111111111011111000110111011000000000000000000000000010001000100010000000001000000000000000010111111111101111100011011101001000000000000000000000001000100010001000000000000000000000000001011111111110111110001101110100110000000000000000000000100010001000100000000000000000000000000101111111111011111000110111010010000000000001000000000010001000100000000000000000000000000000010111111111111111100001011101100000000000000100000000001000100010000000000000100000000000000001011111111111111110000101110110000000000000010000000000100010001000000000000000000000000000000101111111111111111000010111011000000000000001000000000010001000100010000000001000000000000000010111111111111111100001011101001000000000000100000000001000100010001001000100000000000000000001011111111111111110000101110100110000000000010000000000100010001000100100010000000000000000000101111111111111111000010111010010000000000000000000000000011000100000010001000000000000000000010111111111101111100001011101100000000000000000000000000001100010000001000100100000001000100001011111111110111110000101110110000000000000000000000000000110001000001000110000000000100010000101111111111011111000010111011000000000000000000000000000011000100010100011001100010000011000110111111111101111100001011101001000000000000000000000000001100010001011111111010001000001100011011111111110111110000101110100110000000000000000000000000110001000101111111101000100000110001101111111111011111000010111010010000000000001000000000000011000100000111111110100010000011000110111111111111111100010011101100000000000000100000000000001100010000011111111110011001111111101011111111111111110001001110110000000000000010000000000000110001000001111111101001100111111110101111111111111111000100111011000000000000001000000000000011000100010111111111111111111111111110111111111111111100010011101001000000000000100000000000001100010001001101000011111111111111111011111111111111110001001110100110000000000010000000000000110001000100110100001111111111111111101111111111111111000100111010010000000000000000000000010011000100000011010000111111111111111110111111111101111100010011101100000000000000000000000001001100010000001101000101111111101000111011111111110111110001001110110000000000000000000000000100110001000000000010000111111110100011101111111111011111000100111011000000000000000000000000010011000100010000001001010100000001000110111111111101111100010011101001000000000000000000000001001100010001011111111001010000000100011011111111110111110001001110100110000000000000000000000100110001000101111111100101000000010001101111111111011111000100111010010000000000001000000000010011000100000111111110010100000001000110111111111111111100000011101100000000000000100000000001001100010000011111111110001001111111001011111111111111110000001110110000000000000010000000000100110001000001011111101000100111111100101111111111111111000000111011000000000000001000000000010011000100010101111111111111101111111110111111111111111100000011101001000000000000100000000001001100010001000000000011111110111111111011111111111111110000001110100110000000000010000000000100110001000100000000001111111011111111101111111111111111000000111010010000000000000000000000000000100100000000000000111111101111111110111111111101111100000011101100000000000000000000000000000010010000000000000101111110000000101011111111110111110000001110110000000000000000000000000000001001000000000000000111111000000010101111111111011111000000111011000000000000000000000000000000100100010000000001000000000000000010111111111101111100000011101001000000000000000000000000000010010001000000000000000000000000001011111111110111110000001110100110000000000000000000000000001001000100000000000000000000000000101111111111011111000000111010010000000000001000000000000000100100000000000000000000000000000010111111111111111100011101101100000000000000100000000000000010010000000000000100000000000000001011111111111111110001110110110000000000000010000000000000001001000000000000000000000000000000101111111111111111000111011011000000000000001000000000000000100100010000000001000000000000000010111111111111111100011101101001000000000000100000000000000010010001010110101000000000000000001011111111111111110001110110100110000000000010000000000000001001000101011010100000000000000000101111111111111111000111011010010000000000000000000000010000100100000101101010000000000000000010111111111101111100011101101100000000000000000000000001000010010000010110101110000000110101001011111111110111110001110110110000000000000000000000000100001001000000000000001000000011010100101111111111011111000111011011000000000000000000000000010000100100010000000001011010100000001010111111111101111100011101101001000000000000000000000001000010010001000000000001101010000000101011111111110111110001110110100110000000000000000000000100001001000100000000000110101000000010101111111111011111000111011010010000000000001000000000010000100100000000000000011010100000001010111111111111111100001101101100 - 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111T1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 - - - - - - - - - - - - - - - - - - -