initial commit

This commit is contained in:
2022-10-23 23:45:43 -07:00
commit e190fa5193
6450 changed files with 8626944 additions and 0 deletions
@@ -0,0 +1,49 @@
#******************************************************************************
#
# Makefile - Rules for compiling
#
# Copyright (c) 2020, Ambiq Micro
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# Third party software included in this distribution is subject to the
# additional license terms as defined in the /docs/licenses directory.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# This is part of revision 2.4.2 of the AmbiqSuite Development Package.
#
#******************************************************************************
# Include rules specific to this board
-include ../../board-defs.mk
-include example-defs.mk
# All makefiles use this to find the top level directory.
SWROOT?=../../../..
# Include rules for building generic examples.
include $(SWROOT)/makedefs/example.mk
@@ -0,0 +1,37 @@
Name:
=====
spi_boot_host
Description:
============
An example to drive the IO Slave on a second board.
This example acts as the boot host for spi_boot and multi_boot on Apollo
and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
slave over a SPI protocol. The purpose of this demo is to show how a host
processor might store, load, and update the firmware on an Apollo or
Apollo2 device that is connected as a slave.
Please see the multi_boot README.txt for more details on how to run the
examples.
PIN fly lead connections assumed by multi_boot:
HOST SLAVE (multi_boot target)
-------- --------
GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
GPIO[17] Slave reset (host to slave) Reset Pin or n/c
GND GND
Reset and Override pin connections from Host are optional
Keeping Button1 pressed on target has same effect as host driving override
******************************************************************************
@@ -0,0 +1,178 @@
#******************************************************************************
#
# Makefile - Rules for building the libraries, examples and docs.
#
# Copyright (c) 2020, Ambiq Micro
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# Third party software included in this distribution is subject to the
# additional license terms as defined in the /docs/licenses directory.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# This is part of revision 2.4.2 of the AmbiqSuite Development Package.
#
#******************************************************************************
TARGET := spi_boot_host
COMPILERNAME := gcc
PROJECT := spi_boot_host_gcc
CONFIG := bin
SHELL:=/bin/bash
#### Setup ####
TOOLCHAIN ?= arm-none-eabi
PART = apollo2
CPU = cortex-m4
FPU = fpv4-sp-d16
#FABI = softfp
FABI = hard
LINKER_FILE := ./spi_boot_host.ld
STARTUP_FILE := ./startup_$(COMPILERNAME).c
#### Required Executables ####
CC = $(TOOLCHAIN)-gcc
GCC = $(TOOLCHAIN)-gcc
CPP = $(TOOLCHAIN)-cpp
LD = $(TOOLCHAIN)-ld
CP = $(TOOLCHAIN)-objcopy
OD = $(TOOLCHAIN)-objdump
RD = $(TOOLCHAIN)-readelf
AR = $(TOOLCHAIN)-ar
SIZE = $(TOOLCHAIN)-size
RM = $(shell which rm 2>/dev/null)
EXECUTABLES = CC LD CP OD AR RD SIZE GCC
K := $(foreach exec,$(EXECUTABLES),\
$(if $(shell which $($(exec)) 2>/dev/null),,\
$(info $(exec) not found on PATH ($($(exec))).)$(exec)))
$(if $(strip $(value K)),$(info Required Program(s) $(strip $(value K)) not found))
ifneq ($(strip $(value K)),)
all clean:
$(info Tools $(TOOLCHAIN)-$(COMPILERNAME) not installed.)
$(RM) -rf bin
else
DEFINES = -DPART_$(PART)
DEFINES+= -DAM_PACKAGE_BGA
DEFINES+= -DAM_PART_APOLLO2
DEFINES+= -Dgcc
INCLUDES = -I../../../../../mcu/apollo2
INCLUDES+= -I../src
INCLUDES+= -I../../../bsp
INCLUDES+= -I../../../../../utils
INCLUDES+= -I../../../../../devices
INCLUDES+= -I../../../../..
VPATH = ../../../../../bootloader
VPATH+=:../../../../../utils
VPATH+=:../src
SRC = spi_boot_host.c
SRC += am_util_delay.c
SRC += am_util_stdio.c
SRC += startup_gcc.c
CSRC = $(filter %.c,$(SRC))
ASRC = $(filter %.s,$(SRC))
OBJS = $(CSRC:%.c=$(CONFIG)/%.o)
OBJS+= $(ASRC:%.s=$(CONFIG)/%.o)
DEPS = $(CSRC:%.c=$(CONFIG)/%.d)
DEPS+= $(ASRC:%.s=$(CONFIG)/%.d)
LIBS = ../../../../../mcu/apollo2/hal/gcc/bin/libam_hal.a
LIBS += ../../../bsp/gcc/bin/libam_bsp.a
CFLAGS = -mthumb -mcpu=$(CPU) -mfpu=$(FPU) -mfloat-abi=$(FABI)
CFLAGS+= -ffunction-sections -fdata-sections -fomit-frame-pointer
CFLAGS+= -MMD -MP -std=c99 -Wall -g
CFLAGS+= -O0
CFLAGS+= $(DEFINES)
CFLAGS+= $(INCLUDES)
CFLAGS+=
LFLAGS = -mthumb -mcpu=$(CPU) -mfpu=$(FPU) -mfloat-abi=$(FABI)
LFLAGS+= -nostartfiles -static
LFLAGS+= -Wl,--gc-sections,--entry,am_reset_isr,-Map,$(CONFIG)/$(TARGET).map
LFLAGS+= -Wl,--start-group -lm -lc -lgcc $(LIBS) -Wl,--end-group
LFLAGS+=
# Additional user specified CFLAGS
CFLAGS+=$(EXTRA_CFLAGS)
CPFLAGS = -Obinary
ODFLAGS = -S
#### Rules ####
all: directories $(CONFIG)/$(TARGET).bin
directories: $(CONFIG)
$(CONFIG):
@mkdir -p $@
$(CONFIG)/%.o: %.c $(CONFIG)/%.d
@echo " Compiling $(COMPILERNAME) $<" ;\
$(CC) -c $(CFLAGS) $< -o $@
$(CONFIG)/%.o: %.s $(CONFIG)/%.d
@echo " Assembling $(COMPILERNAME) $<" ;\
$(CC) -c $(CFLAGS) $< -o $@
$(CONFIG)/$(TARGET).axf: $(OBJS) $(LIBS)
@echo " Linking $(COMPILERNAME) $@" ;\
$(CC) -Wl,-T,$(LINKER_FILE) -o $@ $(OBJS) $(LFLAGS)
$(CONFIG)/$(TARGET).bin: $(CONFIG)/$(TARGET).axf
@echo " Copying $(COMPILERNAME) $@..." ;\
$(CP) $(CPFLAGS) $< $@ ;\
$(OD) $(ODFLAGS) $< > $(CONFIG)/$(TARGET).lst
clean:
@echo "Cleaning..." ;\
$(RM) -f $(OBJS) $(DEPS) \
$(CONFIG)/$(TARGET).bin $(CONFIG)/$(TARGET).axf \
$(CONFIG)/$(TARGET).lst $(CONFIG)/$(TARGET).map
$(CONFIG)/%.d: ;
../../../../../mcu/apollo2/hal/gcc/bin/libam_hal.a:
$(MAKE) -C ../../../../../mcu/apollo2/hal
../../../bsp/gcc/bin/libam_bsp.a:
$(MAKE) -C ../../../bsp
# Automatically include any generated dependencies
-include $(DEPS)
endif
.PHONY: all clean directories
@@ -0,0 +1,62 @@
/******************************************************************************
*
* spi_boot_host.ld - Linker script for applications using startup_gnu.c
*
*****************************************************************************/
ENTRY(am_reset_isr)
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1024K
SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 256K
}
SECTIONS
{
.text :
{
. = ALIGN(4);
KEEP(*(.isr_vector))
*(.text)
*(.text*)
*(.rodata)
*(.rodata*)
. = ALIGN(4);
_etext = .;
} > FLASH
/* User stack section initialized by startup code. */
.stack (NOLOAD):
{
. = ALIGN(8);
*(.stack)
*(.stack*)
. = ALIGN(8);
} > SRAM
.data :
{
. = ALIGN(4);
_sdata = .;
*(.data)
*(.data*)
. = ALIGN(4);
_edata = .;
} > SRAM AT>FLASH
/* used by startup to initialize data */
_init_data = LOADADDR(.data);
.bss :
{
. = ALIGN(4);
_sbss = .;
*(.bss)
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} > SRAM
.ARM.attributes 0 : { *(.ARM.attributes) }
}
@@ -0,0 +1,318 @@
//*****************************************************************************
//
//! @file startup_gcc.c
//!
//! @brief Definitions for interrupt handlers, the vector table, and the stack.
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#include <stdint.h>
//*****************************************************************************
//
// Forward declaration of interrupt handlers.
//
//*****************************************************************************
extern void am_reset_isr(void) __attribute ((naked));
extern void am_nmi_isr(void) __attribute ((weak));
extern void am_fault_isr(void) __attribute ((weak));
extern void am_mpufault_isr(void) __attribute ((weak, alias ("am_fault_isr")));
extern void am_busfault_isr(void) __attribute ((weak, alias ("am_fault_isr")));
extern void am_usagefault_isr(void) __attribute ((weak, alias ("am_fault_isr")));
extern void am_svcall_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_debugmon_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_pendsv_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_systick_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_brownout_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_watchdog_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_clkgen_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_vcomp_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_ioslave_ios_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_ioslave_acc_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster0_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster1_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster2_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster3_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster4_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_iomaster5_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_gpio_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_ctimer_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_uart_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_uart1_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_adc_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_pdm0_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr0_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr1_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr2_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr3_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr4_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr5_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr6_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_stimer_cmpr7_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_flash_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_software0_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_software1_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_software2_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_software3_isr(void) __attribute ((weak, alias ("am_default_isr")));
extern void am_default_isr(void) __attribute ((weak));
//*****************************************************************************
//
// The entry point for the application.
//
//*****************************************************************************
extern int main(void);
//*****************************************************************************
//
// Reserve space for the system stack.
//
//*****************************************************************************
__attribute__ ((section(".stack")))
static uint32_t g_pui32Stack[1024];
//*****************************************************************************
//
// The vector table. Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000.
//
// Note: Aliasing and weakly exporting am_mpufault_isr, am_busfault_isr, and
// am_usagefault_isr does not work if am_fault_isr is defined externally.
// Therefore, we'll explicitly use am_fault_isr in the table for those vectors.
//
//*****************************************************************************
__attribute__ ((section(".isr_vector")))
void (* const g_am_pfnVectors[])(void) =
{
(void (*)(void))((uint32_t)g_pui32Stack + sizeof(g_pui32Stack)),
// The initial stack pointer
am_reset_isr, // The reset handler
am_nmi_isr, // The NMI handler
am_fault_isr, // The hard fault handler
am_fault_isr, // The MPU fault handler
am_fault_isr, // The bus fault handler
am_fault_isr, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
am_svcall_isr, // SVCall handle
am_debugmon_isr, // Debug monitor handler
0, // Reserved
am_pendsv_isr, // The PendSV handler
am_systick_isr, // The SysTick handler
//
// Peripheral Interrupts
//
am_brownout_isr, // 0: Brownout
am_watchdog_isr, // 1: Watchdog
am_clkgen_isr, // 2: CLKGEN
am_vcomp_isr, // 3: Voltage Comparator
am_ioslave_ios_isr, // 4: I/O Slave general
am_ioslave_acc_isr, // 5: I/O Slave access
am_iomaster0_isr, // 6: I/O Master 0
am_iomaster1_isr, // 7: I/O Master 1
am_iomaster2_isr, // 8: I/O Master 2
am_iomaster3_isr, // 9: I/O Master 3
am_iomaster4_isr, // 10: I/O Master 4
am_iomaster5_isr, // 11: I/O Master 5
am_gpio_isr, // 12: GPIO
am_ctimer_isr, // 13: CTIMER
am_uart_isr, // 14: UART
am_uart1_isr, // 15: UART
am_adc_isr, // 16: ADC
am_pdm0_isr, // 17: PDM
am_stimer_isr, // 18: SYSTEM TIMER
am_stimer_cmpr0_isr, // 19: SYSTEM TIMER COMPARE0
am_stimer_cmpr1_isr, // 20: SYSTEM TIMER COMPARE1
am_stimer_cmpr2_isr, // 21: SYSTEM TIMER COMPARE2
am_stimer_cmpr3_isr, // 22: SYSTEM TIMER COMPARE3
am_stimer_cmpr4_isr, // 23: SYSTEM TIMER COMPARE4
am_stimer_cmpr5_isr, // 24: SYSTEM TIMER COMPARE5
am_stimer_cmpr6_isr, // 25: SYSTEM TIMER COMPARE6
am_stimer_cmpr7_isr, // 26: SYSTEM TIMER COMPARE7
am_flash_isr, // 27: FLASH
am_software0_isr, // 28: SOFTWARE0
am_software1_isr, // 29: SOFTWARE1
am_software2_isr, // 30: SOFTWARE2
am_software3_isr // 31: SOFTWARE3
};
//*****************************************************************************
//
// The following are constructs created by the linker, indicating where the
// the "data" and "bss" segments reside in memory. The initializers for the
// "data" segment resides immediately following the "text" segment.
//
//*****************************************************************************
extern uint32_t _etext;
extern uint32_t _sdata;
extern uint32_t _edata;
extern uint32_t _sbss;
extern uint32_t _ebss;
//*****************************************************************************
//
// This is the code that gets called when the processor first starts execution
// following a reset event. Only the absolutely necessary set is performed,
// after which the application supplied entry() routine is called.
//
//*****************************************************************************
#if defined(__GNUC_STDC_INLINE__)
void
am_reset_isr(void)
{
//
// Set the vector table pointer.
//
__asm(" ldr r0, =0xE000ED08\n"
" ldr r1, =g_am_pfnVectors\n"
" str r1, [r0]");
//
// Set the stack pointer.
//
__asm(" ldr sp, [r1]");
#ifndef NOFPU
//
// Enable the FPU.
//
__asm("ldr r0, =0xE000ED88\n"
"ldr r1,[r0]\n"
"orr r1,#(0xF << 20)\n"
"str r1,[r0]\n"
"dsb\n"
"isb\n");
#endif
//
// Copy the data segment initializers from flash to SRAM.
//
__asm(" ldr r0, =_init_data\n"
" ldr r1, =_sdata\n"
" ldr r2, =_edata\n"
"copy_loop:\n"
" ldr r3, [r0], #4\n"
" str r3, [r1], #4\n"
" cmp r1, r2\n"
" blt copy_loop\n");
//
// Zero fill the bss segment.
//
__asm(" ldr r0, =_sbss\n"
" ldr r1, =_ebss\n"
" mov r2, #0\n"
"zero_loop:\n"
" cmp r0, r1\n"
" it lt\n"
" strlt r2, [r0], #4\n"
" blt zero_loop");
//
// Call the application's entry point.
//
main();
//
// If main returns then execute a break point instruction
//
__asm(" bkpt ");
}
#else
#error GNU STDC inline not supported.
#endif
//*****************************************************************************
//
// This is the code that gets called when the processor receives a NMI. This
// simply enters an infinite loop, preserving the system state for examination
// by a debugger.
//
//*****************************************************************************
void
am_nmi_isr(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a fault
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
void
am_fault_isr(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
void
am_default_isr(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
@@ -0,0 +1,80 @@
#******************************************************************************
#
# Makefile - Rules for building the libraries, examples and docs.
#
# Copyright (c) 2020, Ambiq Micro
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# Third party software included in this distribution is subject to the
# additional license terms as defined in the /docs/licenses directory.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# This is part of revision 2.4.2 of the AmbiqSuite Development Package.
#
#******************************************************************************
TARGET := spi_boot_host
COMPILERNAME := iar
PROJECT := spi_boot_host_iar
CONFIG := bin
AM_SoftwareRoot ?= ../../../..
SHELL:=/bin/bash
#### Required Executables ####
K := $(shell type -p IarBuild.exe)
RM = $(shell which rm 2>/dev/null)
ifeq ($(K),)
all clean:
$(info Tools w/$(COMPILERNAME) not installed.)
$(RM) -rf bin
else
all: directories binary
.PHONY: binary
binary:
IarBuild.exe spi_boot_host.ewp -make Debug -log info
directories: $(CONFIG)
$(CONFIG):
@mkdir -p $@
clean:
@echo Cleaning... ;\
IarBuild.exe spi_boot_host.ewp -clean Debug -log all
../../../../../mcu/apollo2/hal/iar/bin/libam_hal.a:
$(MAKE) -C ../../../../../mcu/apollo2/hal
../../../bsp/iar/bin/libam_bsp.a:
$(MAKE) -C ../../../bsp
endif
.PHONY: all clean directories
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<workspace>
<project>
<path>$WS_DIR$\spi_boot_host.ewp</path>
</project>
<batchBuild/>
</workspace>
@@ -0,0 +1,101 @@
//*****************************************************************************
//
// spi_boot_host.icf
//
// IAR linker Configuration File
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
//
// Define a memory section that covers the entire 4 GB addressable space of the
// processor. (32-bit can address up to 4GB)
//
define memory mem with size = 4G;
//
// Define a region for the flash.
//
define region FLASH = mem:[from 0x00000000 to 0x00100000];
//
// Define a region for the SRAM.
//
define region SRAM = mem:[from 0x10000000 to 0x10040000];
//
// Define a block for the heap.
//
define block HEAP with alignment = 0x8, size = 0x00000000 { };
//
// Define a block for the stack.
//
define block CSTACK with alignment = 0x8, size = 1024 { };
//
// Read/Write values should be initialized by copying from flash.
//
initialize by copy { readwrite };
//
// Indicate that the noinit values should be left alone.
//
do not initialize { section .noinit };
//
// Place the interrupt vectors at the start of flash.
//
place at start of FLASH { readonly section .intvec };
//
// Place the remainder of the read-only items into flash.
//
place in FLASH { readonly };
//
// Place the stack at the start of SRAM.
//
place at start of SRAM { block CSTACK, section .noinit };
//
// Place all read/write items into SRAM.
//
place in SRAM { block HEAP, readwrite };
@@ -0,0 +1,359 @@
//*****************************************************************************
//
//! @file startup_iar.c
//!
//! @brief Definitions for interrupt handlers, the vector table, and the stack.
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#include <stdint.h>
//*****************************************************************************
//
// Enable the IAR extensions for this source file.
//
//*****************************************************************************
#pragma language = extended
//*****************************************************************************
//
// Weak function links.
//
//*****************************************************************************
#pragma weak am_mpufault_isr = am_fault_isr
#pragma weak am_busfault_isr = am_fault_isr
#pragma weak am_usagefault_isr = am_fault_isr
#pragma weak am_svcall_isr = am_default_isr
#pragma weak am_debugmon_isr = am_default_isr
#pragma weak am_pendsv_isr = am_default_isr
#pragma weak am_systick_isr = am_default_isr
#pragma weak am_brownout_isr = am_default_isr
#pragma weak am_watchdog_isr = am_default_isr
#pragma weak am_clkgen_isr = am_default_isr
#pragma weak am_vcomp_isr = am_default_isr
#pragma weak am_ioslave_ios_isr = am_default_isr
#pragma weak am_ioslave_acc_isr = am_default_isr
#pragma weak am_iomaster0_isr = am_default_isr
#pragma weak am_iomaster1_isr = am_default_isr
#pragma weak am_iomaster2_isr = am_default_isr
#pragma weak am_iomaster3_isr = am_default_isr
#pragma weak am_iomaster4_isr = am_default_isr
#pragma weak am_iomaster5_isr = am_default_isr
#pragma weak am_gpio_isr = am_default_isr
#pragma weak am_ctimer_isr = am_default_isr
#pragma weak am_uart_isr = am_default_isr
#pragma weak am_uart1_isr = am_default_isr
#pragma weak am_adc_isr = am_default_isr
#pragma weak am_pdm0_isr = am_default_isr
#pragma weak am_stimer_isr = am_default_isr
#pragma weak am_stimer_cmpr0_isr = am_default_isr
#pragma weak am_stimer_cmpr1_isr = am_default_isr
#pragma weak am_stimer_cmpr2_isr = am_default_isr
#pragma weak am_stimer_cmpr3_isr = am_default_isr
#pragma weak am_stimer_cmpr4_isr = am_default_isr
#pragma weak am_stimer_cmpr5_isr = am_default_isr
#pragma weak am_stimer_cmpr6_isr = am_default_isr
#pragma weak am_stimer_cmpr7_isr = am_default_isr
#pragma weak am_flash_isr = am_default_isr
#pragma weak am_software0_isr = am_default_isr
#pragma weak am_software1_isr = am_default_isr
#pragma weak am_software2_isr = am_default_isr
#pragma weak am_software3_isr = am_default_isr
//*****************************************************************************
//
// Forward declaration of the default fault handlers.
//
//*****************************************************************************
extern __stackless void am_reset_isr(void);
extern __weak void am_nmi_isr(void);
extern __weak void am_fault_isr(void);
extern void am_mpufault_isr(void);
extern void am_busfault_isr(void);
extern void am_usagefault_isr(void);
extern void am_svcall_isr(void);
extern void am_debugmon_isr(void);
extern void am_pendsv_isr(void);
extern void am_systick_isr(void);
extern void am_brownout_isr(void);
extern void am_watchdog_isr(void);
extern void am_clkgen_isr(void);
extern void am_vcomp_isr(void);
extern void am_ioslave_ios_isr(void);
extern void am_ioslave_acc_isr(void);
extern void am_iomaster0_isr(void);
extern void am_iomaster1_isr(void);
extern void am_iomaster2_isr(void);
extern void am_iomaster3_isr(void);
extern void am_iomaster4_isr(void);
extern void am_iomaster5_isr(void);
extern void am_gpio_isr(void);
extern void am_ctimer_isr(void);
extern void am_uart_isr(void);
extern void am_uart1_isr(void);
extern void am_adc_isr(void);
extern void am_pdm0_isr(void);
extern void am_stimer_isr(void);
extern void am_stimer_cmpr0_isr(void);
extern void am_stimer_cmpr1_isr(void);
extern void am_stimer_cmpr2_isr(void);
extern void am_stimer_cmpr3_isr(void);
extern void am_stimer_cmpr4_isr(void);
extern void am_stimer_cmpr5_isr(void);
extern void am_stimer_cmpr6_isr(void);
extern void am_stimer_cmpr7_isr(void);
extern void am_flash_isr(void);
extern void am_software0_isr(void);
extern void am_software1_isr(void);
extern void am_software2_isr(void);
extern void am_software3_isr(void);
extern void am_default_isr(void);
//*****************************************************************************
//
// The entry point for the application startup code.
//
//*****************************************************************************
extern void __iar_program_start(void);
//*****************************************************************************
//
// Reserve space for the system stack.
//
//*****************************************************************************
static uint32_t pui32Stack[1024] @ ".noinit";
//*****************************************************************************
//
// A union that describes the entries of the vector table. The union is needed
// since the first entry is the stack pointer and the remainder are function
// pointers.
//
//*****************************************************************************
typedef union
{
void (*pfnHandler)(void);
uint32_t ui32Ptr;
}
uVectorEntry;
//*****************************************************************************
//
// The vector table. Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000.
//
// Note: Aliasing and weakly exporting am_mpufault_isr, am_busfault_isr, and
// am_usagefault_isr does not work if am_fault_isr is defined externally.
// Therefore, we'll explicitly use am_fault_isr in the table for those vectors.
//
//*****************************************************************************
__root const uVectorEntry __vector_table[] @ ".intvec" =
{
{ .ui32Ptr = (uint32_t)pui32Stack + sizeof(pui32Stack) },
// The initial stack pointer
am_reset_isr, // The reset handler
am_nmi_isr, // The NMI handler
am_fault_isr, // The hard fault handler
am_fault_isr, // The MPU fault handler
am_fault_isr, // The bus fault handler
am_fault_isr, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
am_svcall_isr, // SVCall handle
am_debugmon_isr, // Debug monitor handler
0, // Reserved
am_pendsv_isr, // The PendSV handler
am_systick_isr, // The SysTick handler
//
// Peripheral Interrupts
//
am_brownout_isr, // 0: Brownout
am_watchdog_isr, // 1: Watchdog
am_clkgen_isr, // 2: CLKGEN
am_vcomp_isr, // 3: Voltage Comparator
am_ioslave_ios_isr, // 4: I/O Slave general
am_ioslave_acc_isr, // 5: I/O Slave access
am_iomaster0_isr, // 6: I/O Master 0
am_iomaster1_isr, // 7: I/O Master 1
am_iomaster2_isr, // 8: I/O Master 2
am_iomaster3_isr, // 9: I/O Master 3
am_iomaster4_isr, // 10: I/O Master 4
am_iomaster5_isr, // 11: I/O Master 5
am_gpio_isr, // 12: GPIO
am_ctimer_isr, // 13: CTIMER
am_uart_isr, // 14: UART0
am_uart1_isr, // 15: UART1
am_adc_isr, // 16: ADC
am_pdm0_isr, // 17: PDM
am_stimer_isr, // 18: STIMER
am_stimer_cmpr0_isr, // 19: STIMER COMPARE0
am_stimer_cmpr1_isr, // 20: STIMER COMPARE1
am_stimer_cmpr2_isr, // 21: STIMER COMPARE2
am_stimer_cmpr3_isr, // 22: STIMER COMPARE3
am_stimer_cmpr4_isr, // 23: STIMER COMPARE4
am_stimer_cmpr5_isr, // 24: STIMER COMPARE5
am_stimer_cmpr6_isr, // 25: STIMER COMPARE6
am_stimer_cmpr7_isr, // 26: STIMER COMPARE7
am_flash_isr, // 27: FLASH
am_software0_isr, // 28: SOFTWARE0
am_software1_isr, // 29: SOFTWARE1
am_software2_isr, // 30: SOFTWARE2
am_software3_isr // 31: SOFTWARE3
};
//*****************************************************************************
//
// Note - The template for this function is originally found in IAR's module,
// low_level_init.c. As supplied by IAR, it is an empty function.
//
// This module contains the function `__low_level_init', a function
// that is called before the `main' function of the program. Normally
// low-level initializations - such as setting the prefered interrupt
// level or setting the watchdog - can be performed here.
//
// Note that this function is called before the data segments are
// initialized, this means that this function cannot rely on the
// values of global or static variables.
//
// When this function returns zero, the startup code will inhibit the
// initialization of the data segments. The result is faster startup,
// the drawback is that neither global nor static data will be
// initialized.
//
// Copyright 1999-2017 IAR Systems AB.
//
// $Revision: 112610 $
//
//
//
//
//*****************************************************************************
#define AM_REGVAL(x) (*((volatile uint32_t *)(x)))
#define VTOR_ADDR 0xE000ED08
__interwork int __low_level_init(void)
{
AM_REGVAL(VTOR_ADDR) = (uint32_t)&__vector_table;
/*==================================*/
/* Choose if segment initialization */
/* should be done or not. */
/* Return: 0 to omit seg_init */
/* 1 to run seg_init */
/*==================================*/
return 1;
}
//*****************************************************************************
//
// This is the code that gets called when the processor first starts execution
// following a reset event. Only the absolutely necessary set is performed,
// after which the application supplied entry() routine is called.
//
//*****************************************************************************
void
am_reset_isr(void)
{
//
// Call the application's entry point.
//
__iar_program_start();
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a NMI. This
// simply enters an infinite loop, preserving the system state for examination
// by a debugger.
//
//*****************************************************************************
__weak void
am_nmi_isr(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives a fault
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
__weak void
am_fault_isr(void)
{
//
// Enter an infinite loop.
//
while(1)
{
}
}
//*****************************************************************************
//
// This is the code that gets called when the processor receives an unexpected
// interrupt. This simply enters an infinite loop, preserving the system state
// for examination by a debugger.
//
//*****************************************************************************
static void
am_default_isr(void)
{
//
// Go into an infinite loop.
//
while(1)
{
}
}
@@ -0,0 +1,62 @@
/*----------------------------------------------------------------------------
* Name: Dbg_RAM.ini
* Purpose: RAM Debug Initialization File
* Note(s):
*----------------------------------------------------------------------------
* This file is part of the uVision/ARM development tools.
* This software may only be used under the terms of a valid, current,
* end user licence from KEIL for a compatible version of KEIL software
* development tools. Nothing else gives you the right to use this software.
*
* This software is supplied "AS IS" without warranties of any kind.
*
* Copyright (c) 2008-2013 Keil - An ARM Company. All rights reserved.
*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
TraceSetup() Turn on ITM clocks, etc.
*----------------------------------------------------------------------------*/
FUNC void TraceSetup (void)
{
// turn on the ITM/TPIU clock
_WDWORD(0x40020250, 0x00000201); // TPIU clock enabled at 3MHz
}
/*----------------------------------------------------------------------------
Setup() configure PC & SP for RAM Debug
*----------------------------------------------------------------------------*/
FUNC void Setup (void) {
SP = _RDWORD(0x00000000+0x0); // Setup Stack Pointer
PC = _RDWORD(0x00000000+0x4); // Setup Program Counter
_WDWORD(0xE000ED08, 0x00000000+0x0); // Setup Vector Table Offset Register (done in system file)
}
LOAD %L INCREMENTAL // load the application
// Executed after reset via uVision's 'Reset'-button
FUNC void OnResetExec (void)
{
//Set_ui32HALflags();
//TraceSetup();
}
FUNC void Set_ui32HALflags (void)
{
TraceSetup();
//g_ui32HALflags = 0x00000001;
_break_ = 1;
}
Setup(); // Setup for Running
BS main, 1, "Set_ui32HALflags()";
g
/*----------------------------------------------------------------------------
*----------------------------------------------------------------------------*/
@@ -0,0 +1,40 @@
[BREAKPOINTS]
ForceImpTypeAny = 0
ShowInfoWin = 1
EnableFlashBP = 2
BPDuringExecution = 0
[CFI]
CFISize = 0x00
CFIAddr = 0x00
[CPU]
MonModeVTableAddr = 0xFFFFFFFF
MonModeDebug = 0
MaxNumAPs = 0
LowPowerHandlingMode = 0
OverrideMemMap = 0
AllowSimulation = 1
ScriptFile=""
[FLASH]
CacheExcludeSize = 0x00
CacheExcludeAddr = 0x00
MinNumBytesFlashDL = 0
SkipProgOnCRCMatch = 1
VerifyDownload = 1
AllowCaching = 1
EnableFlashDL = 2
Override = 1
Device="AMAPH1KK-KBR"
[GENERAL]
WorkRAMSize = 0x00
WorkRAMAddr = 0x00
RAMUsageLimit = 0x00
[SWO]
SWOLogFile=""
[MEM]
RdOverrideOrMask = 0x00
RdOverrideAndMask = 0xFFFFFFFF
RdOverrideAddr = 0xFFFFFFFF
WrOverrideOrMask = 0x00
WrOverrideAndMask = 0xFFFFFFFF
WrOverrideAddr = 0xFFFFFFFF
@@ -0,0 +1,80 @@
#******************************************************************************
#
# Makefile - Rules for building the libraries, examples and docs.
#
# Copyright (c) 2020, Ambiq Micro
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# Third party software included in this distribution is subject to the
# additional license terms as defined in the /docs/licenses directory.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# This is part of revision 2.4.2 of the AmbiqSuite Development Package.
#
#******************************************************************************
TARGET := spi_boot_host
COMPILERNAME := Keil
PROJECT := spi_boot_host_Keil
CONFIG := bin
SHELL:=/bin/bash
#### Required Executables ####
K := $(shell type -p UV4.exe)
RM := $(shell which rm 2>/dev/null)
ifeq ($(K),)
all clean:
$(info Tools w/$(COMPILERNAME) not installed.)
$(RM) -rf bin
else
all: directories binary
.PHONY: binary
binary:
UV4.exe -b -t "spi_boot_host" spi_boot_host.uvprojx -j0 || [ $$? -eq 1 ]
directories: $(CONFIG)
$(CONFIG):
@mkdir -p $@
clean:
@echo Cleaning... ;\
$(RM) -rf $(CONFIG)
../../../bsp/keil/bin/libam_bsp.lib:
$(MAKE) -C ../../../bsp
../../../../../mcu/apollo2/hal/keil/bin/libam_hal.lib:
$(MAKE) -C ../../../../../mcu/apollo2/hal
endif
.PHONY: all clean directories
@@ -0,0 +1,59 @@
;******************************************************************************
;
; spi_boot_host.sct
;
; Scatter file for Keil linker configuration.
;
;******************************************************************************
;******************************************************************************
;
; Copyright (c) 2020, Ambiq Micro
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice,
; this list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
; contributors may be used to endorse or promote products derived from this
; software without specific prior written permission.
;
; Third party software included in this distribution is subject to the
; additional license terms as defined in the /docs/licenses directory.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.
;
; This is part of revision 2.4.2 of the AmbiqSuite Development Package.
;
;******************************************************************************
LR_1 0x00000000
{
FLASH 0x00000000 0x00100000
{
*.o (RESET, +First)
* (+RO)
}
SRAM 0x10000000 0x00040000
{
* (+RW, +ZI)
}
}
@@ -0,0 +1,283 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>spi_boot_host</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>48000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>0</tLdApp>
<tGomain>0</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<nTsel>3</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile>.\Dbg_RAM.ini</tIfile>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U483027775 -O2510 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP0 -TB1 -TFE0 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DbgCM</Key>
<Name>-U-O206 -O206 -S2 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS2 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo -FS00 -FL080000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-UV0264NGE -O2510 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO1 -TC3000000 -TP21 -TDS8002 -TDT0 -TDC1F -TIE1 -TIP8 -FO7 -FD10000000 -FC4000 -FN1 -FF0Apollo2.FLM -FS00 -FL0100000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>1</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<Lin2Executable></Lin2Executable>
<Lin2ConfigFile></Lin2ConfigFile>
<bLin2Auto>0</bLin2Auto>
<bAutoGenD>0</bAutoGenD>
<bAuto2GenD>0</bAuto2GenD>
</TargetOption>
</Target>
<Group>
<GroupName>src</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine>
<CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>../src/spi_boot_host.c</PathWithFileName>
<FilenameWithoutPath>spi_boot_host.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>utils</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine>
<CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>../../../../../utils/am_util_delay.c</PathWithFileName>
<FilenameWithoutPath>am_util_delay.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine>
<CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>../../../../../utils/am_util_stdio.c</PathWithFileName>
<FilenameWithoutPath>am_util_stdio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>keil</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
<TopLine>0</TopLine>
<CurrentLine>0</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>../keil/startup_keil.s</PathWithFileName>
<FilenameWithoutPath>startup_keil.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>
@@ -0,0 +1,434 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>spi_boot_host</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pArmCC></pArmCC>
<TargetOption>
<TargetCommonOption>
<Device>AMAPH1KK-KBR</Device>
<Vendor>Ambiq Micro</Vendor>
<PackID>AmbiqMicro.Apollo_DFP.1.0.0</PackID>
<PackURL>http://s3.asia.ambiqmicro.com/pack/</PackURL>
<Cpu>IRAM(0x10000000,0x40000) IROM(0x00000000,0x100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD10000000 -FC4000 -FN1 -FF0Apollo2 -FS00 -FL010000 -FP0($$Device:AMAPH1KK-KBR$Flash\Apollo2.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile></RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:AMAPH1KK-KBR$SVD\apollo2.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</RegisterFilePath>
<DBRegisterFilePath>1024 BGA$Device\Include\Apollo2.h\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\bin\</OutputDirectory>
<OutputName>spi_boot_host</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>1</RunUserProg2>
<UserProg1Name>fromelf --bin --output bin\spi_boot_host.bin bin\spi_boot_host.axf</UserProg1Name>
<UserProg2Name>fromelf -cedrst --output bin\spi_boot_host.txt bin\spi_boot_host.axf</UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -MPU</SimDllArguments>
<SimDlgDll>DCM.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM4</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments> -MPU</TargetDllArguments>
<TargetDlgDll>TCM.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>1</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
<GenerateListings>0</GenerateListings>
<asHll>1</asHll>
<asAsm>1</asAsm>
<asMacX>1</asMacX>
<asSyms>1</asSyms>
<asFals>1</asFals>
<asDbgD>1</asDbgD>
<asForm>1</asForm>
<ldLst>0</ldLst>
<ldmm>1</ldmm>
<ldXref>1</ldXref>
<BigEnd>0</BigEnd>
<AdsALst>1</AdsALst>
<AdsACrf>1</AdsACrf>
<AdsANop>0</AdsANop>
<AdsANot>0</AdsANot>
<AdsLLst>1</AdsLLst>
<AdsLmap>1</AdsLmap>
<AdsLcgr>1</AdsLcgr>
<AdsLsym>1</AdsLsym>
<AdsLszi>1</AdsLszi>
<AdsLtoi>1</AdsLtoi>
<AdsLsun>1</AdsLsun>
<AdsLven>1</AdsLven>
<AdsLsxf>1</AdsLsxf>
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
<hadIROM>1</hadIROM>
<hadIRAM>1</hadIRAM>
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>2</RvdsVP>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
<useUlib>0</useUlib>
<EndSel>0</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>3</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
<NoZi1>0</NoZi1>
<NoZi2>0</NoZi2>
<NoZi3>0</NoZi3>
<NoZi4>0</NoZi4>
<NoZi5>0</NoZi5>
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>
<Im1Chk>1</Im1Chk>
<Im2Chk>0</Im2Chk>
<OnChipMemories>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocm4>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm4>
<Ocm5>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm5>
<Ocm6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm6>
<IRAM>
<Type>0</Type>
<StartAddress>0x10000000</StartAddress>
<Size>0x40000</Size>
</IRAM>
<IROM>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100000</Size>
</IROM>
<XRAM>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT5>
<OCR_RVCT6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT6>
<OCR_RVCT7>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT7>
<OCR_RVCT8>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
<StartAddress>0x10000000</StartAddress>
<Size>0x40000</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>1</Optim>
<oTime>1</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
<Strict>0</Strict>
<EnumInt>0</EnumInt>
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>2</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
<useXO>0</useXO>
<v6Lang>1</v6Lang>
<v6LangP>1</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>AM_PACKAGE_BGA AM_PART_APOLLO2 keil</Define>
<Undefine></Undefine>
<IncludePath>../../../../../mcu/apollo2;../src;../../../bsp;../../../../../utils;../../../../../devices;../../../../..</IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>1</interw>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<thumb>0</thumb>
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
<umfTarg>0</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange>0x0</TextAddressRange>
<DataAddressRange>0x10000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile>.\spi_boot_host.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc>../../../../../mcu/apollo2/hal/keil/bin/libam_hal.lib(am_hal_global.o) --keep=am_hal_global.o(.data) </Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
<GroupName>src</GroupName>
<Files>
<File>
<FileName>spi_boot_host.c</FileName>
<FileType>1</FileType>
<FilePath>../src/spi_boot_host.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>utils</GroupName>
<Files>
<File>
<FileName>am_util_delay.c</FileName>
<FileType>1</FileType>
<FilePath>../../../../../utils/am_util_delay.c</FilePath>
</File>
<File>
<FileName>am_util_stdio.c</FileName>
<FileType>1</FileType>
<FilePath>../../../../../utils/am_util_stdio.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>keil</GroupName>
<Files>
<File>
<FileName>startup_keil.s</FileName>
<FileType>1</FileType>
<FilePath>../keil/startup_keil.s</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>lib</GroupName>
<Files>
<File>
<FileName>libam_bsp.lib</FileName>
<FileType>4</FileType>
<FilePath>../../../bsp/keil/bin/libam_bsp.lib</FilePath>
</File>
<File>
<FileName>libam_hal.lib</FileName>
<FileType>4</FileType>
<FilePath>../../../../../mcu/apollo2/hal/keil/bin/libam_hal.lib</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>
@@ -0,0 +1,351 @@
;******************************************************************************
;
;! @file startup_keil.s
;!
;! @brief Definitions for Apollo2 interrupt handlers, the vector table, and the stack.
;
;******************************************************************************
;******************************************************************************
;
; Copyright (c) 2020, Ambiq Micro
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice,
; this list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
; contributors may be used to endorse or promote products derived from this
; software without specific prior written permission.
;
; Third party software included in this distribution is subject to the
; additional license terms as defined in the /docs/licenses directory.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.
;
; This is part of revision 2.4.2 of the AmbiqSuite Development Package.
;
;******************************************************************************
;******************************************************************************
;
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;************************************************************************
Stack EQU 0x00001000
;******************************************************************************
;
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
;******************************************************************************
Heap EQU 0x00000000
;******************************************************************************
;
; Allocate space for the stack.
;
;******************************************************************************
AREA STACK, NOINIT, READWRITE, ALIGN=3
StackMem
SPACE Stack
__initial_sp
;******************************************************************************
;
; Allocate space for the heap.
;
;******************************************************************************
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
HeapMem
SPACE Heap
__heap_limit
;******************************************************************************
;
; Indicate that the code in this file preserves 8-byte alignment of the stack.
;
;******************************************************************************
PRESERVE8
;******************************************************************************
;
; Place code into the reset code section.
;
;******************************************************************************
AREA RESET, CODE, READONLY
THUMB
;******************************************************************************
;
; The vector table.
;
;******************************************************************************
;
; Note: Aliasing and weakly exporting am_mpufault_isr, am_busfault_isr, and
; am_usagefault_isr does not work if am_fault_isr is defined externally.
; Therefore, we'll explicitly use am_fault_isr in the table for those vectors.
;
EXPORT __Vectors
__Vectors
DCD StackMem + Stack ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD am_nmi_isr ; NMI Handler
DCD am_fault_isr ; Hard Fault Handler
DCD am_fault_isr ; The MPU fault handler
DCD am_fault_isr ; The bus fault handler
DCD am_fault_isr ; The usage fault handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD am_svcall_isr ; SVCall handler
DCD am_debugmon_isr ; Debug monitor handler
DCD 0 ; Reserved
DCD am_pendsv_isr ; The PendSV handler
DCD am_systick_isr ; The SysTick handler
;
; Peripheral Interrupts
;
DCD am_brownout_isr ; 0: Reserved
DCD am_watchdog_isr ; 1: Reserved
DCD am_clkgen_isr ; 2: CLKGEN
DCD am_vcomp_isr ; 3: Voltage Comparator
DCD am_ioslave_ios_isr ; 4: I/O Slave general
DCD am_ioslave_acc_isr ; 5: I/O Slave access
DCD am_iomaster0_isr ; 6: I/O Master 0
DCD am_iomaster1_isr ; 7: I/O Master 1
DCD am_iomaster2_isr ; 8: I/O Master 2
DCD am_iomaster3_isr ; 9: I/O Master 3
DCD am_iomaster4_isr ; 10: I/O Master 4
DCD am_iomaster5_isr ; 11: I/O Master 5
DCD am_gpio_isr ; 12: GPIO
DCD am_ctimer_isr ; 13: CTIMER
DCD am_uart_isr ; 14: UART0
DCD am_uart1_isr ; 15: UART1
DCD am_adc_isr ; 16: ADC
DCD am_pdm0_isr ; 17: PDM
DCD am_stimer_isr ; 18: SYSTEM TIMER
DCD am_stimer_cmpr0_isr ; 19: SYSTEM TIMER COMPARE0
DCD am_stimer_cmpr1_isr ; 20: SYSTEM TIMER COMPARE1
DCD am_stimer_cmpr2_isr ; 21: SYSTEM TIMER COMPARE2
DCD am_stimer_cmpr3_isr ; 22: SYSTEM TIMER COMPARE3
DCD am_stimer_cmpr4_isr ; 23: SYSTEM TIMER COMPARE4
DCD am_stimer_cmpr5_isr ; 24: SYSTEM TIMER COMPARE5
DCD am_stimer_cmpr6_isr ; 25: SYSTEM TIMER COMPARE6
DCD am_stimer_cmpr7_isr ; 26: SYSTEM TIMER COMPARE7
DCD am_flash_isr ; 27: FLASH
DCD am_software0_isr ; 28: SOFTWARE0
DCD am_software1_isr ; 29: SOFTWARE1
DCD am_software2_isr ; 30: SOFTWARE2
DCD am_software3_isr ; 31: SOFTWARE3
__Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors
;******************************************************************************
;
; This is the code that gets called when the processor first starts execution
; following a reset event.
;
;******************************************************************************
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
;
; Enable the FPU.
;
MOVW R0, #0xED88
MOVT R0, #0xE000
LDR R1, [R0]
ORR R1, #0x00F00000
STR R1, [R0]
DSB
ISB
;
; Branch to main.
;
LDR R0, =__main
BX R0
ENDP
;******************************************************************************
;
; Weak Exception Handlers.
;
;******************************************************************************
am_nmi_isr PROC
EXPORT am_nmi_isr [WEAK]
B .
ENDP
am_fault_isr\
PROC
EXPORT am_fault_isr [WEAK]
B .
ENDP
am_memmanage_isr\
PROC
EXPORT am_memmanage_isr [WEAK]
B .
ENDP
am_default_isr\
PROC
EXPORT am_svcall_isr [WEAK]
EXPORT am_debugmon_isr [WEAK]
EXPORT am_pendsv_isr [WEAK]
EXPORT am_systick_isr [WEAK]
EXPORT am_brownout_isr [WEAK]
EXPORT am_adc_isr [WEAK]
EXPORT am_watchdog_isr [WEAK]
EXPORT am_clkgen_isr [WEAK]
EXPORT am_vcomp_isr [WEAK]
EXPORT am_ioslave_ios_isr [WEAK]
EXPORT am_ioslave_acc_isr [WEAK]
EXPORT am_iomaster0_isr [WEAK]
EXPORT am_iomaster1_isr [WEAK]
EXPORT am_iomaster2_isr [WEAK]
EXPORT am_iomaster3_isr [WEAK]
EXPORT am_iomaster4_isr [WEAK]
EXPORT am_iomaster5_isr [WEAK]
EXPORT am_gpio_isr [WEAK]
EXPORT am_ctimer_isr [WEAK]
EXPORT am_uart_isr [WEAK]
EXPORT am_uart0_isr [WEAK]
EXPORT am_uart1_isr [WEAK]
EXPORT am_pdm0_isr [WEAK]
EXPORT am_stimer_isr [WEAK]
EXPORT am_stimer_cmpr0_isr [WEAK]
EXPORT am_stimer_cmpr1_isr [WEAK]
EXPORT am_stimer_cmpr2_isr [WEAK]
EXPORT am_stimer_cmpr3_isr [WEAK]
EXPORT am_stimer_cmpr4_isr [WEAK]
EXPORT am_stimer_cmpr5_isr [WEAK]
EXPORT am_stimer_cmpr6_isr [WEAK]
EXPORT am_stimer_cmpr7_isr [WEAK]
EXPORT am_flash_isr [WEAK]
EXPORT am_software0_isr [WEAK]
EXPORT am_software1_isr [WEAK]
EXPORT am_software2_isr [WEAK]
EXPORT am_software3_isr [WEAK]
am_svcall_isr
am_debugmon_isr
am_pendsv_isr
am_systick_isr
am_brownout_isr
am_adc_isr
am_watchdog_isr
am_clkgen_isr
am_vcomp_isr
am_ioslave_ios_isr
am_ioslave_acc_isr
am_iomaster0_isr
am_iomaster1_isr
am_iomaster2_isr
am_iomaster3_isr
am_iomaster4_isr
am_iomaster5_isr
am_gpio_isr
am_ctimer_isr
am_uart_isr
am_uart0_isr
am_uart1_isr
am_pdm0_isr
am_stimer_isr
am_stimer_cmpr0_isr
am_stimer_cmpr1_isr
am_stimer_cmpr2_isr
am_stimer_cmpr3_isr
am_stimer_cmpr4_isr
am_stimer_cmpr5_isr
am_stimer_cmpr6_isr
am_stimer_cmpr7_isr
am_flash_isr
am_software0_isr
am_software1_isr
am_software2_isr
am_software3_isr
; all device interrupts go here unless the weak label is over
; ridden in the linker hard spin so the debugger will know it
; was an unhandled interrupt request a come-from-buffer or
; instruction trace hardware would sure be nice if you get here
B .
ENDP
;******************************************************************************
;
; Align the end of the section.
;
;******************************************************************************
ALIGN
;******************************************************************************
;
; Initialization of the heap and stack.
;
;******************************************************************************
AREA |.text|, CODE, READONLY
;******************************************************************************
;
; User Initial Stack & Heap.
;
;******************************************************************************
IF :DEF: __MICROLIB
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
ELSE
IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap
__user_initial_stackheap PROC
LDR R0, =HeapMem
LDR R1, =(StackMem + Stack)
LDR R2, =(HeapMem + Heap)
LDR R3, =StackMem
BX LR
ENDP
ENDIF
;******************************************************************************
;
; Align the end of the section.
;
;******************************************************************************
ALIGN
;******************************************************************************
;
; All Done
;
;******************************************************************************
END
@@ -0,0 +1,196 @@
#!/usr/bin/env python3
import argparse
import string
args = None
def main():
global args
args = get_arguments()
with open(args.output + '.h', 'w') as f:
print(print_template(), file=f)
def get_arguments():
parser = argparse.ArgumentParser(description='Pack a raw binary into a C file that can be used with a boot host example')
parser.add_argument('input', help='Input binary file')
parser.add_argument('-o', dest='output', help='Output C file name')
parser.add_argument('-e', dest='key', help='Input file is encrypted')
parser.add_argument('-l', dest='link_address', help='Link Address of the input file.')
return parser.parse_args()
def print_template():
array = bin_to_array(args.input)
# Define a set of names to be used in the output files.
formatmap = {'size' : len(array),
'linkaddress' : '0x{:08X}'.format(int(args.link_address, 0)),
'crc' : '0x{:08X}'.format(crc32(array)),
'filename' : args.output,
'macroname' : args.output.upper(),
'varname' : args.output.title().replace('_', ''),
'image' : print_array(array)
}
if args.key is None:
return c_template.substitute(formatmap)
else:
formatmap['key'] = int(args.key, 0)
return encrypted_template.substitute(formatmap)
#******************************************************************************
#
# Manipulating binary data.
#
#******************************************************************************
def bin_to_array(filename):
# Read in the whole file as a list of integers.
with open(filename, mode='rb') as f:
binarray = f.read()
return binarray
def print_array(binarray):
# S will be the string to accumulate the byte values in a C-friendly format
S = ' '
# Loop over binarray
for n in range(len(binarray)):
# Add the hex representation of each byte to S
S += '0x{:02X}'.format(binarray[n])
# Print in comma-separated lines, 8 bytes long each.
if n % 8 == 7:
S += ',\n '
else:
S += ', '
# The end of the previous loop will leave an extra comma and some amount of
# whitespace after the last byte value. This line will remove that.
S = S.rsplit(',', 1)[0]
return S
#******************************************************************************
#
# CRC functions.
#
#******************************************************************************
poly32 = 0x1EDC6F41
def crc32(L):
rem = 0
for b in L:
rem = rem ^ (b << 24)
for i in range(8):
if rem & 0x80000000:
rem = ((rem << 1) ^ poly32)
else:
rem = (rem << 1)
rem = rem & 0xFFFFFFFF
return rem
#******************************************************************************
#
# Templates
#
#******************************************************************************
c_template = string.Template('''
//*****************************************************************************
//
//! @file $filename.h
//!
//! @brief This is a generated file
//
//*****************************************************************************
#ifndef ${macroname}_H
#define ${macroname}_H
//*****************************************************************************
//
// Translation layer.
//
//*****************************************************************************
#define IMAGE_SIZE ${macroname}_SIZE
#define IMAGE_CRC ${macroname}_CRC
#define IMAGE_LINK_ADDRESS ${macroname}_LINK_ADDRESS
#define IMAGE_ARRAY g_pui8${varname}
//*****************************************************************************
//
// Image characteristics
//
//*****************************************************************************
#define ${macroname}_SIZE $size
#define ${macroname}_LINK_ADDRESS $linkaddress
#define ${macroname}_CRC $crc
//*****************************************************************************
//
// Boot Image
//
//*****************************************************************************
const uint8_t g_pui8${varname}[$size]=
{
$image
};
#endif // ${macroname}_H
'''.strip())
encrypted_template = string.Template('''
//*****************************************************************************
//
//! @file $filename.h
//!
//! @brief This is a generated file
//
//*****************************************************************************
#ifndef ${macroname}_H
#define ${macroname}_H
//*****************************************************************************
//
// Image characteristics
//
//*****************************************************************************
#define ${macroname}_SIZE $size
#define ${macroname}_LINK_ADDRESS $linkaddress
#define ${macroname}_CRC $crc
#define ${macroname}_KEY_NUMBER $key
//*****************************************************************************
//
// Encryption information
//
//*****************************************************************************
const uint8_t ${varname}IV[16] =
{
0x28, 0xAE, 0xD2, 0xA6, 0x2B, 0x7E, 0x15, 0x16,
0x09, 0xCF, 0x4F, 0x3C, 0xAB, 0xF7, 0x15, 0x88
};
//*****************************************************************************
//
// Boot Image
//
//*****************************************************************************
const uint8_t g_pui8${varname}[$size]=
{
$image
};
#endif // ${macroname}_H
'''.strip())
if __name__ == '__main__':
main()
@@ -0,0 +1,976 @@
//*****************************************************************************
//
//! @file apollo2_boot_demo.h
//!
//! @brief This is a generated file
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#ifndef APOLLO2_BOOT_DEMO_H
#define APOLLO2_BOOT_DEMO_H
//*****************************************************************************
//
// Translation layer.
//
//*****************************************************************************
#define IMAGE_SIZE APOLLO2_BOOT_DEMO_SIZE
#define IMAGE_CRC APOLLO2_BOOT_DEMO_CRC
#define IMAGE_LINK_ADDRESS APOLLO2_BOOT_DEMO_LINK_ADDRESS
#define IMAGE_ARRAY g_pui8Apollo2BootDemo
//*****************************************************************************
//
// Image characteristics
//
//*****************************************************************************
#define APOLLO2_BOOT_DEMO_SIZE 7178
#define APOLLO2_BOOT_DEMO_LINK_ADDRESS 0x00008000
#define APOLLO2_BOOT_DEMO_CRC 0x160B7B17
//*****************************************************************************
//
// Boot Image
//
//*****************************************************************************
const uint8_t g_pui8Apollo2BootDemo[7178] =
{
0x00, 0x10, 0x00, 0x10, 0x01, 0x9C, 0x00, 0x00,
0x09, 0x9C, 0x00, 0x00, 0xDD, 0x98, 0x00, 0x00,
0xDD, 0x98, 0x00, 0x00, 0xDD, 0x98, 0x00, 0x00,
0xDD, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0xA7, 0x93, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0x07, 0x9C, 0x00, 0x00, 0x07, 0x9C, 0x00, 0x00,
0xDF, 0xF8, 0xA0, 0x18, 0x08, 0x60, 0x70, 0x47,
0x2D, 0xE9, 0xF0, 0x0F, 0x04, 0x00, 0x0D, 0x00,
0x00, 0x2D, 0x4D, 0xD0, 0x20, 0x00, 0x29, 0x00,
0x49, 0x08, 0x5F, 0xEA, 0x30, 0x00, 0x80, 0x46,
0x89, 0x46, 0x20, 0x00, 0x29, 0x00, 0x80, 0x08,
0x40, 0xEA, 0x81, 0x70, 0x89, 0x08, 0x18, 0xEB,
0x00, 0x00, 0x59, 0xEB, 0x01, 0x01, 0x06, 0x00,
0x0F, 0x00, 0x30, 0x00, 0x39, 0x00, 0x00, 0x09,
0x40, 0xEA, 0x01, 0x70, 0x09, 0x09, 0x36, 0x18,
0x4F, 0x41, 0x30, 0x00, 0x39, 0x00, 0x00, 0x0A,
0x40, 0xEA, 0x01, 0x60, 0x09, 0x0A, 0x36, 0x18,
0x4F, 0x41, 0x30, 0x00, 0x39, 0x00, 0x00, 0x0C,
0x40, 0xEA, 0x01, 0x40, 0x09, 0x0C, 0x36, 0x18,
0x4F, 0x41, 0x30, 0x00, 0x39, 0x00, 0x08, 0x00,
0x00, 0x21, 0x36, 0x18, 0x4F, 0x41, 0xF6, 0x08,
0x46, 0xEA, 0x47, 0x76, 0xFF, 0x08, 0x0A, 0x20,
0x00, 0x21, 0xA0, 0xFB, 0x06, 0x89, 0x00, 0xFB,
0x07, 0x99, 0x01, 0xFB, 0x06, 0x99, 0xB4, 0xEB,
0x08, 0x00, 0x75, 0xEB, 0x09, 0x01, 0x82, 0x46,
0x8B, 0x46, 0x1A, 0xF1, 0x06, 0x00, 0x5B, 0xF1,
0x00, 0x01, 0x00, 0x09, 0x40, 0xEA, 0x01, 0x70,
0x09, 0x09, 0x30, 0x18, 0x79, 0x41, 0x15, 0xE0,
0xA4, 0x46, 0x60, 0x46, 0x80, 0x08, 0x10, 0xEB,
0x5C, 0x00, 0x02, 0x00, 0x12, 0xEB, 0x12, 0x12,
0x12, 0xEB, 0x12, 0x22, 0x12, 0xEB, 0x12, 0x42,
0xD2, 0x08, 0x0A, 0x20, 0x00, 0xFB, 0x12, 0xC0,
0x03, 0x00, 0x9B, 0x1D, 0x12, 0xEB, 0x13, 0x12,
0x10, 0x00, 0x00, 0x21, 0xBD, 0xE8, 0xF0, 0x0F,
0x70, 0x47, 0x10, 0xB5, 0x02, 0x00, 0x0B, 0x00,
0x00, 0x20, 0x00, 0x21, 0x8B, 0x42, 0x01, 0xD1,
0x82, 0x42, 0x01, 0xD0, 0x00, 0x24, 0x00, 0xE0,
0x01, 0x24, 0x00, 0x20, 0x00, 0x21, 0x8B, 0x42,
0x01, 0xD1, 0x82, 0x42, 0x07, 0xD0, 0x10, 0x00,
0x19, 0x00, 0xFF, 0xF7, 0x7D, 0xFF, 0x02, 0x00,
0x0B, 0x00, 0x64, 0x1C, 0xF1, 0xE7, 0x20, 0x00,
0x10, 0xBD, 0x80, 0xB5, 0x00, 0x22, 0x00, 0x23,
0x99, 0x42, 0x05, 0xDC, 0x01, 0xDB, 0x90, 0x42,
0x02, 0xD2, 0x40, 0x42, 0x71, 0xEB, 0x41, 0x01,
0xFF, 0xF7, 0xD7, 0xFF, 0x02, 0xBD, 0x30, 0xB4,
0x02, 0x00, 0x0B, 0x00, 0x00, 0x20, 0x00, 0x21,
0x8B, 0x42, 0x01, 0xD1, 0x82, 0x42, 0x01, 0xD0,
0x00, 0x20, 0x00, 0xE0, 0x01, 0x20, 0x00, 0x24,
0x00, 0x25, 0xAB, 0x42, 0x01, 0xD1, 0xA2, 0x42,
0x05, 0xD0, 0x12, 0x09, 0x42, 0xEA, 0x03, 0x72,
0x1B, 0x09, 0x40, 0x1C, 0xF3, 0xE7, 0x30, 0xBC,
0x70, 0x47, 0x30, 0xB4, 0x03, 0x00, 0x00, 0x22,
0x00, 0x20, 0x00, 0x25, 0x1C, 0x78, 0x2D, 0x2C,
0x03, 0xD1, 0x01, 0x24, 0x22, 0x00, 0x5B, 0x1C,
0x6D, 0x1C, 0x1C, 0x78, 0x30, 0x2C, 0x0A, 0xDB,
0x1C, 0x78, 0x3A, 0x2C, 0x07, 0xDA, 0x6D, 0x1C,
0x0A, 0x24, 0x60, 0x43, 0x1C, 0x78, 0x30, 0x3C,
0x20, 0x18, 0x5B, 0x1C, 0xF1, 0xE7, 0x00, 0x29,
0x00, 0xD0, 0x0D, 0x60, 0xD2, 0xB2, 0x00, 0x2A,
0x01, 0xD0, 0x40, 0x42, 0xFF, 0xE7, 0x30, 0xBC,
0x70, 0x47, 0x2D, 0xE9, 0xF0, 0x4F, 0x87, 0xB0,
0x06, 0x00, 0x0F, 0x00, 0x90, 0x46, 0x5F, 0xF0,
0x00, 0x09, 0x5F, 0xF0, 0x00, 0x0A, 0x30, 0x00,
0x39, 0x00, 0xFF, 0xF7, 0x1D, 0xFF, 0x04, 0x00,
0x0D, 0x00, 0x0A, 0x20, 0x00, 0x21, 0xA0, 0xFB,
0x04, 0x23, 0x00, 0xFB, 0x05, 0x33, 0x01, 0xFB,
0x04, 0x33, 0xB0, 0x1A, 0x77, 0xEB, 0x03, 0x01,
0x83, 0x46, 0x1B, 0xF1, 0x30, 0x00, 0x69, 0x46,
0x01, 0xF8, 0x09, 0x00, 0x19, 0xF1, 0x01, 0x09,
0x26, 0x00, 0x2F, 0x00, 0x00, 0x20, 0x00, 0x21,
0x8F, 0x42, 0xE0, 0xD1, 0x86, 0x42, 0xDE, 0xD1,
0xCA, 0x46, 0xB8, 0xF1, 0x00, 0x0F, 0x0F, 0xD0,
0x48, 0x46, 0xB0, 0xF1, 0x01, 0x09, 0x00, 0x28,
0x07, 0xD0, 0x68, 0x46, 0x10, 0xF8, 0x09, 0x00,
0x88, 0xF8, 0x00, 0x00, 0x18, 0xF1, 0x01, 0x08,
0xF2, 0xE7, 0x00, 0x20, 0x88, 0xF8, 0x00, 0x00,
0x50, 0x46, 0x07, 0xB0, 0xBD, 0xE8, 0xF0, 0x8F,
0xF0, 0xB5, 0x85, 0xB0, 0x04, 0x00, 0x0D, 0x00,
0x5F, 0xF0, 0x00, 0x0C, 0x00, 0x26, 0x00, 0x27,
0xBD, 0x42, 0x07, 0xD1, 0xB4, 0x42, 0x05, 0xD1,
0x30, 0x20, 0x6E, 0x46, 0x06, 0xF8, 0x0C, 0x00,
0x1C, 0xF1, 0x01, 0x0C, 0x00, 0x26, 0x00, 0x27,
0xBD, 0x42, 0x01, 0xD1, 0xB4, 0x42, 0x1C, 0xD0,
0x20, 0x00, 0x10, 0xF0, 0x0F, 0x00, 0x86, 0x46,
0x5F, 0xFA, 0x8E, 0xFE, 0xBE, 0xF1, 0x0A, 0x0F,
0x07, 0xDB, 0xDB, 0xB2, 0x00, 0x2B, 0x01, 0xD0,
0x27, 0x20, 0x00, 0xE0, 0x07, 0x20, 0x10, 0xEB,
0x0E, 0x0E, 0x1E, 0xF1, 0x30, 0x00, 0x6E, 0x46,
0x06, 0xF8, 0x0C, 0x00, 0x1C, 0xF1, 0x01, 0x0C,
0x24, 0x09, 0x44, 0xEA, 0x05, 0x74, 0x2D, 0x09,
0xDC, 0xE7, 0x61, 0x46, 0x00, 0x2A, 0x0C, 0xD0,
0x60, 0x46, 0xB0, 0xF1, 0x01, 0x0C, 0x00, 0x28,
0x05, 0xD0, 0x68, 0x46, 0x10, 0xF8, 0x0C, 0x00,
0x10, 0x70, 0x52, 0x1C, 0xF4, 0xE7, 0x00, 0x20,
0x10, 0x70, 0x08, 0x00, 0x05, 0xB0, 0xF0, 0xBD,
0x02, 0x00, 0x00, 0x20, 0x00, 0x2A, 0x06, 0xD0,
0x11, 0x00, 0x4A, 0x1C, 0x09, 0x78, 0x00, 0x29,
0x01, 0xD0, 0x40, 0x1C, 0xF8, 0xE7, 0x70, 0x47,
0x10, 0xB4, 0x04, 0x00, 0x00, 0x20, 0x01, 0x2A,
0x09, 0xDB, 0x13, 0x00, 0x5A, 0x1E, 0x00, 0x2B,
0x05, 0xD0, 0x00, 0x2C, 0x01, 0xD0, 0x21, 0x70,
0x64, 0x1C, 0x40, 0x1C, 0xF5, 0xE7, 0x10, 0xBC,
0x70, 0x47, 0x2D, 0xE9, 0xF8, 0x4F, 0x2D, 0xED,
0x02, 0x8B, 0x82, 0xB0, 0xB0, 0xEE, 0x40, 0x8A,
0x06, 0x00, 0x0F, 0x00, 0x30, 0x68, 0x83, 0x46,
0xBB, 0xF1, 0x04, 0x0F, 0x02, 0xDA, 0x7F, 0xF0,
0x02, 0x00, 0x9A, 0xE0, 0xB5, 0xEE, 0x40, 0x8A,
0xF1, 0xEE, 0x10, 0xFA, 0x04, 0xD1, 0xDF, 0xF8,
0x7C, 0x05, 0x30, 0x60, 0x03, 0x20, 0x90, 0xE0,
0xB1, 0x46, 0x8D, 0xED, 0x00, 0x8A, 0x00, 0x98,
0xC0, 0xF3, 0xC7, 0x50, 0x7F, 0x38, 0x80, 0x46,
0x00, 0x98, 0x20, 0xF0, 0x7F, 0x40, 0x50, 0xF4,
0x00, 0x00, 0x82, 0x46, 0x00, 0x20, 0x05, 0x00,
0x00, 0x20, 0x04, 0x00, 0xB8, 0xF1, 0x1F, 0x0F,
0x02, 0xDB, 0x7F, 0xF0, 0x01, 0x00, 0x78, 0xE0,
0x18, 0xF1, 0x17, 0x0F, 0x02, 0xDA, 0x5F, 0xF0,
0xFF, 0x30, 0x72, 0xE0, 0xB8, 0xF1, 0x17, 0x0F,
0x05, 0xDB, 0x40, 0x46, 0x17, 0x38, 0x1A, 0xFA,
0x00, 0xF0, 0x04, 0x00, 0x16, 0xE0, 0xB8, 0xF1,
0x00, 0x0F, 0x0C, 0xD4, 0xD8, 0xF1, 0x17, 0x00,
0x51, 0x46, 0x01, 0x41, 0x0C, 0x00, 0x18, 0xF1,
0x01, 0x00, 0x1A, 0xFA, 0x00, 0xF0, 0x20, 0xF0,
0x7F, 0x40, 0x05, 0x00, 0x06, 0xE0, 0x2A, 0xF0,
0x7F, 0x40, 0x18, 0xF1, 0x01, 0x01, 0x49, 0x42,
0x08, 0x41, 0x05, 0x00, 0x00, 0x98, 0x00, 0x28,
0x02, 0xD5, 0x2D, 0x20, 0x30, 0x70, 0x76, 0x1C,
0x00, 0x2C, 0x03, 0xD1, 0x30, 0x20, 0x30, 0x70,
0x76, 0x1C, 0x14, 0xE0, 0x01, 0x2C, 0x05, 0xDB,
0x32, 0x00, 0x20, 0x00, 0xE1, 0x17, 0xFF, 0xF7,
0xEC, 0xFE, 0x07, 0xE0, 0x2D, 0x20, 0x30, 0x70,
0x76, 0x1C, 0x32, 0x00, 0x60, 0x42, 0xC1, 0x17,
0xFF, 0xF7, 0xE3, 0xFE, 0x30, 0x78, 0x00, 0x28,
0x01, 0xD0, 0x76, 0x1C, 0xFA, 0xE7, 0x2E, 0x20,
0x30, 0x70, 0x76, 0x1C, 0x00, 0x2D, 0x03, 0xD1,
0x30, 0x20, 0x30, 0x70, 0x76, 0x1C, 0x23, 0xE0,
0xB6, 0xEB, 0x09, 0x00, 0xBB, 0xEB, 0x00, 0x00,
0x40, 0x1E, 0x01, 0x00, 0x8F, 0x42, 0x01, 0xDA,
0x39, 0x00, 0xFF, 0xE7, 0x00, 0x20, 0x02, 0x00,
0x8A, 0x42, 0x0A, 0xDA, 0x0A, 0x20, 0x45, 0x43,
0x28, 0x00, 0x00, 0x16, 0x30, 0x30, 0x30, 0x70,
0x76, 0x1C, 0x25, 0xF0, 0x7F, 0x45, 0x52, 0x1C,
0xF2, 0xE7, 0x76, 0x1E, 0x30, 0x78, 0x30, 0x28,
0x05, 0xD1, 0x16, 0xF8, 0x01, 0x0C, 0x2E, 0x28,
0x01, 0xD0, 0x76, 0x1E, 0xF6, 0xE7, 0x76, 0x1C,
0x00, 0x20, 0x30, 0x70, 0xB6, 0xEB, 0x09, 0x06,
0x30, 0x00, 0x02, 0xB0, 0xBD, 0xEC, 0x02, 0x8B,
0xBD, 0xE8, 0xF2, 0x8F, 0x2D, 0xE9, 0xF8, 0x4F,
0x2D, 0xED, 0x02, 0x8B, 0x88, 0xB0, 0x04, 0x00,
0x88, 0x46, 0x17, 0x00, 0x00, 0x26, 0x00, 0x20,
0x02, 0x90, 0x98, 0xF8, 0x00, 0x00, 0x00, 0x28,
0x00, 0xF0, 0xED, 0x81, 0x06, 0x20, 0x05, 0x90,
0x98, 0xF8, 0x00, 0x00, 0x25, 0x28, 0x16, 0xD0,
0x00, 0x2C, 0x10, 0xD0, 0x98, 0xF8, 0x00, 0x00,
0x0A, 0x28, 0x08, 0xD1, 0xDF, 0xF8, 0x08, 0x04,
0x00, 0x78, 0x00, 0x28, 0x03, 0xD0, 0x0D, 0x20,
0x20, 0x70, 0x64, 0x1C, 0x76, 0x1C, 0x98, 0xF8,
0x00, 0x00, 0x20, 0x70, 0x64, 0x1C, 0x18, 0xF1,
0x01, 0x08, 0x76, 0x1C, 0xDD, 0xE7, 0x18, 0xF1,
0x01, 0x08, 0x00, 0x20, 0x8D, 0xF8, 0x01, 0x00,
0x9D, 0xF8, 0x01, 0x00, 0x8D, 0xF8, 0x03, 0x00,
0x20, 0x20, 0x8D, 0xF8, 0x00, 0x00, 0x98, 0xF8,
0x00, 0x00, 0x30, 0x28, 0x04, 0xD1, 0x30, 0x20,
0x8D, 0xF8, 0x00, 0x00, 0x18, 0xF1, 0x01, 0x08,
0x04, 0xA9, 0x40, 0x46, 0xFF, 0xF7, 0x3D, 0xFE,
0x05, 0x00, 0x04, 0x98, 0x80, 0x44, 0x98, 0xF8,
0x00, 0x00, 0x73, 0x28, 0x02, 0xD0, 0x00, 0x2D,
0x00, 0xD5, 0x6D, 0x42, 0x98, 0xF8, 0x00, 0x00,
0x2E, 0x28, 0x08, 0xD1, 0x18, 0xF1, 0x01, 0x08,
0x04, 0xA9, 0x40, 0x46, 0xFF, 0xF7, 0x29, 0xFE,
0x05, 0x90, 0x04, 0x98, 0x80, 0x44, 0x98, 0xF8,
0x00, 0x00, 0x6C, 0x28, 0x0A, 0xD1, 0x18, 0xF1,
0x01, 0x08, 0x98, 0xF8, 0x00, 0x00, 0x6C, 0x28,
0x04, 0xD1, 0x18, 0xF1, 0x01, 0x08, 0x01, 0x20,
0x8D, 0xF8, 0x01, 0x00, 0x98, 0xF8, 0x00, 0x00,
0x46, 0x28, 0x00, 0xF0, 0x53, 0x81, 0x58, 0x28,
0x67, 0xD0, 0x63, 0x28, 0x10, 0xD0, 0x64, 0x28,
0x00, 0xF0, 0xD1, 0x80, 0x66, 0x28, 0x00, 0xF0,
0x49, 0x81, 0x69, 0x28, 0x00, 0xF0, 0xCB, 0x80,
0x73, 0x28, 0x11, 0xD0, 0x75, 0x28, 0x00, 0xF0,
0x90, 0x80, 0x78, 0x28, 0x52, 0xD0, 0x6C, 0xE1,
0x38, 0x68, 0x3F, 0x1D, 0x8D, 0xF8, 0x04, 0x00,
0x00, 0x2C, 0x03, 0xD0, 0x9D, 0xF8, 0x04, 0x00,
0x20, 0x70, 0x64, 0x1C, 0x76, 0x1C, 0x67, 0xE1,
0x38, 0x68, 0x3F, 0x1D, 0x03, 0x90, 0x03, 0x98,
0xFF, 0xF7, 0x9A, 0xFE, 0x02, 0x90, 0x01, 0x2D,
0x14, 0xDB, 0x02, 0x98, 0xA8, 0x42, 0x11, 0xD2,
0x02, 0x98, 0x2D, 0x1A, 0x2A, 0x00, 0x9D, 0xF8,
0x00, 0x10, 0x20, 0x00, 0xFF, 0xF7, 0x98, 0xFE,
0x05, 0x00, 0x00, 0x2C, 0x01, 0xD0, 0x28, 0x00,
0x00, 0xE0, 0x00, 0x20, 0x04, 0x44, 0xAE, 0x19,
0x00, 0x20, 0x05, 0x00, 0x03, 0x98, 0x00, 0x78,
0x00, 0x28, 0x0A, 0xD0, 0x00, 0x2C, 0x03, 0xD0,
0x03, 0x98, 0x00, 0x78, 0x20, 0x70, 0x64, 0x1C,
0x03, 0x98, 0x40, 0x1C, 0x03, 0x90, 0x76, 0x1C,
0xF0, 0xE7, 0x00, 0x2D, 0x15, 0xD0, 0x6D, 0x42,
0x02, 0x98, 0xA8, 0x42, 0x11, 0xD2, 0x02, 0x98,
0x2D, 0x1A, 0x2A, 0x00, 0x9D, 0xF8, 0x00, 0x10,
0x20, 0x00, 0xFF, 0xF7, 0x71, 0xFE, 0x05, 0x00,
0x00, 0x2C, 0x01, 0xD0, 0x28, 0x00, 0x00, 0xE0,
0x00, 0x20, 0x04, 0x44, 0xAE, 0x19, 0x00, 0x20,
0x05, 0x00, 0x21, 0xE1, 0x01, 0x20, 0x8D, 0xF8,
0x03, 0x00, 0x9D, 0xF8, 0x01, 0x00, 0x00, 0x28,
0x08, 0xD0, 0xFF, 0x1D, 0x37, 0xF0, 0x07, 0x07,
0xD7, 0xE9, 0x00, 0x01, 0x08, 0x37, 0x82, 0x46,
0x8B, 0x46, 0x04, 0xE0, 0x38, 0x68, 0x3F, 0x1D,
0x00, 0x21, 0x82, 0x46, 0x8B, 0x46, 0x00, 0x2D,
0x15, 0xD0, 0x50, 0x46, 0x59, 0x46, 0xFF, 0xF7,
0x76, 0xFD, 0x28, 0x1A, 0x05, 0x00, 0x2A, 0x00,
0x9D, 0xF8, 0x00, 0x10, 0x20, 0x00, 0xFF, 0xF7,
0x43, 0xFE, 0x05, 0x00, 0x00, 0x2C, 0x01, 0xD0,
0x28, 0x00, 0x00, 0xE0, 0x00, 0x20, 0x04, 0x44,
0xAE, 0x19, 0x00, 0x20, 0x05, 0x00, 0x9D, 0xF8,
0x03, 0x30, 0x22, 0x00, 0x50, 0x46, 0x59, 0x46,
0xFF, 0xF7, 0xDE, 0xFD, 0x81, 0x46, 0x00, 0x2C,
0x00, 0xD0, 0x4C, 0x44, 0x19, 0xEB, 0x06, 0x06,
0xE6, 0xE0, 0x9D, 0xF8, 0x01, 0x00, 0x00, 0x28,
0x08, 0xD0, 0xFF, 0x1D, 0x37, 0xF0, 0x07, 0x07,
0xD7, 0xE9, 0x00, 0x01, 0x08, 0x37, 0x82, 0x46,
0x8B, 0x46, 0x04, 0xE0, 0x38, 0x68, 0x3F, 0x1D,
0x00, 0x21, 0x82, 0x46, 0x8B, 0x46, 0x00, 0x2D,
0x15, 0xD0, 0x50, 0x46, 0x59, 0x46, 0xFF, 0xF7,
0x14, 0xFD, 0x28, 0x1A, 0x05, 0x00, 0x2A, 0x00,
0x9D, 0xF8, 0x00, 0x10, 0x20, 0x00, 0xFF, 0xF7,
0x0B, 0xFE, 0x05, 0x00, 0x00, 0x2C, 0x01, 0xD0,
0x28, 0x00, 0x00, 0xE0, 0x00, 0x20, 0x04, 0x44,
0xAE, 0x19, 0x00, 0x20, 0x05, 0x00, 0x22, 0x00,
0x50, 0x46, 0x59, 0x46, 0xFF, 0xF7, 0x65, 0xFD,
0x81, 0x46, 0x00, 0x2C, 0x00, 0xD0, 0x4C, 0x44,
0x19, 0xEB, 0x06, 0x06, 0xB0, 0xE0, 0x9D, 0xF8,
0x01, 0x00, 0x00, 0x28, 0x08, 0xD0, 0xFF, 0x1D,
0x37, 0xF0, 0x07, 0x07, 0xD7, 0xE9, 0x00, 0x01,
0x08, 0x37, 0xCD, 0xE9, 0x06, 0x01, 0x04, 0xE0,
0x38, 0x68, 0x3F, 0x1D, 0xC1, 0x17, 0xCD, 0xE9,
0x06, 0x01, 0xDD, 0xE9, 0x06, 0x01, 0x02, 0x00,
0x0B, 0x00, 0x00, 0x20, 0x00, 0x21, 0x8B, 0x42,
0x0D, 0xDC, 0x01, 0xDB, 0x82, 0x42, 0x0A, 0xD2,
0xDD, 0xE9, 0x06, 0x01, 0x40, 0x42, 0x71, 0xEB,
0x41, 0x01, 0x82, 0x46, 0x8B, 0x46, 0x01, 0x20,
0x8D, 0xF8, 0x02, 0x00, 0x06, 0xE0, 0xDD, 0xE9,
0x06, 0x01, 0x82, 0x46, 0x8B, 0x46, 0x00, 0x20,
0x8D, 0xF8, 0x02, 0x00, 0x00, 0x2D, 0x33, 0xD0,
0x50, 0x46, 0x59, 0x46, 0xFF, 0xF7, 0xDD, 0xFC,
0x28, 0x1A, 0x05, 0x00, 0x9D, 0xF8, 0x02, 0x00,
0x00, 0x28, 0x0A, 0xD0, 0x6D, 0x1E, 0x9D, 0xF8,
0x00, 0x00, 0x30, 0x28, 0x05, 0xD1, 0x00, 0x2C,
0x02, 0xD0, 0x2D, 0x20, 0x20, 0x70, 0x64, 0x1C,
0x76, 0x1C, 0x2A, 0x00, 0x9D, 0xF8, 0x00, 0x10,
0x20, 0x00, 0xFF, 0xF7, 0xA9, 0xFD, 0x05, 0x00,
0x00, 0x2C, 0x01, 0xD0, 0x28, 0x00, 0x00, 0xE0,
0x00, 0x20, 0x04, 0x44, 0xAE, 0x19, 0x00, 0x20,
0x05, 0x00, 0x9D, 0xF8, 0x02, 0x00, 0x00, 0x28,
0x14, 0xD0, 0x9D, 0xF8, 0x00, 0x00, 0x20, 0x28,
0x10, 0xD1, 0x00, 0x2C, 0x02, 0xD0, 0x2D, 0x20,
0x20, 0x70, 0x64, 0x1C, 0x76, 0x1C, 0x09, 0xE0,
0x9D, 0xF8, 0x02, 0x00, 0x00, 0x28, 0x05, 0xD0,
0x00, 0x2C, 0x02, 0xD0, 0x2D, 0x20, 0x20, 0x70,
0x64, 0x1C, 0x76, 0x1C, 0x22, 0x00, 0x50, 0x46,
0x59, 0x46, 0xFF, 0xF7, 0xEA, 0xFC, 0x81, 0x46,
0x00, 0x2C, 0x00, 0xD0, 0x4C, 0x44, 0x19, 0xEB,
0x06, 0x06, 0x35, 0xE0, 0x00, 0x2C, 0x2B, 0xD0,
0xFF, 0x1D, 0x37, 0xF0, 0x07, 0x07, 0x97, 0xED,
0x00, 0x0B, 0x08, 0x37, 0x51, 0xEC, 0x10, 0x0B,
0x00, 0xF0, 0x5E, 0xF8, 0x08, 0xEE, 0x10, 0x0A,
0x14, 0x20, 0x20, 0x60, 0x05, 0x99, 0x20, 0x00,
0xB0, 0xEE, 0x48, 0x0A, 0xFF, 0xF7, 0x75, 0xFD,
0x81, 0x46, 0xB9, 0xF1, 0x00, 0x0F, 0x10, 0xD5,
0x19, 0xF1, 0x01, 0x0F, 0x02, 0xD1, 0x21, 0x49,
0x08, 0x00, 0x07, 0xE0, 0x19, 0xF1, 0x02, 0x0F,
0x02, 0xD1, 0x1F, 0x49, 0x08, 0x00, 0x01, 0xE0,
0x1E, 0x49, 0x08, 0x00, 0x20, 0x60, 0x03, 0x21,
0x89, 0x46, 0x19, 0xEB, 0x06, 0x06, 0x4C, 0x44,
0x06, 0xE0, 0x00, 0x2C, 0x03, 0xD0, 0x98, 0xF8,
0x00, 0x00, 0x20, 0x70, 0x64, 0x1C, 0x76, 0x1C,
0x18, 0xF1, 0x01, 0x08, 0x0D, 0xE6, 0x00, 0x2C,
0x01, 0xD0, 0x00, 0x20, 0x20, 0x70, 0x30, 0x00,
0x08, 0xB0, 0xBD, 0xEC, 0x02, 0x8B, 0xBD, 0xE8,
0xF2, 0x8F, 0x0E, 0xB4, 0x78, 0xB5, 0x04, 0x00,
0x05, 0xA8, 0x06, 0x00, 0x32, 0x00, 0x21, 0x00,
0x0D, 0x48, 0xFF, 0xF7, 0xEF, 0xFD, 0x05, 0x00,
0x0B, 0x48, 0x06, 0x49, 0x09, 0x68, 0x88, 0x47,
0x28, 0x00, 0x72, 0xBC, 0x5D, 0xF8, 0x10, 0xFB,
0x80, 0xB5, 0x08, 0x48, 0xFF, 0xF7, 0xE9, 0xFF,
0x01, 0xBD, 0x00, 0x00, 0x9C, 0x11, 0x00, 0x10,
0xA8, 0x11, 0x00, 0x10, 0x30, 0x2E, 0x30, 0x00,
0x23, 0x2E, 0x23, 0x00, 0x3F, 0x2E, 0x3F, 0x00,
0x84, 0x10, 0x00, 0x10, 0xD4, 0x9B, 0x00, 0x00,
0x01, 0xF0, 0x00, 0x42, 0x8B, 0x1A, 0xA3, 0xF1,
0x60, 0x51, 0xB1, 0xF5, 0x80, 0x1F, 0x0A, 0xDB,
0xB1, 0xF1, 0x7F, 0x6F, 0x1F, 0xD2, 0x42, 0xEA,
0xC1, 0x02, 0xC1, 0x00, 0x71, 0xF1, 0x00, 0x41,
0x42, 0xEB, 0x50, 0x70, 0x70, 0x47, 0x0B, 0x15,
0xC3, 0xF1, 0x09, 0x03, 0x21, 0x2B, 0x10, 0xD2,
0x89, 0x02, 0x41, 0xEA, 0x90, 0x51, 0x80, 0x02,
0x01, 0x28, 0x49, 0x41, 0x41, 0xF0, 0x00, 0x41,
0x21, 0xFA, 0x03, 0xF0, 0xC3, 0xF1, 0x20, 0x03,
0x99, 0x40, 0x71, 0xF1, 0x00, 0x41, 0x50, 0x41,
0x70, 0x47, 0x10, 0x00, 0x70, 0x47, 0x6F, 0xF0,
0x00, 0x00, 0x13, 0xEB, 0x10, 0x3F, 0x5C, 0xBF,
0x00, 0x0E, 0x42, 0xEA, 0xC0, 0x50, 0x70, 0x47,
0x18, 0xB4, 0x01, 0x79, 0x89, 0x07, 0x40, 0xF1,
0x8D, 0x80, 0x01, 0x68, 0x32, 0x29, 0x5D, 0xD2,
0xEF, 0xF3, 0x10, 0x81, 0x00, 0x91, 0x72, 0xB6,
0x73, 0x21, 0xDF, 0xF8, 0x14, 0x23, 0x11, 0x60,
0x02, 0x22, 0x01, 0x68, 0x89, 0x00, 0x11, 0xF0,
0x1C, 0x01, 0x8A, 0x40, 0x03, 0x68, 0x5B, 0x08,
0x13, 0xF0, 0x7C, 0x03, 0xDF, 0xF8, 0xFC, 0x12,
0xCB, 0x18, 0x19, 0x68, 0x07, 0x23, 0x04, 0x68,
0xA4, 0x00, 0x14, 0xF0, 0x1C, 0x04, 0xA3, 0x40,
0x99, 0x43, 0x0A, 0x43, 0x03, 0x68, 0x5B, 0x08,
0x13, 0xF0, 0x7C, 0x03, 0xDF, 0xF8, 0xDC, 0x12,
0xCB, 0x18, 0x1A, 0x60, 0x18, 0x22, 0x01, 0x68,
0xC9, 0x00, 0x11, 0xF0, 0x18, 0x01, 0x8A, 0x40,
0x03, 0x78, 0x13, 0xF0, 0xFC, 0x03, 0xDF, 0xF8,
0xC8, 0x12, 0xCB, 0x18, 0x19, 0x68, 0xFF, 0x23,
0x04, 0x68, 0xE4, 0x00, 0x14, 0xF0, 0x18, 0x04,
0xA3, 0x40, 0x99, 0x43, 0x0A, 0x43, 0x03, 0x78,
0x13, 0xF0, 0xFC, 0x03, 0xDF, 0xF8, 0xA8, 0x12,
0xCB, 0x18, 0x1A, 0x60, 0x02, 0x78, 0x12, 0xF0,
0xFC, 0x02, 0xDF, 0xF8, 0xA0, 0x12, 0x8A, 0x18,
0x12, 0x68, 0xFF, 0x21, 0x03, 0x68, 0xDB, 0x00,
0x13, 0xF0, 0x18, 0x03, 0x99, 0x40, 0x8A, 0x43,
0x03, 0x78, 0x13, 0xF0, 0xFC, 0x03, 0xDF, 0xF8,
0x84, 0x12, 0xCB, 0x18, 0x1A, 0x60, 0x00, 0x21,
0xDF, 0xF8, 0x6C, 0x22, 0x11, 0x60, 0x00, 0x99,
0x81, 0xF3, 0x10, 0x88, 0x01, 0x22, 0x01, 0x78,
0x11, 0xF0, 0x1F, 0x01, 0x8A, 0x40, 0x03, 0x68,
0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03, 0xDF, 0xF8,
0x60, 0x12, 0xCB, 0x18, 0x1A, 0x60, 0x01, 0x79,
0xC9, 0x07, 0x0D, 0xD5, 0x01, 0x22, 0x01, 0x78,
0x11, 0xF0, 0x1F, 0x01, 0x8A, 0x40, 0x03, 0x68,
0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03, 0xDF, 0xF8,
0x44, 0x12, 0xCB, 0x18, 0x1A, 0x60, 0x8E, 0xE0,
0x01, 0x22, 0x01, 0x78, 0x11, 0xF0, 0x1F, 0x01,
0x8A, 0x40, 0x03, 0x68, 0xDB, 0x08, 0x13, 0xF0,
0x04, 0x03, 0xDF, 0xF8, 0x2C, 0x12, 0xCB, 0x18,
0x1A, 0x60, 0x80, 0xE0, 0x01, 0x68, 0x32, 0x29,
0x55, 0xD2, 0xEF, 0xF3, 0x10, 0x81, 0x00, 0x91,
0x72, 0xB6, 0x73, 0x21, 0x7E, 0x4A, 0x11, 0x60,
0x06, 0x22, 0x01, 0x68, 0x89, 0x00, 0x11, 0xF0,
0x1C, 0x01, 0x8A, 0x40, 0x03, 0x68, 0x5B, 0x08,
0x13, 0xF0, 0x7C, 0x03, 0x79, 0x49, 0xCB, 0x18,
0x19, 0x68, 0x07, 0x23, 0x04, 0x68, 0xA4, 0x00,
0x14, 0xF0, 0x1C, 0x04, 0xA3, 0x40, 0x99, 0x43,
0x0A, 0x43, 0x03, 0x68, 0x5B, 0x08, 0x13, 0xF0,
0x7C, 0x03, 0x72, 0x49, 0xCB, 0x18, 0x1A, 0x60,
0x18, 0x22, 0x01, 0x68, 0xC9, 0x00, 0x11, 0xF0,
0x18, 0x01, 0x8A, 0x40, 0x03, 0x78, 0x13, 0xF0,
0xFC, 0x03, 0x6D, 0x49, 0xCB, 0x18, 0x19, 0x68,
0xFF, 0x23, 0x04, 0x68, 0xE4, 0x00, 0x14, 0xF0,
0x18, 0x04, 0xA3, 0x40, 0x99, 0x43, 0x0A, 0x43,
0x03, 0x78, 0x13, 0xF0, 0xFC, 0x03, 0x66, 0x49,
0xCB, 0x18, 0x1A, 0x60, 0x02, 0x78, 0x12, 0xF0,
0xFC, 0x02, 0x64, 0x49, 0x8A, 0x18, 0x12, 0x68,
0xFF, 0x21, 0x03, 0x68, 0xDB, 0x00, 0x13, 0xF0,
0x18, 0x03, 0x99, 0x40, 0x8A, 0x43, 0x03, 0x78,
0x13, 0xF0, 0xFC, 0x03, 0x5D, 0x49, 0xCB, 0x18,
0x1A, 0x60, 0x00, 0x21, 0x58, 0x4A, 0x11, 0x60,
0x00, 0x99, 0x81, 0xF3, 0x10, 0x88, 0x01, 0x22,
0x01, 0x78, 0x11, 0xF0, 0x1F, 0x01, 0x8A, 0x40,
0x03, 0x68, 0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03,
0x58, 0x49, 0xCB, 0x18, 0x1A, 0x60, 0x01, 0x79,
0xC9, 0x07, 0x0C, 0xD5, 0x01, 0x22, 0x01, 0x78,
0x11, 0xF0, 0x1F, 0x01, 0x8A, 0x40, 0x03, 0x68,
0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03, 0x4F, 0x49,
0xCB, 0x18, 0x1A, 0x60, 0x0B, 0xE0, 0x01, 0x22,
0x01, 0x78, 0x11, 0xF0, 0x1F, 0x01, 0x8A, 0x40,
0x03, 0x68, 0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03,
0x49, 0x49, 0xCB, 0x18, 0x1A, 0x60, 0x11, 0xBC,
0x70, 0x47, 0x00, 0x00, 0x70, 0xB5, 0x04, 0x00,
0x0D, 0x00, 0x00, 0x20, 0x06, 0x00, 0xAE, 0x42,
0x05, 0xD2, 0x04, 0xEB, 0xC6, 0x00, 0xFF, 0xF7,
0xDF, 0xFE, 0x76, 0x1C, 0xF7, 0xE7, 0x70, 0xBD,
0x10, 0xB4, 0x00, 0xEB, 0xC1, 0x02, 0x12, 0x79,
0x92, 0x07, 0x22, 0xD5, 0x00, 0xEB, 0xC1, 0x02,
0x12, 0x79, 0xD2, 0x07, 0x0E, 0xD5, 0x50, 0xF8,
0x31, 0x30, 0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03,
0x36, 0x4A, 0xD3, 0x18, 0x01, 0x22, 0x10, 0xF8,
0x31, 0x40, 0x14, 0xF0, 0x1F, 0x04, 0xA2, 0x40,
0x1A, 0x60, 0x1C, 0xE0, 0x50, 0xF8, 0x31, 0x30,
0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03, 0x30, 0x4A,
0xD3, 0x18, 0x01, 0x22, 0x10, 0xF8, 0x31, 0x40,
0x14, 0xF0, 0x1F, 0x04, 0xA2, 0x40, 0x1A, 0x60,
0x0D, 0xE0, 0x50, 0xF8, 0x31, 0x30, 0xDB, 0x08,
0x13, 0xF0, 0x04, 0x03, 0x26, 0x4A, 0xD3, 0x18,
0x01, 0x22, 0x10, 0xF8, 0x31, 0x40, 0x14, 0xF0,
0x1F, 0x04, 0xA2, 0x40, 0x1A, 0x60, 0x10, 0xBC,
0x70, 0x47, 0x10, 0xB4, 0x00, 0xEB, 0xC1, 0x02,
0x12, 0x79, 0x92, 0x07, 0x22, 0xD5, 0x00, 0xEB,
0xC1, 0x02, 0x12, 0x79, 0xD2, 0x07, 0x0E, 0xD4,
0x50, 0xF8, 0x31, 0x30, 0xDB, 0x08, 0x13, 0xF0,
0x04, 0x03, 0x1A, 0x4A, 0xD3, 0x18, 0x01, 0x22,
0x10, 0xF8, 0x31, 0x40, 0x14, 0xF0, 0x1F, 0x04,
0xA2, 0x40, 0x1A, 0x60, 0x1C, 0xE0, 0x50, 0xF8,
0x31, 0x30, 0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03,
0x13, 0x4A, 0xD3, 0x18, 0x01, 0x22, 0x10, 0xF8,
0x31, 0x40, 0x14, 0xF0, 0x1F, 0x04, 0xA2, 0x40,
0x1A, 0x60, 0x0D, 0xE0, 0x50, 0xF8, 0x31, 0x30,
0xDB, 0x08, 0x13, 0xF0, 0x04, 0x03, 0x0D, 0x4A,
0xD3, 0x18, 0x01, 0x22, 0x10, 0xF8, 0x31, 0x40,
0x14, 0xF0, 0x1F, 0x04, 0xA2, 0x40, 0x1A, 0x60,
0x10, 0xBC, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x01, 0x40, 0x40, 0x00, 0x01, 0x40,
0x00, 0x00, 0x01, 0x40, 0xE0, 0x00, 0x01, 0x40,
0xA8, 0x00, 0x01, 0x40, 0x90, 0x00, 0x01, 0x40,
0x98, 0x00, 0x01, 0x40, 0xB4, 0x00, 0x01, 0x40,
0xF8, 0xB5, 0x04, 0x00, 0x0D, 0x00, 0x16, 0x00,
0x00, 0x20, 0x07, 0x00, 0xAF, 0x42, 0x0E, 0xD2,
0x30, 0x00, 0xF8, 0x40, 0xC0, 0x07, 0x04, 0xD5,
0x39, 0x00, 0x20, 0x00, 0xFF, 0xF7, 0x6C, 0xFF,
0x03, 0xE0, 0x39, 0x00, 0x20, 0x00, 0xFF, 0xF7,
0xA0, 0xFF, 0x7F, 0x1C, 0xEE, 0xE7, 0xF1, 0xBD,
0x30, 0xB4, 0xB0, 0xF5, 0x00, 0x6F, 0x27, 0xD1,
0x4F, 0xF4, 0x00, 0x63, 0x4F, 0xF4, 0x80, 0x50,
0x20, 0x22, 0x40, 0x21, 0x8D, 0x4C, 0x25, 0x68,
0x25, 0xEA, 0x00, 0x00, 0x00, 0x2B, 0x20, 0x60,
0x40, 0xF0, 0xA0, 0x80, 0xC8, 0x20, 0x40, 0x1E,
0x13, 0xD0, 0x88, 0x4B, 0x5C, 0x68, 0x0C, 0x42,
0xF9, 0xD1, 0x00, 0x28, 0x0D, 0xDD, 0xC8, 0x20,
0x00, 0x2A, 0x00, 0xF0, 0x9C, 0x80, 0x40, 0x1E,
0x07, 0xD0, 0x82, 0x49, 0x4B, 0x68, 0x13, 0x40,
0x93, 0x42, 0xF8, 0xD1, 0x00, 0x28, 0x00, 0xF3,
0x92, 0x80, 0x30, 0xBC, 0x00, 0x20, 0x70, 0x47,
0xB0, 0xF5, 0xC0, 0x5F, 0x03, 0xD1, 0x4F, 0xF4,
0xC0, 0x53, 0x60, 0x22, 0x7D, 0xE0, 0x01, 0x28,
0x06, 0xD1, 0x01, 0x23, 0x40, 0xF2, 0xFE, 0x70,
0x4F, 0xF4, 0x80, 0x72, 0x76, 0x49, 0xCD, 0xE7,
0x03, 0x28, 0x06, 0xD1, 0x03, 0x23, 0x40, 0xF2,
0xFC, 0x70, 0x4F, 0xF4, 0x40, 0x72, 0x73, 0x49,
0xC4, 0xE7, 0x07, 0x28, 0x07, 0xD1, 0x07, 0x23,
0x4F, 0xF4, 0xFF, 0x60, 0x4F, 0xF4, 0xE0, 0x62,
0x4F, 0xF4, 0xFF, 0x21, 0xBA, 0xE7, 0x0F, 0x28,
0x07, 0xD1, 0x0F, 0x23, 0x4F, 0xF4, 0xFE, 0x60,
0x4F, 0xF4, 0x70, 0x62, 0x4F, 0xF4, 0xFE, 0x21,
0xB0, 0xE7, 0x1F, 0x28, 0x07, 0xD1, 0x1F, 0x23,
0x4F, 0xF4, 0xFC, 0x60, 0x4F, 0xF4, 0xF8, 0x52,
0x4F, 0xF4, 0xFC, 0x21, 0xA6, 0xE7, 0x3F, 0x28,
0x07, 0xD1, 0x3F, 0x23, 0x4F, 0xF4, 0xF8, 0x60,
0x4F, 0xF4, 0x7C, 0x52, 0x4F, 0xF4, 0xF8, 0x21,
0x9C, 0xE7, 0x7F, 0x28, 0x07, 0xD1, 0x7F, 0x23,
0x4F, 0xF4, 0xF0, 0x60, 0x4F, 0xF4, 0xFE, 0x42,
0x4F, 0xF4, 0xF0, 0x21, 0x92, 0xE7, 0xFF, 0x28,
0x07, 0xD1, 0xFF, 0x23, 0x4F, 0xF4, 0xE0, 0x60,
0x4F, 0xF4, 0x7F, 0x42, 0x4F, 0xF4, 0xE0, 0x21,
0x88, 0xE7, 0x40, 0xF2, 0xFF, 0x13, 0x98, 0x42,
0x05, 0xD1, 0x4F, 0xF4, 0xC0, 0x60, 0x52, 0x4A,
0x4F, 0xF4, 0xC0, 0x21, 0x7E, 0xE7, 0x40, 0xF2,
0xFF, 0x33, 0x98, 0x42, 0x05, 0xD1, 0x4F, 0xF4,
0x80, 0x60, 0x4E, 0x4A, 0x4F, 0xF4, 0x80, 0x21,
0x74, 0xE7, 0x40, 0xF2, 0xFF, 0x73, 0x98, 0x42,
0x16, 0xD0, 0xB0, 0xF1, 0x20, 0x4F, 0x04, 0xD1,
0x4F, 0xF0, 0x20, 0x43, 0x4F, 0xF4, 0x20, 0x12,
0x0F, 0xE0, 0x6F, 0xF0, 0x20, 0x41, 0x88, 0x42,
0x06, 0xD1, 0x00, 0x23, 0x4F, 0xF0, 0x20, 0x40,
0x00, 0x22, 0x4F, 0xF4, 0x20, 0x11, 0x5D, 0xE7,
0x41, 0x4B, 0x98, 0x42, 0x7F, 0xF4, 0x79, 0xAF,
0x40, 0x4A, 0x00, 0x21, 0x39, 0x4C, 0x20, 0x68,
0x03, 0x43, 0xC8, 0x20, 0x00, 0x29, 0x23, 0x60,
0x3F, 0xF4, 0x61, 0xAF, 0x57, 0xE7, 0x30, 0xBC,
0x01, 0x20, 0x70, 0x47, 0x3A, 0x49, 0x48, 0x68,
0xC0, 0xF3, 0x40, 0x00, 0x10, 0xB1, 0x48, 0x68,
0xC2, 0x07, 0x0C, 0xD4, 0x0A, 0x68, 0x42, 0xF0,
0x02, 0x02, 0x0A, 0x60, 0x08, 0x68, 0x40, 0xF0,
0x01, 0x00, 0x08, 0x60, 0x4A, 0x68, 0x02, 0xF0,
0x03, 0x02, 0x03, 0x2A, 0xFA, 0xD1, 0x48, 0x68,
0x00, 0xF0, 0x03, 0x00, 0x03, 0x28, 0xFA, 0xD1,
0x42, 0x20, 0x00, 0xF0, 0x5D, 0xB8, 0x2C, 0x49,
0x48, 0x68, 0xC0, 0xF3, 0x40, 0x00, 0x10, 0xB1,
0x48, 0x68, 0xC2, 0x07, 0x0C, 0xD4, 0x0A, 0x68,
0x42, 0xF0, 0x02, 0x02, 0x0A, 0x60, 0x08, 0x68,
0x40, 0xF0, 0x01, 0x00, 0x08, 0x60, 0x4A, 0x68,
0x02, 0xF0, 0x03, 0x02, 0x03, 0x2A, 0xFA, 0xD1,
0x70, 0x47, 0x22, 0x49, 0xD1, 0xF8, 0xF8, 0x0F,
0xC0, 0xF3, 0x40, 0x00, 0x18, 0xB9, 0xD1, 0xF8,
0xF8, 0x0F, 0xC2, 0x07, 0x1F, 0xD5, 0x0A, 0x68,
0x02, 0xF0, 0xF0, 0x02, 0x20, 0x2A, 0x04, 0xBF,
0xD1, 0xF8, 0xFC, 0x0F, 0xB0, 0xF5, 0x00, 0x7F,
0x06, 0xD1, 0xD1, 0xF8, 0xF4, 0x2F, 0x02, 0xF0,
0x05, 0x02, 0xC1, 0xF8, 0xF4, 0x2F, 0x0B, 0xE0,
0xD1, 0xF8, 0xF4, 0x0F, 0x20, 0xF0, 0x02, 0x00,
0xC1, 0xF8, 0xF4, 0x0F, 0xD1, 0xF8, 0xF4, 0x0F,
0x40, 0x08, 0x40, 0x00, 0xC1, 0xF8, 0xF4, 0x0F,
0x0A, 0x20, 0x00, 0xF0, 0x1D, 0xB8, 0x70, 0x47,
0x0B, 0x48, 0x81, 0x69, 0x41, 0xF0, 0x06, 0x01,
0x81, 0x61, 0x02, 0x68, 0x22, 0xF0, 0x04, 0x02,
0x02, 0x60, 0x70, 0x47, 0x10, 0x10, 0x02, 0x40,
0x00, 0xFE, 0x07, 0x00, 0x00, 0xFC, 0x07, 0x00,
0x00, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0x03, 0x00,
0xFF, 0x1F, 0x00, 0xA0, 0x00, 0xFF, 0x07, 0x00,
0x00, 0x10, 0x02, 0x40, 0x0C, 0x00, 0x02, 0x40,
0xDF, 0xF8, 0x04, 0x10, 0x4A, 0x6B, 0x10, 0x47,
0x0C, 0x10, 0x00, 0x10, 0x81, 0xB0, 0x4A, 0x68,
0x8B, 0x68, 0x09, 0x68, 0x42, 0xEA, 0x03, 0x42,
0x00, 0x29, 0x18, 0xBF, 0x52, 0xF0, 0x00, 0x42,
0xEF, 0xF3, 0x10, 0x81, 0x00, 0x91, 0x72, 0xB6,
0xDF, 0xF8, 0x7C, 0x11, 0x01, 0xEB, 0x00, 0x11,
0xDF, 0xF8, 0x74, 0x01, 0x0A, 0x60, 0xD0, 0xF8,
0xF4, 0x10, 0x01, 0xF0, 0x0F, 0x01, 0x01, 0x29,
0x18, 0xBF, 0x02, 0x29, 0x36, 0xD0, 0x01, 0x68,
0xC1, 0xF3, 0x44, 0x02, 0x52, 0x1E, 0x04, 0x2A,
0x82, 0xBF, 0xC1, 0xF3, 0x44, 0x41, 0x49, 0x1E,
0x04, 0x29, 0x2B, 0xD9, 0x01, 0x69, 0xC1, 0xF3,
0x44, 0x02, 0x52, 0x1E, 0x04, 0x2A, 0x82, 0xBF,
0xC1, 0xF3, 0x44, 0x41, 0x49, 0x1E, 0x04, 0x29,
0x20, 0xD9, 0x01, 0x6A, 0xC1, 0xF3, 0x44, 0x02,
0x52, 0x1E, 0x04, 0x2A, 0x82, 0xBF, 0xC1, 0xF3,
0x44, 0x41, 0x49, 0x1E, 0x04, 0x29, 0x15, 0xD9,
0x00, 0x6B, 0xC0, 0xF3, 0x44, 0x01, 0x49, 0x1E,
0x04, 0x29, 0x82, 0xBF, 0xC0, 0xF3, 0x44, 0x40,
0x40, 0x1E, 0x04, 0x28, 0x0A, 0xD9, 0xDF, 0xF8,
0x0C, 0x01, 0x01, 0x68, 0x41, 0xF0, 0x04, 0x01,
0x01, 0x60, 0x00, 0x98, 0x80, 0xF3, 0x10, 0x88,
0x01, 0xB0, 0x70, 0x47, 0xDF, 0xF8, 0xF4, 0x00,
0x02, 0x68, 0x22, 0xF0, 0x04, 0x02, 0x02, 0x60,
0x00, 0x98, 0x80, 0xF3, 0x10, 0x88, 0x01, 0xB0,
0x70, 0x47, 0x00, 0x00, 0x36, 0x4A, 0x81, 0xB0,
0x12, 0xEB, 0x00, 0x12, 0xEF, 0xF3, 0x10, 0x80,
0x00, 0x90, 0x72, 0xB6, 0x13, 0x68, 0x01, 0xF0,
0x08, 0x20, 0x83, 0x43, 0x01, 0xF0, 0x01, 0x11,
0x19, 0x43, 0x11, 0x60, 0x00, 0x98, 0x80, 0xF3,
0x10, 0x88, 0x01, 0xB0, 0x70, 0x47, 0x00, 0x00,
0x2B, 0x4A, 0x81, 0xB0, 0x12, 0xEB, 0x00, 0x12,
0xEF, 0xF3, 0x10, 0x80, 0x00, 0x90, 0x72, 0xB6,
0x10, 0x68, 0x01, 0xF0, 0x08, 0x21, 0x01, 0x43,
0x11, 0x60, 0x00, 0x98, 0x80, 0xF3, 0x10, 0x88,
0x01, 0xB0, 0x70, 0x47, 0xF0, 0xB4, 0x81, 0xB0,
0x24, 0x4D, 0x25, 0x4E, 0x05, 0xEB, 0x00, 0x15,
0xEF, 0xF3, 0x10, 0x84, 0x16, 0xEB, 0x00, 0x16,
0x00, 0x94, 0x72, 0xB6, 0x1C, 0x4C, 0x04, 0xEB,
0x00, 0x10, 0x1D, 0x4C, 0x00, 0x68, 0xA1, 0x42,
0x08, 0xBF, 0x00, 0x0C, 0x00, 0xF4, 0xE0, 0x70,
0x80, 0x28, 0x17, 0xBF, 0xC0, 0x28, 0xD3, 0x1A,
0x13, 0x46, 0x00, 0x22, 0x4F, 0xF6, 0xFF, 0x77,
0xC3, 0xEA, 0x02, 0x40, 0xB9, 0x42, 0x08, 0xBF,
0x28, 0x60, 0x09, 0xD0, 0xA1, 0x42, 0x08, 0xBF,
0x30, 0x60, 0x05, 0xD0, 0x12, 0x0C, 0x12, 0x04,
0x28, 0x60, 0x42, 0xEA, 0x13, 0x42, 0x32, 0x60,
0x00, 0x98, 0x80, 0xF3, 0x10, 0x88, 0x01, 0xB0,
0xF0, 0xBC, 0x70, 0x47, 0x81, 0xB0, 0xEF, 0xF3,
0x10, 0x81, 0x00, 0x91, 0x72, 0xB6, 0x0B, 0x49,
0x0A, 0x68, 0x10, 0x43, 0x08, 0x60, 0x00, 0x98,
0x80, 0xF3, 0x10, 0x88, 0x01, 0xB0, 0x70, 0x47,
0x07, 0x49, 0x08, 0x60, 0x70, 0x47, 0x00, 0x00,
0x0C, 0x80, 0x00, 0x40, 0x20, 0x10, 0x02, 0x40,
0x00, 0x00, 0xFF, 0xFF, 0x04, 0x80, 0x00, 0x40,
0x08, 0x80, 0x00, 0x40, 0x00, 0x82, 0x00, 0x40,
0x08, 0x82, 0x00, 0x40, 0x70, 0xB4, 0x81, 0xB0,
0xEF, 0xF3, 0x10, 0x83, 0x00, 0x93, 0x72, 0xB6,
0x51, 0x4B, 0x1C, 0x68, 0x1D, 0x68, 0x96, 0x07,
0xC4, 0xF3, 0x83, 0x04, 0xC5, 0xF3, 0x43, 0x35,
0x03, 0xD5, 0x4E, 0x49, 0x08, 0x68, 0x49, 0x68,
0x01, 0xE0, 0xD6, 0x07, 0x13, 0xD5, 0xD6, 0x06,
0x07, 0xD5, 0x1E, 0x68, 0x80, 0x00, 0x00, 0xF0,
0x3C, 0x00, 0x26, 0xF0, 0x3C, 0x06, 0x30, 0x43,
0x18, 0x60, 0x90, 0x06, 0x07, 0xD5, 0x18, 0x68,
0x49, 0x03, 0x01, 0xF4, 0xF0, 0x31, 0x20, 0xF4,
0xF0, 0x30, 0x01, 0x43, 0x19, 0x60, 0x51, 0x07,
0x07, 0xD5, 0xD0, 0x06, 0x44, 0xBF, 0x3F, 0x48,
0x04, 0x60, 0x90, 0x06, 0x44, 0xBF, 0x3D, 0x48,
0x45, 0x60, 0x00, 0x98, 0x80, 0xF3, 0x10, 0x88,
0x01, 0xB0, 0x70, 0xBC, 0x70, 0x47, 0x00, 0x00,
0x70, 0xB5, 0x82, 0xB0, 0x04, 0x46, 0x00, 0xF0,
0xA1, 0xF8, 0x01, 0x2C, 0x05, 0x46, 0x5A, 0xD1,
0x35, 0x48, 0xD0, 0xF8, 0x44, 0x12, 0xCA, 0x07,
0x55, 0xD4, 0x34, 0x49, 0x34, 0x4E, 0x0A, 0x68,
0x42, 0xF0, 0x04, 0x02, 0x0A, 0x60, 0x01, 0x68,
0x72, 0x68, 0x01, 0xF0, 0xF0, 0x01, 0x20, 0x29,
0x0C, 0xBF, 0x02, 0x21, 0x00, 0x21, 0x52, 0x1E,
0x04, 0x2A, 0xD0, 0xF8, 0xF4, 0x2F, 0xD0, 0xF8,
0xFC, 0x0F, 0x38, 0xBF, 0x41, 0xF0, 0x04, 0x01,
0x12, 0xF0, 0x03, 0x0F, 0x18, 0xBF, 0x41, 0xF0,
0x01, 0x01, 0x40, 0xF2, 0xFF, 0x52, 0x10, 0x42,
0x08, 0xBF, 0x41, 0xF0, 0x08, 0x01, 0x0F, 0x29,
0x12, 0xD1, 0x70, 0x68, 0x40, 0x1E, 0x00, 0x90,
0x4F, 0xF0, 0xFF, 0x31, 0x00, 0x98, 0xFF, 0xF7,
0x27, 0xFF, 0x00, 0x98, 0x00, 0x23, 0x4F, 0xF0,
0x01, 0x12, 0x4F, 0xF0, 0xFF, 0x31, 0xFF, 0xF7,
0x31, 0xFF, 0xFF, 0xF7, 0x5A, 0xFE, 0x00, 0xE0,
0x00, 0x24, 0x30, 0xBF, 0xC4, 0xB1, 0x31, 0x22,
0x07, 0x21, 0x07, 0x20, 0xFF, 0xF7, 0x7A, 0xFF,
0x1C, 0x20, 0xFF, 0xF7, 0x95, 0xFE, 0xFF, 0xF7,
0x36, 0xFE, 0x70, 0x68, 0x40, 0x1E, 0x00, 0x90,
0x00, 0x21, 0x31, 0x70, 0xB1, 0x60, 0x4C, 0x20,
0xFF, 0xF7, 0x8A, 0xFE, 0x00, 0x98, 0x4F, 0xF0,
0xFF, 0x31, 0xFF, 0xF7, 0xEB, 0xFE, 0x08, 0xE0,
0x01, 0x20, 0x30, 0x70, 0x05, 0xE0, 0x09, 0x49,
0x08, 0x68, 0x30, 0xF0, 0x04, 0x00, 0x08, 0x60,
0x30, 0xBF, 0x28, 0x46, 0x02, 0xB0, 0xBD, 0xE8,
0x70, 0x40, 0x00, 0xF0, 0x3D, 0xB8, 0x00, 0x00,
0x68, 0x00, 0x02, 0x40, 0x94, 0x11, 0x00, 0x10,
0x0C, 0x00, 0x02, 0x40, 0x10, 0xED, 0x00, 0xE0,
0x84, 0x11, 0x00, 0x10, 0x10, 0x28, 0x07, 0xD3,
0x10, 0x38, 0x01, 0x21, 0x00, 0xF0, 0x1F, 0x00,
0x0E, 0x4A, 0x81, 0x40, 0x11, 0x60, 0x70, 0x47,
0x04, 0x28, 0x0F, 0xD0, 0x15, 0xD3, 0x06, 0x28,
0x06, 0xD0, 0x12, 0xD2, 0x09, 0x48, 0xD0, 0xF8,
0x24, 0x1C, 0x41, 0xF4, 0x00, 0x31, 0x0A, 0xE0,
0x06, 0x48, 0xD0, 0xF8, 0x24, 0x1C, 0x41, 0xF4,
0x80, 0x21, 0x04, 0xE0, 0x03, 0x48, 0xD0, 0xF8,
0x24, 0x1C, 0x41, 0xF4, 0x80, 0x31, 0xC0, 0xF8,
0x24, 0x1C, 0x70, 0x47, 0x00, 0xE1, 0x00, 0xE0,
0xEF, 0xF3, 0x10, 0x80, 0x62, 0xB6, 0x70, 0x47,
0x70, 0x47, 0x00, 0x00, 0xEF, 0xF3, 0x10, 0x80,
0x72, 0xB6, 0x70, 0x47, 0x70, 0x47, 0x00, 0x00,
0x80, 0xF3, 0x10, 0x88, 0x70, 0x47, 0x70, 0x47,
0x10, 0xB5, 0x02, 0x20, 0x00, 0xF0, 0xAF, 0xF8,
0x4F, 0xF6, 0xFF, 0x71, 0x00, 0x20, 0xFF, 0xF7,
0xA7, 0xFE, 0x3B, 0x49, 0x00, 0x20, 0xFF, 0xF7,
0x2D, 0xFE, 0x08, 0x20, 0x04, 0x00, 0x23, 0x00,
0x5B, 0x08, 0x22, 0x00, 0x4F, 0xF6, 0xFF, 0x71,
0x00, 0x20, 0xFF, 0xF7, 0xAB, 0xFE, 0x01, 0x20,
0xFF, 0xF7, 0xEA, 0xFE, 0x10, 0xBD, 0x80, 0xB5,
0x01, 0x20, 0xFF, 0xF7, 0xE5, 0xFE, 0x31, 0x48,
0x00, 0x68, 0x40, 0x1C, 0x2F, 0x49, 0x08, 0x60,
0x20, 0x28, 0x02, 0xD3, 0x00, 0x20, 0x2D, 0x49,
0x08, 0x60, 0x01, 0xBD, 0x80, 0xB5, 0x00, 0x20,
0x00, 0xF0, 0x66, 0xF8, 0x2A, 0x48, 0x00, 0xF0,
0xDB, 0xF8, 0x00, 0xF0, 0x37, 0xF9, 0x29, 0x48,
0xFE, 0xF7, 0x72, 0xFE, 0xEF, 0xF3, 0x10, 0x80,
0x00, 0x90, 0x72, 0xB6, 0x73, 0x20, 0x26, 0x49,
0x08, 0x60, 0x26, 0x48, 0x00, 0x68, 0x30, 0xF0,
0x70, 0x00, 0x24, 0x49, 0x08, 0x60, 0x24, 0x48,
0x00, 0x68, 0x30, 0xF4, 0x7F, 0x40, 0x50, 0xF4,
0x80, 0x50, 0x21, 0x49, 0x08, 0x60, 0x21, 0x48,
0x00, 0x68, 0x30, 0xF4, 0x7F, 0x40, 0x1F, 0x49,
0x08, 0x60, 0x00, 0x20, 0x1A, 0x49, 0x08, 0x60,
0x00, 0x98, 0x80, 0xF3, 0x10, 0x88, 0x05, 0x21,
0x1B, 0x48, 0xFF, 0xF7, 0xF7, 0xFB, 0x00, 0xF0,
0x96, 0xF9, 0x00, 0xF0, 0x1F, 0xF9, 0xFF, 0xF7,
0x93, 0xFA, 0x18, 0x48, 0xFF, 0xF7, 0x7D, 0xFA,
0xFF, 0xF7, 0x9A, 0xFF, 0x01, 0x20, 0xFF, 0xF7,
0x8D, 0xFE, 0x1D, 0x20, 0xFF, 0xF7, 0x5E, 0xFF,
0xFF, 0xF7, 0x82, 0xFF, 0x4F, 0xF6, 0xFF, 0x71,
0x00, 0x20, 0xFF, 0xF7, 0x27, 0xFE, 0x00, 0xF0,
0x37, 0xF9, 0x01, 0x20, 0xFF, 0xF7, 0xD8, 0xFE,
0x04, 0x48, 0x02, 0x68, 0x05, 0x21, 0x0A, 0x48,
0xFF, 0xF7, 0x66, 0xFC, 0xF5, 0xE7, 0x00, 0x00,
0x00, 0x10, 0x00, 0x10, 0xA0, 0x11, 0x00, 0x10,
0xE8, 0x9B, 0x00, 0x00, 0x39, 0x97, 0x00, 0x00,
0x60, 0x00, 0x01, 0x40, 0x54, 0x00, 0x01, 0x40,
0x28, 0x00, 0x01, 0x40, 0x08, 0x01, 0x01, 0x40,
0x5C, 0x10, 0x00, 0x10, 0xBC, 0x9B, 0x00, 0x00,
0x10, 0xB5, 0x04, 0x00, 0x06, 0xD0, 0x0F, 0xF2,
0xB0, 0x02, 0x0F, 0xF2, 0x5C, 0x00, 0x50, 0x21,
0x00, 0xF0, 0xAF, 0xF9, 0x0F, 0x48, 0x47, 0x21,
0x01, 0x60, 0x44, 0x60, 0x00, 0x21, 0x01, 0x60,
0x10, 0xBD, 0x0D, 0x48, 0x00, 0x68, 0x10, 0xF0,
0x01, 0x00, 0x04, 0xD0, 0x01, 0x28, 0x04, 0xD0,
0x4F, 0xF0, 0xFF, 0x30, 0x70, 0x47, 0x09, 0x48,
0x70, 0x47, 0x09, 0x48, 0x70, 0x47, 0x09, 0x49,
0x0A, 0x68, 0x22, 0xEA, 0x00, 0x00, 0x08, 0x60,
0x70, 0x47, 0x06, 0x49, 0x0A, 0x68, 0x10, 0x43,
0x08, 0x60, 0x70, 0x47, 0x14, 0x40, 0x00, 0x40,
0x18, 0x40, 0x00, 0x40, 0x00, 0x6C, 0xDC, 0x02,
0x00, 0x36, 0x6E, 0x01, 0x0C, 0x40, 0x00, 0x40,
0x43, 0x3A, 0x5C, 0x6A, 0x76, 0x73, 0x5C, 0x61,
0x6D, 0x62, 0x69, 0x71, 0x5C, 0x77, 0x6F, 0x72,
0x6B, 0x5C, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6E,
0x67, 0x5C, 0x52, 0x65, 0x6C, 0x2D, 0x31, 0x2E,
0x32, 0x2E, 0x39, 0x5C, 0x41, 0x6D, 0x62, 0x69,
0x71, 0x53, 0x75, 0x69, 0x74, 0x65, 0x5C, 0x6D,
0x63, 0x75, 0x5C, 0x61, 0x70, 0x6F, 0x6C, 0x6C,
0x6F, 0x32, 0x5C, 0x68, 0x61, 0x6C, 0x5C, 0x61,
0x6D, 0x5F, 0x68, 0x61, 0x6C, 0x5F, 0x63, 0x6C,
0x6B, 0x67, 0x65, 0x6E, 0x2E, 0x63, 0x00, 0x00,
0x61, 0x6D, 0x5F, 0x68, 0x61, 0x6C, 0x5F, 0x63,
0x6C, 0x6B, 0x67, 0x65, 0x6E, 0x5F, 0x73, 0x79,
0x73, 0x63, 0x6C, 0x6B, 0x5F, 0x73, 0x65, 0x6C,
0x65, 0x63, 0x74, 0x28, 0x29, 0x3A, 0x20, 0x69,
0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x63,
0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x73, 0x65, 0x74,
0x74, 0x69, 0x6E, 0x67, 0x2E, 0x00, 0x00, 0x00,
0x30, 0xB5, 0x05, 0x46, 0x81, 0xB0, 0xAC, 0x78,
0x68, 0x78, 0x40, 0x00, 0xA1, 0x00, 0x64, 0x08,
0x00, 0xF0, 0x02, 0x00, 0x01, 0xF0, 0x04, 0x01,
0xE4, 0x00, 0x08, 0x43, 0x04, 0xF0, 0x08, 0x04,
0x04, 0x43, 0xE8, 0x78, 0x04, 0x43, 0x28, 0x79,
0xC0, 0x01, 0x00, 0xF0, 0x80, 0x00, 0x04, 0x43,
0xA8, 0x79, 0x80, 0x02, 0x00, 0xF4, 0x80, 0x60,
0x04, 0x43, 0xE8, 0x79, 0xC0, 0x02, 0x00, 0xF4,
0x00, 0x60, 0x04, 0x43, 0x28, 0x7A, 0x00, 0x03,
0x00, 0xF4, 0x70, 0x40, 0x04, 0x43, 0x68, 0x7A,
0x00, 0x04, 0x00, 0xF4, 0x70, 0x20, 0x04, 0x43,
0xA8, 0x7A, 0x00, 0x05, 0x00, 0xF4, 0x80, 0x10,
0x04, 0x43, 0xE8, 0x7A, 0x00, 0x06, 0x00, 0xF0,
0x80, 0x70, 0x04, 0x43, 0x4F, 0xF0, 0x20, 0x40,
0xFF, 0xF7, 0xB6, 0xFB, 0x10, 0x49, 0x44, 0xF0,
0x01, 0x04, 0x0C, 0x60, 0x32, 0x20, 0x8A, 0x68,
0x53, 0x07, 0x01, 0xD4, 0x40, 0x1E, 0xFA, 0xD1,
0x88, 0x68, 0x40, 0xF0, 0x01, 0x00, 0x88, 0x60,
0x32, 0x20, 0x8A, 0x68, 0x53, 0x07, 0x01, 0xD4,
0x40, 0x1E, 0xFA, 0xD1, 0x68, 0x79, 0x02, 0x02,
0x40, 0x08, 0x02, 0xF4, 0x80, 0x72, 0x40, 0x02,
0x14, 0x43, 0x00, 0xF4, 0x00, 0x70, 0x04, 0x43,
0x0C, 0x60, 0x01, 0xB0, 0x30, 0xBD, 0x00, 0x00,
0x00, 0x80, 0x01, 0x40, 0x00, 0xB5, 0x81, 0xB0,
0xFF, 0xF7, 0x4C, 0xFC, 0xFF, 0xF7, 0xA8, 0xFC,
0x00, 0xF0, 0xDC, 0xF8, 0x01, 0x20, 0x00, 0xF0,
0xDF, 0xF8, 0x01, 0x20, 0xFF, 0xF7, 0x41, 0xFF,
0x01, 0xB0, 0x5D, 0xF8, 0x04, 0xEB, 0x00, 0xF0,
0xE4, 0xB8, 0x00, 0x00, 0x2D, 0x48, 0x01, 0x68,
0xCA, 0x07, 0x00, 0xD5, 0x70, 0x47, 0x00, 0xB5,
0x2B, 0x49, 0x2C, 0x48, 0x87, 0xB0, 0x08, 0x60,
0x01, 0xA8, 0x2B, 0x49, 0x01, 0x91, 0x00, 0xF0,
0xDF, 0xF8, 0xEF, 0xF3, 0x10, 0x80, 0x00, 0x90,
0x72, 0xB6, 0x28, 0x48, 0x73, 0x21, 0x81, 0x63,
0xC1, 0x6A, 0x21, 0xF0, 0x70, 0x01, 0xC1, 0x62,
0x02, 0x68, 0x22, 0xF4, 0x7F, 0x42, 0x42, 0xF4,
0x80, 0x52, 0x02, 0x60, 0x00, 0x22, 0xD0, 0xF8,
0xE0, 0x10, 0x21, 0xF4, 0x7F, 0x41, 0xC0, 0xF8,
0xE0, 0x10, 0x82, 0x63, 0x00, 0x98, 0x80, 0xF3,
0x10, 0x88, 0x07, 0xB0, 0x00, 0xBD, 0x00, 0x00,
0x00, 0xB5, 0x16, 0x48, 0x81, 0xB0, 0x01, 0x68,
0xCA, 0x07, 0x24, 0xD4, 0x00, 0xF0, 0x58, 0xF8,
0xEF, 0xF3, 0x10, 0x80, 0x00, 0x90, 0x72, 0xB6,
0x14, 0x48, 0x73, 0x21, 0x81, 0x63, 0x00, 0x22,
0xC1, 0x6A, 0x21, 0xF0, 0x70, 0x01, 0x41, 0xF0,
0x20, 0x01, 0xC1, 0x62, 0x01, 0x68, 0x21, 0xF4,
0x7F, 0x41, 0x41, 0xF4, 0xC0, 0x51, 0x01, 0x60,
0xD0, 0xF8, 0xE0, 0x10, 0x21, 0xF4, 0x7F, 0x41,
0xC0, 0xF8, 0xE0, 0x10, 0x82, 0x63, 0x00, 0x98,
0x80, 0xF3, 0x10, 0x88, 0x01, 0xB0, 0x5D, 0xF8,
0x04, 0xEB, 0x00, 0xF0, 0xD2, 0xB8, 0x01, 0xB0,
0x00, 0xBD, 0x00, 0x00, 0xA4, 0x11, 0x00, 0x10,
0x80, 0x0E, 0x00, 0xE0, 0x11, 0x05, 0x15, 0x00,
0x40, 0x42, 0x0F, 0x00, 0x28, 0x00, 0x01, 0x40,
0x00, 0xF0, 0x48, 0xB8, 0x10, 0xB5, 0x04, 0x46,
0xFF, 0xF7, 0xBB, 0xFE, 0x1A, 0x4A, 0xA0, 0xFB,
0x02, 0x21, 0x48, 0x0D, 0x60, 0x43, 0xBD, 0xE8,
0x10, 0x40, 0xFF, 0xF7, 0x41, 0xBC, 0x17, 0x48,
0x01, 0x68, 0xCA, 0x07, 0x13, 0xD4, 0x16, 0x48,
0x01, 0x68, 0x41, 0xF0, 0x80, 0x71, 0x01, 0x60,
0x02, 0x68, 0xD1, 0x01, 0xFC, 0xD5, 0x13, 0x48,
0x13, 0x49, 0xC0, 0xF8, 0xB0, 0x11, 0x0F, 0x21,
0x01, 0x64, 0x4F, 0xF0, 0xFF, 0x31, 0x01, 0x60,
0x10, 0x49, 0xC0, 0xF8, 0x80, 0x10, 0x70, 0x47,
0x00, 0xB5, 0x81, 0xB0, 0x0E, 0x48, 0x01, 0x68,
0x0A, 0x02, 0xFC, 0xD4, 0xFF, 0xF7, 0x91, 0xFE,
0x05, 0x4B, 0xA0, 0xFB, 0x03, 0x32, 0x01, 0xB0,
0x50, 0x0D, 0x32, 0x21, 0x5D, 0xF8, 0x04, 0xEB,
0x11, 0xFB, 0x00, 0xF0, 0xFF, 0xF7, 0x14, 0xBC,
0x08, 0xFC, 0xF4, 0xB2, 0xA4, 0x11, 0x00, 0x10,
0xFC, 0xED, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0xE0,
0x55, 0xCE, 0xAC, 0xC5, 0x11, 0x05, 0x15, 0x00,
0x80, 0x0E, 0x00, 0xE0, 0x01, 0x78, 0x00, 0x22,
0xD1, 0xB1, 0x52, 0x1C, 0x83, 0x5C, 0x53, 0xB1,
0x52, 0x1C, 0x81, 0x5C, 0x39, 0xB1, 0x52, 0x1C,
0x83, 0x5C, 0x00, 0x2B, 0x03, 0xD0, 0x52, 0x1C,
0x81, 0x5C, 0x00, 0x29, 0xF1, 0xD1, 0x5A, 0xB1,
0x4F, 0xF0, 0x60, 0x43, 0x90, 0xF8, 0x00, 0xC0,
0x19, 0x68, 0x00, 0x29, 0xFC, 0xD0, 0x40, 0x1C,
0x52, 0x1E, 0x83, 0xF8, 0x00, 0xC0, 0xF5, 0xD1,
0x70, 0x47, 0xFE, 0xE7, 0x01, 0x49, 0x37, 0x20,
0x08, 0x60, 0x70, 0x47, 0x08, 0xC0, 0x00, 0x40,
0xDF, 0xF8, 0x24, 0x10, 0x20, 0xB1, 0x08, 0x68,
0x40, 0xF0, 0x80, 0x00, 0x08, 0x60, 0x70, 0x47,
0x0A, 0x68, 0x22, 0xF0, 0x80, 0x02, 0x0A, 0x60,
0x70, 0x47, 0xDF, 0xF8, 0x10, 0x00, 0x01, 0x68,
0x41, 0xF0, 0x10, 0x01, 0x01, 0x60, 0x70, 0x47,
0x0C, 0x40, 0x00, 0x40, 0x50, 0x40, 0x00, 0x40,
0x30, 0xB5, 0x81, 0xB0, 0x04, 0x68, 0x20, 0x4D,
0x00, 0x21, 0xC5, 0xF8, 0x00, 0x13, 0xFC, 0xB1,
0x01, 0x20, 0x28, 0x60, 0xA4, 0xF5, 0x61, 0x40,
0x1C, 0x49, 0x88, 0x42, 0x28, 0xBF, 0x1C, 0x4C,
0xFF, 0xF7, 0x27, 0xFE, 0x10, 0xF1, 0x01, 0x0F,
0x05, 0xD0, 0xC0, 0x08, 0xB0, 0xFB, 0xF4, 0xF0,
0x40, 0x1E, 0x80, 0xB2, 0x00, 0xE0, 0x05, 0x20,
0xE8, 0x60, 0x02, 0x20, 0xC5, 0xF8, 0xEC, 0x00,
0x00, 0x20, 0xC5, 0xF8, 0xFC, 0x0E, 0x40, 0xF2,
0x01, 0x20, 0x0E, 0x49, 0x08, 0x60, 0x0E, 0xE0,
0x01, 0x69, 0xE9, 0x60, 0x01, 0x22, 0x81, 0x68,
0xC5, 0xF8, 0xEC, 0x10, 0xC3, 0x68, 0x59, 0x1E,
0x8A, 0x40, 0x2A, 0x60, 0x07, 0x49, 0x0A, 0x68,
0x40, 0x68, 0x02, 0x43, 0x0A, 0x60, 0x01, 0xB0,
0xBD, 0xE8, 0x30, 0x40, 0x32, 0x20, 0xFF, 0xF7,
0x3D, 0xBF, 0x02, 0x49, 0x00, 0x20, 0x08, 0x60,
0x70, 0x47, 0x00, 0x00, 0x50, 0x02, 0x02, 0x40,
0x04, 0x00, 0x04, 0xE0, 0x81, 0xA3, 0x1D, 0x00,
0x40, 0x42, 0x0F, 0x00, 0x80, 0xB5, 0x68, 0x46,
0x08, 0x30, 0x00, 0xF0, 0x08, 0xF8, 0x01, 0xBD,
0x70, 0x47, 0x00, 0x00, 0x80, 0x00, 0x40, 0x18,
0x00, 0x68, 0x70, 0x47, 0x70, 0x47, 0x30, 0xB5,
0x93, 0xB0, 0x04, 0x00, 0x0C, 0xA8, 0x18, 0x21,
0x00, 0xF0, 0x52, 0xF8, 0x00, 0x25, 0x0A, 0x95,
0x25, 0x48, 0x00, 0x68, 0x0A, 0x90, 0x0A, 0x98,
0x8D, 0xF8, 0x2C, 0x00, 0x0A, 0x98, 0x00, 0x0A,
0x8D, 0xF8, 0x2D, 0x00, 0x0A, 0x98, 0x00, 0x0C,
0xAD, 0xF8, 0x2E, 0x00, 0x1F, 0x48, 0x00, 0x68,
0x09, 0x90, 0x9D, 0xF8, 0x2D, 0x00, 0x80, 0x07,
0x04, 0xD5, 0x21, 0x00, 0x06, 0x20, 0xFF, 0xF7,
0xD9, 0xFF, 0x01, 0xE0, 0x5F, 0xF0, 0xFF, 0x30,
0x08, 0x90, 0x21, 0x00, 0x00, 0x20, 0xFF, 0xF7,
0xD1, 0xFF, 0x00, 0x90, 0x21, 0x00, 0x01, 0x20,
0xFF, 0xF7, 0xCC, 0xFF, 0x01, 0x90, 0x21, 0x00,
0x02, 0x20, 0xFF, 0xF7, 0xC7, 0xFF, 0x02, 0x90,
0x21, 0x00, 0x03, 0x20, 0xFF, 0xF7, 0xC2, 0xFF,
0x03, 0x90, 0x21, 0x00, 0x04, 0x20, 0xFF, 0xF7,
0xBD, 0xFF, 0x04, 0x90, 0x21, 0x00, 0x05, 0x20,
0xFF, 0xF7, 0xB8, 0xFF, 0x05, 0x90, 0x21, 0x00,
0x06, 0x20, 0xFF, 0xF7, 0xB3, 0xFF, 0x06, 0x90,
0x21, 0x00, 0x07, 0x20, 0xFF, 0xF7, 0xAE, 0xFF,
0x07, 0x90, 0x0C, 0xA8, 0x00, 0xF0, 0x0C, 0xF8,
0x00, 0x20, 0x05, 0x00, 0xFE, 0xE7, 0x00, 0x00,
0x28, 0xED, 0x00, 0xE0, 0x38, 0xED, 0x00, 0xE0,
0x00, 0x22, 0x00, 0xF0, 0x1B, 0xB8, 0x00, 0x00,
0x0B, 0x4A, 0xD1, 0x68, 0x01, 0xF0, 0x01, 0x03,
0x03, 0x70, 0x4B, 0x08, 0x89, 0x08, 0x01, 0xF0,
0x01, 0x01, 0x03, 0xF0, 0x01, 0x03, 0x01, 0x74,
0x03, 0x72, 0x51, 0x68, 0x43, 0x68, 0xC1, 0x60,
0x11, 0x68, 0x0B, 0x43, 0x43, 0x60, 0x43, 0x69,
0x91, 0x68, 0x0B, 0x43, 0x43, 0x61, 0x70, 0x47,
0xC0, 0x01, 0x02, 0x40, 0x00, 0xB5, 0x00, 0xBF,
0x13, 0x00, 0x96, 0x46, 0x94, 0x46, 0x10, 0x39,
0x28, 0xBF, 0xA0, 0xE8, 0x0C, 0x50, 0xFA, 0xD8,
0x5F, 0xEA, 0x41, 0x7C, 0x28, 0xBF, 0x0C, 0xC0,
0x48, 0xBF, 0x40, 0xF8, 0x04, 0x2B, 0xC9, 0x07,
0x28, 0xBF, 0x20, 0xF8, 0x02, 0x2B, 0x48, 0xBF,
0x00, 0xF8, 0x01, 0x2B, 0x00, 0xBD, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x56, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x08,
0x51, 0x00, 0x00, 0x08, 0x55, 0x00, 0x00, 0x08,
0x59, 0x00, 0x00, 0x08, 0x6D, 0x00, 0x00, 0x08,
0x71, 0x00, 0x00, 0x08, 0x7D, 0x00, 0x00, 0x08,
0x81, 0x00, 0x00, 0x08, 0x89, 0x00, 0x00, 0x08,
0x91, 0x00, 0x00, 0x08, 0x99, 0x00, 0x00, 0x08,
0x75, 0x00, 0x00, 0x08, 0x79, 0x00, 0x00, 0x08,
0x9D, 0x00, 0x00, 0x08, 0x5D, 0x00, 0x00, 0x08,
0x61, 0x00, 0x00, 0x08, 0x65, 0x00, 0x00, 0x08,
0x69, 0x00, 0x00, 0x08, 0x85, 0x00, 0x00, 0x08,
0x8D, 0x00, 0x00, 0x08, 0x11, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x19, 0xE0, 0x50, 0xF8,
0x04, 0x2B, 0xD3, 0x07, 0x44, 0xBF, 0xA9, 0xF1,
0x01, 0x03, 0x9A, 0x18, 0x09, 0x1F, 0x00, 0x23,
0x04, 0x29, 0x42, 0xF8, 0x04, 0x3B, 0xF9, 0xD2,
0x5F, 0xEA, 0x81, 0x7C, 0x13, 0x46, 0x04, 0xD5,
0x4F, 0xF0, 0x00, 0x0C, 0xA2, 0xF8, 0x00, 0xC0,
0x9B, 0x1C, 0xC9, 0x07, 0x44, 0xBF, 0x00, 0x21,
0x19, 0x70, 0x50, 0xF8, 0x04, 0x1B, 0x00, 0x29,
0xE1, 0xD1, 0x70, 0x47, 0x10, 0xB4, 0x50, 0xF8,
0x04, 0x1B, 0x79, 0xB1, 0x02, 0x68, 0x43, 0x68,
0x02, 0x44, 0x08, 0x30, 0xDC, 0x07, 0x44, 0xBF,
0xA9, 0xF1, 0x01, 0x04, 0xE3, 0x18, 0x52, 0xF8,
0x04, 0x4B, 0x43, 0xF8, 0x04, 0x4B, 0x09, 0x1F,
0xF9, 0xD1, 0xEC, 0xE7, 0x10, 0xBC, 0x70, 0x47,
0x10, 0xB5, 0x07, 0x49, 0x79, 0x44, 0x18, 0x31,
0x06, 0x4C, 0x7C, 0x44, 0x16, 0x34, 0x04, 0xE0,
0x0A, 0x68, 0x08, 0x1D, 0x11, 0x44, 0x88, 0x47,
0x01, 0x46, 0xA1, 0x42, 0xF8, 0xD1, 0x10, 0xBD,
0x2C, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00,
0x4E, 0xF6, 0x88, 0x51, 0xCE, 0xF2, 0x00, 0x01,
0x08, 0x68, 0x40, 0xF4, 0x70, 0x00, 0x08, 0x60,
0xBF, 0xF3, 0x4F, 0x8F, 0xBF, 0xF3, 0x6F, 0x8F,
0x4F, 0xF0, 0x00, 0x70, 0xE1, 0xEE, 0x10, 0x0A,
0x70, 0x47, 0x00, 0x00, 0x49, 0xFF, 0xFF, 0xFF,
0x28, 0x01, 0x00, 0x00, 0x84, 0x10, 0x00, 0x10,
0x00, 0x00, 0x00, 0x00, 0x79, 0xFF, 0xFF, 0xFF,
0x84, 0x00, 0x00, 0x00, 0xAC, 0xFE, 0xFF, 0xFF,
0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0x0B, 0xF8, 0x00, 0x28, 0x01, 0xD0,
0xFF, 0xF7, 0xC2, 0xFF, 0x00, 0x20, 0xAF, 0xF3,
0x00, 0x80, 0xFF, 0xF7, 0x1B, 0xFC, 0x00, 0xF0,
0x02, 0xF8, 0x01, 0x20, 0x70, 0x47, 0x00, 0xF0,
0x01, 0xB8, 0x00, 0x00, 0x07, 0x46, 0x38, 0x46,
0x00, 0xF0, 0x02, 0xF8, 0xFB, 0xE7, 0x00, 0x00,
0x80, 0xB5, 0xAF, 0xF3, 0x00, 0x80, 0x02, 0x4A,
0x11, 0x00, 0x18, 0x20, 0xAB, 0xBE, 0xFB, 0xE7,
0x26, 0x00, 0x02, 0x00, 0x42, 0x69, 0x6E, 0x61,
0x72, 0x79, 0x20, 0x43, 0x6F, 0x75, 0x6E, 0x74,
0x65, 0x72, 0x20, 0x45, 0x78, 0x61, 0x6D, 0x70,
0x6C, 0x65, 0x0A, 0x00, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00,
0x01, 0x00, 0x00, 0x50, 0x00, 0x03, 0x01, 0x00,
0x01, 0x01, 0x01, 0x00, 0xAF, 0xF3, 0x00, 0x80,
0xFF, 0xF7, 0x9A, 0xFF, 0xFF, 0xF7, 0xBC, 0xFF,
0xFF, 0xF7, 0xF8, 0xFF, 0x70, 0x47, 0xFE, 0xE7,
0xFE, 0xE7
};
#endif // APOLLO2_BOOT_DEMO_H
@@ -0,0 +1,949 @@
//*****************************************************************************
//
//! @file apollo_boot_demo.h
//!
//! @brief This is a generated file corresponding to binary_counter
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#ifndef APOLLO_BOOT_DEMO_H
#define APOLLO_BOOT_DEMO_H
//*****************************************************************************
//
// Translation layer.
//
//*****************************************************************************
#define IMAGE_SIZE APOLLO_BOOT_DEMO_SIZE
#define IMAGE_CRC APOLLO_BOOT_DEMO_CRC
#define IMAGE_LINK_ADDRESS APOLLO_BOOT_DEMO_LINK_ADDRESS
#define IMAGE_ARRAY g_pui8ApolloBootDemo
//*****************************************************************************
//
// Image characteristics
//
//*****************************************************************************
#define APOLLO_BOOT_DEMO_SIZE 6968
#define APOLLO_BOOT_DEMO_LINK_ADDRESS 0x00008000
#define APOLLO_BOOT_DEMO_CRC 0xF4A03140
//*****************************************************************************
//
// Boot Image
//
//*****************************************************************************
const uint8_t g_pui8ApolloBootDemo[6968] =
{
0x00, 0x10, 0x00, 0x10, 0xA5, 0x94, 0x00, 0x00,
0x11, 0x95, 0x00, 0x00, 0x95, 0x81, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0xC5, 0x80, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x19, 0x95, 0x00, 0x00, 0x19, 0x95, 0x00, 0x00,
0x80, 0xB5, 0x82, 0xB0, 0x00, 0xAF, 0x02, 0x20,
0x01, 0xF0, 0xD0, 0xFA, 0x00, 0x20, 0x4F, 0xF6,
0xFF, 0x71, 0x01, 0xF0, 0x01, 0xFB, 0x00, 0x20,
0x09, 0x49, 0x01, 0xF0, 0xD7, 0xFA, 0x08, 0x23,
0x7B, 0x60, 0x7B, 0x68, 0x5B, 0x08, 0x00, 0x20,
0x4F, 0xF6, 0xFF, 0x71, 0x7A, 0x68, 0x01, 0xF0,
0xFD, 0xFA, 0x01, 0x20, 0x01, 0xF0, 0x42, 0xFB,
0x08, 0x37, 0xBD, 0x46, 0x80, 0xBD, 0x00, 0xBF,
0x00, 0x10, 0x00, 0x10, 0x80, 0xB5, 0x00, 0xAF,
0x01, 0x20, 0x01, 0xF0, 0x37, 0xFB, 0x05, 0x4B,
0x1B, 0x68, 0x01, 0x33, 0x03, 0x4A, 0x13, 0x60,
0x1F, 0x2B, 0x02, 0xD9, 0x01, 0x4B, 0x00, 0x22,
0x1A, 0x60, 0x80, 0xBD, 0x34, 0x10, 0x00, 0x10,
0x80, 0xB5, 0x00, 0xAF, 0x00, 0x20, 0x01, 0xF0,
0x81, 0xFA, 0x01, 0xF0, 0x15, 0xFA, 0x20, 0x48,
0x00, 0xF0, 0xD6, 0xF8, 0x1F, 0x4B, 0x73, 0x22,
0x1A, 0x60, 0x1F, 0x4B, 0x1E, 0x4A, 0x12, 0x68,
0x22, 0xF0, 0x70, 0x02, 0x1A, 0x60, 0x1D, 0x4B,
0x1C, 0x4A, 0x12, 0x68, 0x22, 0xF4, 0x7F, 0x42,
0x42, 0xF4, 0x80, 0x52, 0x1A, 0x60, 0x17, 0x4B,
0x00, 0x22, 0x1A, 0x60, 0x18, 0x48, 0x05, 0x21,
0x01, 0xF0, 0x9C, 0xF8, 0x01, 0xF0, 0x4C, 0xFB,
0x01, 0xF0, 0x0A, 0xFA, 0x00, 0xF0, 0x4E, 0xFF,
0x14, 0x48, 0x00, 0xF0, 0x2D, 0xFF, 0xFF, 0xF7,
0x9F, 0xFF, 0x01, 0x20, 0x01, 0xF0, 0xF2, 0xFA,
0x1A, 0x20, 0x01, 0xF0, 0x01, 0xFB, 0x01, 0xF0,
0x27, 0xFB, 0x00, 0x20, 0x4F, 0xF6, 0xFF, 0x71,
0x01, 0xF0, 0x8C, 0xFA, 0x01, 0xF0, 0x20, 0xFA,
0x01, 0x20, 0x01, 0xF0, 0xE3, 0xFB, 0x0A, 0x4B,
0x1B, 0x68, 0x07, 0x48, 0x05, 0x21, 0x1A, 0x46,
0x01, 0xF0, 0x72, 0xF9, 0xF4, 0xE7, 0x00, 0xBF,
0xF1, 0x95, 0x00, 0x00, 0x60, 0x00, 0x01, 0x40,
0x54, 0x00, 0x01, 0x40, 0x28, 0x00, 0x01, 0x40,
0x0C, 0x10, 0x00, 0x10, 0xC0, 0x9A, 0x00, 0x00,
0x34, 0x10, 0x00, 0x10, 0x80, 0xB5, 0x68, 0x46,
0x08, 0x30, 0x00, 0xF0, 0x09, 0xF8, 0x01, 0xBD,
0x18, 0x46, 0x00, 0xBF, 0x80, 0x00, 0x40, 0x18,
0x00, 0x68, 0x70, 0x47, 0x18, 0x46, 0x00, 0xBF,
0x80, 0xB5, 0x96, 0xB0, 0x00, 0xAF, 0x78, 0x60,
0x07, 0xF1, 0x0C, 0x03, 0x00, 0x22, 0x1A, 0x60,
0x04, 0x33, 0x00, 0x22, 0x1A, 0x60, 0x04, 0x33,
0x00, 0x22, 0x1A, 0x60, 0x04, 0x33, 0x00, 0x22,
0x1A, 0x60, 0x04, 0x33, 0x00, 0x22, 0x1A, 0x60,
0x04, 0x33, 0x00, 0x22, 0x1A, 0x60, 0x04, 0x33,
0x00, 0x23, 0x7B, 0x65, 0x7B, 0x6D, 0xFB, 0x64,
0x2D, 0x4B, 0x1B, 0x68, 0xFB, 0x64, 0xFB, 0x6C,
0xDB, 0xB2, 0x87, 0xF8, 0x50, 0x30, 0xFB, 0x6C,
0x1B, 0x0A, 0xDB, 0xB2, 0x87, 0xF8, 0x51, 0x30,
0xFB, 0x6C, 0x1B, 0x0C, 0x9B, 0xB2, 0xA7, 0xF8,
0x52, 0x30, 0x26, 0x4B, 0x1B, 0x68, 0xBB, 0x64,
0x97, 0xF8, 0x51, 0x30, 0xDB, 0xB2, 0x03, 0xF0,
0x02, 0x03, 0x00, 0x2B, 0x05, 0xD0, 0x06, 0x20,
0x79, 0x68, 0xFF, 0xF7, 0xBF, 0xFF, 0x03, 0x46,
0x01, 0xE0, 0x4F, 0xF0, 0xFF, 0x33, 0x7B, 0x64,
0x00, 0x20, 0x79, 0x68, 0xFF, 0xF7, 0xB6, 0xFF,
0x03, 0x46, 0x7B, 0x62, 0x01, 0x20, 0x79, 0x68,
0xFF, 0xF7, 0xB0, 0xFF, 0x03, 0x46, 0xBB, 0x62,
0x02, 0x20, 0x79, 0x68, 0xFF, 0xF7, 0xAA, 0xFF,
0x03, 0x46, 0xFB, 0x62, 0x03, 0x20, 0x79, 0x68,
0xFF, 0xF7, 0xA4, 0xFF, 0x03, 0x46, 0x3B, 0x63,
0x04, 0x20, 0x79, 0x68, 0xFF, 0xF7, 0x9E, 0xFF,
0x03, 0x46, 0x7B, 0x63, 0x05, 0x20, 0x79, 0x68,
0xFF, 0xF7, 0x98, 0xFF, 0x03, 0x46, 0xBB, 0x63,
0x06, 0x20, 0x79, 0x68, 0xFF, 0xF7, 0x92, 0xFF,
0x03, 0x46, 0xFB, 0x63, 0x07, 0x20, 0x79, 0x68,
0xFF, 0xF7, 0x8C, 0xFF, 0x03, 0x46, 0x3B, 0x64,
0x07, 0xF1, 0x0C, 0x03, 0x18, 0x46, 0x01, 0xF0,
0xF1, 0xFA, 0x00, 0x23, 0x7B, 0x65, 0xFE, 0xE7,
0x28, 0xED, 0x00, 0xE0, 0x38, 0xED, 0x00, 0xE0,
0x80, 0xB4, 0x83, 0xB0, 0x00, 0xAF, 0x78, 0x60,
0x03, 0x4B, 0x7A, 0x68, 0x1A, 0x60, 0x0C, 0x37,
0xBD, 0x46, 0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47,
0x40, 0x11, 0x00, 0x10, 0x2D, 0xE9, 0xB0, 0x0F,
0x97, 0xB0, 0x00, 0xAF, 0xC7, 0xE9, 0x0C, 0x01,
0xD7, 0xE9, 0x0C, 0x23, 0x1C, 0x00, 0x00, 0x25,
0x54, 0xEA, 0x05, 0x00, 0x00, 0xF0, 0x94, 0x80,
0xD7, 0xE9, 0x0C, 0x23, 0x59, 0x08, 0x4F, 0xEA,
0x32, 0x00, 0xD7, 0xE9, 0x0C, 0x23, 0x4F, 0xEA,
0x92, 0x08, 0x48, 0xEA, 0x83, 0x78, 0x4F, 0xEA,
0x93, 0x09, 0x10, 0xEB, 0x08, 0x02, 0x41, 0xEB,
0x09, 0x03, 0xC7, 0xE9, 0x14, 0x23, 0xD7, 0xE9,
0x14, 0x23, 0x4F, 0xEA, 0x12, 0x1A, 0x4A, 0xEA,
0x03, 0x7A, 0x4F, 0xEA, 0x13, 0x1B, 0xD7, 0xE9,
0x14, 0x23, 0x12, 0xEB, 0x0A, 0x02, 0x43, 0xEB,
0x0B, 0x03, 0xC7, 0xE9, 0x14, 0x23, 0xD7, 0xE9,
0x14, 0x23, 0x11, 0x0A, 0xB9, 0x62, 0xB8, 0x6A,
0x40, 0xEA, 0x03, 0x60, 0xB8, 0x62, 0x19, 0x0A,
0xF9, 0x62, 0xD7, 0xE9, 0x14, 0x23, 0xD7, 0xE9,
0x0A, 0x01, 0x12, 0x18, 0x43, 0xEB, 0x01, 0x03,
0xC7, 0xE9, 0x14, 0x23, 0xD7, 0xE9, 0x14, 0x23,
0x11, 0x0C, 0x39, 0x62, 0x38, 0x6A, 0x40, 0xEA,
0x03, 0x40, 0x38, 0x62, 0x19, 0x0C, 0x79, 0x62,
0xD7, 0xE9, 0x14, 0x23, 0xD7, 0xE9, 0x08, 0x01,
0x12, 0x18, 0x43, 0xEB, 0x01, 0x03, 0xC7, 0xE9,
0x14, 0x23, 0xD7, 0xE9, 0x14, 0x23, 0x19, 0x00,
0xB9, 0x61, 0x00, 0x22, 0xFA, 0x61, 0xD7, 0xE9,
0x14, 0x23, 0xD7, 0xE9, 0x06, 0x01, 0x12, 0x18,
0x43, 0xEB, 0x01, 0x03, 0xC7, 0xE9, 0x14, 0x23,
0xD7, 0xE9, 0x14, 0x23, 0xD1, 0x08, 0xB9, 0x60,
0xB8, 0x68, 0x40, 0xEA, 0x43, 0x70, 0xB8, 0x60,
0xD9, 0x08, 0xF9, 0x60, 0xD7, 0xE9, 0x02, 0x23,
0xC7, 0xE9, 0x14, 0x23, 0xD7, 0xE9, 0x14, 0x23,
0x92, 0x18, 0x43, 0xEB, 0x03, 0x03, 0x98, 0x00,
0x78, 0x60, 0x79, 0x68, 0x41, 0xEA, 0x92, 0x71,
0x79, 0x60, 0x90, 0x00, 0x38, 0x60, 0xD7, 0xE9,
0x00, 0x01, 0x12, 0x18, 0x43, 0xEB, 0x01, 0x03,
0xD7, 0xE9, 0x0C, 0x01, 0x82, 0x1A, 0x61, 0xEB,
0x03, 0x03, 0xC7, 0xE9, 0x12, 0x23, 0xD7, 0xE9,
0x12, 0x23, 0x06, 0x32, 0x43, 0xF1, 0x00, 0x03,
0x11, 0x09, 0x39, 0x61, 0x38, 0x69, 0x40, 0xEA,
0x03, 0x70, 0x38, 0x61, 0x19, 0x09, 0x79, 0x61,
0xD7, 0xE9, 0x14, 0x23, 0xD7, 0xE9, 0x04, 0x01,
0x12, 0x18, 0x43, 0xEB, 0x01, 0x03, 0x29, 0xE0,
0x3B, 0x6B, 0x7B, 0x64, 0x7B, 0x6C, 0x5A, 0x08,
0x7B, 0x6C, 0x9B, 0x08, 0x13, 0x44, 0x3B, 0x64,
0x3B, 0x6C, 0x1B, 0x09, 0x3A, 0x6C, 0x13, 0x44,
0x3B, 0x64, 0x3B, 0x6C, 0x1B, 0x0A, 0x3A, 0x6C,
0x13, 0x44, 0x3B, 0x64, 0x3B, 0x6C, 0x1B, 0x0C,
0x3A, 0x6C, 0x13, 0x44, 0x3B, 0x64, 0x3B, 0x6C,
0xDB, 0x08, 0x3B, 0x64, 0x3A, 0x6C, 0x13, 0x46,
0x9B, 0x00, 0x13, 0x44, 0x5B, 0x00, 0x7A, 0x6C,
0xD3, 0x1A, 0xFB, 0x63, 0xFB, 0x6B, 0x06, 0x33,
0x1A, 0x09, 0x3B, 0x6C, 0x13, 0x44, 0x1A, 0x46,
0x4F, 0xF0, 0x00, 0x03, 0x10, 0x46, 0x19, 0x46,
0x5C, 0x37, 0xBD, 0x46, 0xBD, 0xE8, 0xB0, 0x0F,
0x70, 0x47, 0x00, 0xBF, 0x80, 0xB5, 0x84, 0xB0,
0x00, 0xAF, 0xC7, 0xE9, 0x00, 0x01, 0x3A, 0x68,
0x7B, 0x68, 0x13, 0x43, 0x00, 0x2B, 0x14, 0xBF,
0x00, 0x23, 0x01, 0x23, 0xDB, 0xB2, 0xFB, 0x60,
0x08, 0xE0, 0xD7, 0xE9, 0x00, 0x01, 0xFF, 0xF7,
0x19, 0xFF, 0xC7, 0xE9, 0x00, 0x01, 0xFB, 0x68,
0x01, 0x33, 0xFB, 0x60, 0xD7, 0xE9, 0x00, 0x23,
0x52, 0xEA, 0x03, 0x01, 0xF1, 0xD1, 0xFB, 0x68,
0x18, 0x46, 0x10, 0x37, 0xBD, 0x46, 0x80, 0xBD,
0x80, 0xB5, 0x82, 0xB0, 0x00, 0xAF, 0xC7, 0xE9,
0x00, 0x01, 0xD7, 0xE9, 0x00, 0x23, 0x00, 0x2A,
0x73, 0xF1, 0x00, 0x01, 0x06, 0xDA, 0xD7, 0xE9,
0x00, 0x23, 0x52, 0x42, 0x63, 0xEB, 0x43, 0x03,
0xC7, 0xE9, 0x00, 0x23, 0xD7, 0xE9, 0x00, 0x23,
0x10, 0x46, 0x19, 0x46, 0xFF, 0xF7, 0xC6, 0xFF,
0x03, 0x46, 0x18, 0x46, 0x08, 0x37, 0xBD, 0x46,
0x80, 0xBD, 0x00, 0xBF, 0x80, 0xB4, 0x85, 0xB0,
0x00, 0xAF, 0xC7, 0xE9, 0x00, 0x01, 0x38, 0x68,
0x79, 0x68, 0x01, 0x43, 0x00, 0x29, 0x14, 0xBF,
0x00, 0x21, 0x01, 0x21, 0xC9, 0xB2, 0xF9, 0x60,
0x0A, 0xE0, 0xD7, 0xE9, 0x00, 0x01, 0x02, 0x09,
0x42, 0xEA, 0x01, 0x72, 0x0B, 0x09, 0xC7, 0xE9,
0x00, 0x23, 0xF9, 0x68, 0x01, 0x31, 0xF9, 0x60,
0xD7, 0xE9, 0x00, 0x01, 0x50, 0xEA, 0x01, 0x0C,
0xEF, 0xD1, 0xFB, 0x68, 0x18, 0x46, 0x14, 0x37,
0xBD, 0x46, 0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47,
0x80, 0xB4, 0x87, 0xB0, 0x00, 0xAF, 0x78, 0x60,
0x39, 0x60, 0x00, 0x23, 0xFB, 0x75, 0x00, 0x23,
0x3B, 0x61, 0x00, 0x23, 0xFB, 0x60, 0x7B, 0x68,
0x1B, 0x78, 0x2D, 0x2B, 0x08, 0xD1, 0x01, 0x23,
0xFB, 0x75, 0x7B, 0x68, 0x01, 0x33, 0x7B, 0x60,
0xFB, 0x68, 0x01, 0x33, 0xFB, 0x60, 0x13, 0xE0,
0x12, 0xE0, 0xFB, 0x68, 0x01, 0x33, 0xFB, 0x60,
0x3A, 0x69, 0x13, 0x46, 0x9B, 0x00, 0x13, 0x44,
0x5B, 0x00, 0x3B, 0x61, 0x7B, 0x68, 0x1B, 0x78,
0x1A, 0x46, 0x3B, 0x69, 0x13, 0x44, 0x30, 0x3B,
0x3B, 0x61, 0x7B, 0x68, 0x01, 0x33, 0x7B, 0x60,
0x7B, 0x68, 0x1B, 0x78, 0x2F, 0x2B, 0x03, 0xD9,
0x7B, 0x68, 0x1B, 0x78, 0x39, 0x2B, 0xE4, 0xD9,
0x3B, 0x68, 0x00, 0x2B, 0x02, 0xD0, 0x3B, 0x68,
0xFA, 0x68, 0x1A, 0x60, 0xFB, 0x7D, 0x00, 0x2B,
0x02, 0xD0, 0x3B, 0x69, 0x5B, 0x42, 0x00, 0xE0,
0x3B, 0x69, 0x18, 0x46, 0x1C, 0x37, 0xBD, 0x46,
0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47, 0x00, 0xBF,
0x80, 0xB5, 0x90, 0xB0, 0x00, 0xAF, 0xC7, 0xE9,
0x02, 0x01, 0x7A, 0x60, 0x00, 0x23, 0xFB, 0x63,
0x00, 0x23, 0xBB, 0x63, 0xD7, 0xE9, 0x02, 0x01,
0xFF, 0xF7, 0x70, 0xFE, 0xC7, 0xE9, 0x0C, 0x01,
0xB9, 0x68, 0x3A, 0x6B, 0x13, 0x46, 0x9B, 0x00,
0x13, 0x44, 0x5B, 0x00, 0xCB, 0x1A, 0xFB, 0x62,
0xFB, 0x6B, 0x5A, 0x1C, 0xFA, 0x63, 0xFA, 0x6A,
0xD2, 0xB2, 0x30, 0x32, 0xD2, 0xB2, 0x07, 0xF1,
0x40, 0x01, 0x0B, 0x44, 0x03, 0xF8, 0x30, 0x2C,
0xD7, 0xE9, 0x0C, 0x23, 0xC7, 0xE9, 0x02, 0x23,
0xD7, 0xE9, 0x02, 0x23, 0x52, 0xEA, 0x03, 0x01,
0xDC, 0xD1, 0xFB, 0x6B, 0xBB, 0x63, 0x7B, 0x68,
0x00, 0x2B, 0x11, 0xD0, 0x08, 0xE0, 0x7B, 0x68,
0x5A, 0x1C, 0x7A, 0x60, 0x07, 0xF1, 0x10, 0x01,
0xFA, 0x6B, 0x0A, 0x44, 0x12, 0x78, 0x1A, 0x70,
0xFB, 0x6B, 0x5A, 0x1E, 0xFA, 0x63, 0x00, 0x2B,
0xF1, 0xD1, 0x7B, 0x68, 0x00, 0x22, 0x1A, 0x70,
0xBB, 0x6B, 0x18, 0x46, 0x40, 0x37, 0xBD, 0x46,
0x80, 0xBD, 0x00, 0xBF, 0xB0, 0xB4, 0x8D, 0xB0,
0x00, 0xAF, 0xC7, 0xE9, 0x02, 0x01, 0x7A, 0x60,
0xFB, 0x70, 0x00, 0x23, 0xFB, 0x62, 0xD7, 0xE9,
0x02, 0x23, 0x52, 0xEA, 0x03, 0x01, 0x09, 0xD1,
0xFB, 0x6A, 0x5A, 0x1C, 0xFA, 0x62, 0x07, 0xF1,
0x30, 0x02, 0x13, 0x44, 0x30, 0x22, 0x03, 0xF8,
0x20, 0x2C, 0x28, 0xE0, 0x27, 0xE0, 0x3B, 0x7A,
0x03, 0xF0, 0x0F, 0x03, 0x87, 0xF8, 0x2B, 0x30,
0x97, 0xF8, 0x2B, 0x30, 0x09, 0x2B, 0x0A, 0xD9,
0xFB, 0x78, 0x00, 0x2B, 0x01, 0xD0, 0x27, 0x23,
0x00, 0xE0, 0x07, 0x23, 0x97, 0xF8, 0x2B, 0x20,
0x13, 0x44, 0x87, 0xF8, 0x2B, 0x30, 0xFB, 0x6A,
0x5A, 0x1C, 0xFA, 0x62, 0x97, 0xF8, 0x2B, 0x20,
0x30, 0x32, 0xD2, 0xB2, 0x07, 0xF1, 0x30, 0x01,
0x0B, 0x44, 0x03, 0xF8, 0x20, 0x2C, 0xD7, 0xE9,
0x02, 0x23, 0x14, 0x09, 0x44, 0xEA, 0x03, 0x74,
0x1D, 0x09, 0xC7, 0xE9, 0x02, 0x45, 0xD7, 0xE9,
0x02, 0x23, 0x52, 0xEA, 0x03, 0x01, 0xD2, 0xD1,
0xFB, 0x6A, 0x7B, 0x62, 0x7B, 0x68, 0x00, 0x2B,
0x11, 0xD0, 0x08, 0xE0, 0x7B, 0x68, 0x5A, 0x1C,
0x7A, 0x60, 0x07, 0xF1, 0x10, 0x01, 0xFA, 0x6A,
0x0A, 0x44, 0x12, 0x78, 0x1A, 0x70, 0xFB, 0x6A,
0x5A, 0x1E, 0xFA, 0x62, 0x00, 0x2B, 0xF1, 0xD1,
0x7B, 0x68, 0x00, 0x22, 0x1A, 0x70, 0x7B, 0x6A,
0x18, 0x46, 0x34, 0x37, 0xBD, 0x46, 0xB0, 0xBC,
0x70, 0x47, 0x00, 0xBF, 0x80, 0xB4, 0x85, 0xB0,
0x00, 0xAF, 0x78, 0x60, 0x00, 0x23, 0xFB, 0x60,
0x7B, 0x68, 0x00, 0x2B, 0x01, 0xD1, 0xFB, 0x68,
0x0A, 0xE0, 0x02, 0xE0, 0xFB, 0x68, 0x01, 0x33,
0xFB, 0x60, 0x7B, 0x68, 0x5A, 0x1C, 0x7A, 0x60,
0x1B, 0x78, 0x00, 0x2B, 0xF6, 0xD1, 0xFB, 0x68,
0x18, 0x46, 0x14, 0x37, 0xBD, 0x46, 0x5D, 0xF8,
0x04, 0x7B, 0x70, 0x47, 0x80, 0xB4, 0x87, 0xB0,
0x00, 0xAF, 0xF8, 0x60, 0x0B, 0x46, 0x7A, 0x60,
0xFB, 0x72, 0x00, 0x23, 0x7B, 0x61, 0x7B, 0x68,
0x00, 0x2B, 0x01, 0xDC, 0x7B, 0x69, 0x11, 0xE0,
0x0A, 0xE0, 0xFB, 0x68, 0x00, 0x2B, 0x04, 0xD0,
0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60, 0xFA, 0x7A,
0x1A, 0x70, 0x7B, 0x69, 0x01, 0x33, 0x7B, 0x61,
0x7B, 0x68, 0x5A, 0x1E, 0x7A, 0x60, 0x00, 0x2B,
0xEF, 0xD1, 0x7B, 0x69, 0x18, 0x46, 0x1C, 0x37,
0xBD, 0x46, 0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47,
0x80, 0xB5, 0x8E, 0xB0, 0x00, 0xAF, 0xF8, 0x60,
0xB9, 0x60, 0x7A, 0x60, 0xBB, 0x68, 0x1B, 0x68,
0xBB, 0x62, 0xBB, 0x6A, 0x03, 0x2B, 0x02, 0xDC,
0x6F, 0xF0, 0x02, 0x03, 0xD6, 0xE0, 0xD7, 0xED,
0x03, 0x7A, 0xF5, 0xEE, 0x40, 0x7A, 0xF1, 0xEE,
0x10, 0xFA, 0x04, 0xD1, 0xBB, 0x68, 0x69, 0x4A,
0x1A, 0x60, 0x03, 0x23, 0xCA, 0xE0, 0xBB, 0x68,
0x7B, 0x62, 0xFB, 0x68, 0x7B, 0x61, 0x7B, 0x69,
0xDB, 0x15, 0xDB, 0xB2, 0x7F, 0x3B, 0x3B, 0x62,
0x7B, 0x69, 0xC3, 0xF3, 0x16, 0x03, 0x43, 0xF4,
0x00, 0x03, 0xFB, 0x61, 0x00, 0x23, 0x3B, 0x63,
0x00, 0x23, 0x7B, 0x63, 0x3B, 0x6A, 0x1E, 0x2B,
0x02, 0xDD, 0x6F, 0xF0, 0x01, 0x03, 0xB1, 0xE0,
0x3B, 0x6A, 0x13, 0xF1, 0x17, 0x0F, 0x02, 0xDA,
0x4F, 0xF0, 0xFF, 0x33, 0xAA, 0xE0, 0x3B, 0x6A,
0x16, 0x2B, 0x06, 0xDD, 0x3B, 0x6A, 0x17, 0x3B,
0xFA, 0x69, 0x02, 0xFA, 0x03, 0xF3, 0x7B, 0x63,
0x1A, 0xE0, 0x3B, 0x6A, 0x00, 0x2B, 0x0F, 0xDB,
0x3B, 0x6A, 0xC3, 0xF1, 0x17, 0x03, 0xFA, 0x69,
0x42, 0xFA, 0x03, 0xF3, 0x7B, 0x63, 0x3B, 0x6A,
0x01, 0x33, 0xFA, 0x69, 0x02, 0xFA, 0x03, 0xF3,
0x23, 0xF0, 0x7F, 0x43, 0x3B, 0x63, 0x07, 0xE0,
0xFB, 0x69, 0x23, 0xF0, 0x7F, 0x42, 0x3B, 0x6A,
0xDB, 0x43, 0x42, 0xFA, 0x03, 0xF3, 0x3B, 0x63,
0x7B, 0x69, 0x00, 0x2B, 0x04, 0xDA, 0xBB, 0x68,
0x5A, 0x1C, 0xBA, 0x60, 0x2D, 0x22, 0x1A, 0x70,
0x7B, 0x6B, 0x00, 0x2B, 0x05, 0xD1, 0xBB, 0x68,
0x5A, 0x1C, 0xBA, 0x60, 0x30, 0x22, 0x1A, 0x70,
0x23, 0xE0, 0x7B, 0x6B, 0x00, 0x2B, 0x09, 0xDD,
0x7B, 0x6B, 0x1A, 0x46, 0x4F, 0xEA, 0xE2, 0x73,
0x10, 0x46, 0x19, 0x46, 0xBA, 0x68, 0xFF, 0xF7,
0x93, 0xFE, 0x12, 0xE0, 0xBB, 0x68, 0x5A, 0x1C,
0xBA, 0x60, 0x2D, 0x22, 0x1A, 0x70, 0x7B, 0x6B,
0x5B, 0x42, 0x1A, 0x46, 0x4F, 0xEA, 0xE2, 0x73,
0x10, 0x46, 0x19, 0x46, 0xBA, 0x68, 0xFF, 0xF7,
0x83, 0xFE, 0x02, 0xE0, 0xBB, 0x68, 0x01, 0x33,
0xBB, 0x60, 0xBB, 0x68, 0x1B, 0x78, 0x00, 0x2B,
0xF8, 0xD1, 0xBB, 0x68, 0x5A, 0x1C, 0xBA, 0x60,
0x2E, 0x22, 0x1A, 0x70, 0x3B, 0x6B, 0x00, 0x2B,
0x05, 0xD1, 0xBB, 0x68, 0x5A, 0x1C, 0xBA, 0x60,
0x30, 0x22, 0x1A, 0x70, 0x3C, 0xE0, 0x7A, 0x6A,
0xBB, 0x68, 0xD2, 0x1A, 0xBB, 0x6A, 0x13, 0x44,
0x01, 0x3B, 0xBB, 0x61, 0xBA, 0x69, 0x7B, 0x68,
0x9A, 0x42, 0xB8, 0xBF, 0x13, 0x46, 0xBB, 0x61,
0x00, 0x23, 0xFB, 0x62, 0x15, 0xE0, 0x3A, 0x6B,
0x13, 0x46, 0x9B, 0x00, 0x13, 0x44, 0x5B, 0x00,
0x3B, 0x63, 0xBB, 0x68, 0x5A, 0x1C, 0xBA, 0x60,
0x3A, 0x6B, 0x12, 0x16, 0xD2, 0xB2, 0x30, 0x32,
0xD2, 0xB2, 0x1A, 0x70, 0x3B, 0x6B, 0x23, 0xF0,
0x7F, 0x43, 0x3B, 0x63, 0xFB, 0x6A, 0x01, 0x33,
0xFB, 0x62, 0xFA, 0x6A, 0xBB, 0x69, 0x9A, 0x42,
0xE5, 0xDB, 0xBB, 0x68, 0x01, 0x3B, 0xBB, 0x60,
0x02, 0xE0, 0xBB, 0x68, 0x01, 0x3B, 0xBB, 0x60,
0xBB, 0x68, 0x1B, 0x78, 0x30, 0x2B, 0x04, 0xD1,
0xBB, 0x68, 0x01, 0x3B, 0x1B, 0x78, 0x2E, 0x2B,
0xF3, 0xD1, 0xBB, 0x68, 0x01, 0x33, 0xBB, 0x60,
0xBB, 0x68, 0x00, 0x22, 0x1A, 0x70, 0xBA, 0x68,
0x7B, 0x6A, 0xD3, 0x1A, 0x18, 0x46, 0x38, 0x37,
0xBD, 0x46, 0x80, 0xBD, 0x30, 0x2E, 0x30, 0x00,
0x80, 0xB5, 0x94, 0xB0, 0x00, 0xAF, 0xF8, 0x60,
0xB9, 0x60, 0x7A, 0x60, 0x00, 0x23, 0xFB, 0x63,
0x00, 0x23, 0x7B, 0x62, 0xE9, 0xE2, 0x06, 0x23,
0x3B, 0x63, 0xBB, 0x68, 0x1B, 0x78, 0x25, 0x2B,
0x1F, 0xD0, 0xFB, 0x68, 0x00, 0x2B, 0x15, 0xD0,
0xBB, 0x68, 0x1B, 0x78, 0x0A, 0x2B, 0x0B, 0xD1,
0xB2, 0x4B, 0x1B, 0x78, 0x00, 0x2B, 0x07, 0xD0,
0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60, 0x0D, 0x22,
0x1A, 0x70, 0xFB, 0x6B, 0x01, 0x33, 0xFB, 0x63,
0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60, 0xBA, 0x68,
0x12, 0x78, 0x1A, 0x70, 0xBB, 0x68, 0x01, 0x33,
0xBB, 0x60, 0xFB, 0x6B, 0x01, 0x33, 0xFB, 0x63,
0xC3, 0xE2, 0xBB, 0x68, 0x01, 0x33, 0xBB, 0x60,
0x00, 0x23, 0x87, 0xF8, 0x2D, 0x30, 0x97, 0xF8,
0x2D, 0x30, 0x87, 0xF8, 0x2E, 0x30, 0x20, 0x23,
0x87, 0xF8, 0x2F, 0x30, 0xBB, 0x68, 0x1B, 0x78,
0x30, 0x2B, 0x05, 0xD1, 0x30, 0x23, 0x87, 0xF8,
0x2F, 0x30, 0xBB, 0x68, 0x01, 0x33, 0xBB, 0x60,
0x07, 0xF1, 0x10, 0x03, 0xB8, 0x68, 0x19, 0x46,
0xFF, 0xF7, 0x8E, 0xFD, 0x03, 0x46, 0xBB, 0x63,
0x3B, 0x69, 0xBA, 0x68, 0x13, 0x44, 0xBB, 0x60,
0xBB, 0x68, 0x1B, 0x78, 0x73, 0x2B, 0x05, 0xD0,
0xBB, 0x6B, 0x00, 0x2B, 0x02, 0xDA, 0xBB, 0x6B,
0x5B, 0x42, 0xBB, 0x63, 0xBB, 0x68, 0x1B, 0x78,
0x2E, 0x2B, 0x0E, 0xD1, 0xBB, 0x68, 0x01, 0x33,
0xBB, 0x60, 0x07, 0xF1, 0x10, 0x03, 0xB8, 0x68,
0x19, 0x46, 0xFF, 0xF7, 0x71, 0xFD, 0x03, 0x46,
0x3B, 0x63, 0x3B, 0x69, 0xBA, 0x68, 0x13, 0x44,
0xBB, 0x60, 0xBB, 0x68, 0x1B, 0x78, 0x6C, 0x2B,
0x0C, 0xD1, 0xBB, 0x68, 0x01, 0x33, 0xBB, 0x60,
0xBB, 0x68, 0x1B, 0x78, 0x6C, 0x2B, 0x05, 0xD1,
0xBB, 0x68, 0x01, 0x33, 0xBB, 0x60, 0x01, 0x23,
0x87, 0xF8, 0x2D, 0x30, 0xBB, 0x68, 0x1B, 0x78,
0x46, 0x3B, 0x32, 0x2B, 0x00, 0xF2, 0x5D, 0x82,
0x01, 0xA1, 0x51, 0xF8, 0x23, 0xF0, 0x00, 0xBF,
0xD1, 0x8E, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x5F, 0x8C, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x65, 0x8B, 0x00, 0x00,
0x95, 0x8D, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0xD1, 0x8E, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x95, 0x8D, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x8B, 0x8B, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0xFF, 0x8C, 0x00, 0x00,
0x4B, 0x8F, 0x00, 0x00, 0x4B, 0x8F, 0x00, 0x00,
0x59, 0x8C, 0x00, 0x00, 0x7B, 0x68, 0x1A, 0x1D,
0x7A, 0x60, 0x1B, 0x68, 0x87, 0xF8, 0x23, 0x30,
0xFB, 0x68, 0x00, 0x2B, 0x05, 0xD0, 0xFB, 0x68,
0x5A, 0x1C, 0xFA, 0x60, 0x97, 0xF8, 0x23, 0x20,
0x1A, 0x70, 0xFB, 0x6B, 0x01, 0x33, 0xFB, 0x63,
0xEC, 0xE1, 0x7B, 0x68, 0x1A, 0x1D, 0x7A, 0x60,
0x1B, 0x68, 0xFB, 0x64, 0xF8, 0x6C, 0xFF, 0xF7,
0xC5, 0xFD, 0x78, 0x62, 0xBB, 0x6B, 0x00, 0x2B,
0x1F, 0xDD, 0xBA, 0x6B, 0x7B, 0x6A, 0x9A, 0x42,
0x1B, 0xD9, 0xBA, 0x6B, 0x7B, 0x6A, 0xD3, 0x1A,
0xBB, 0x63, 0x97, 0xF8, 0x2F, 0x30, 0xF8, 0x68,
0x19, 0x46, 0xBA, 0x6B, 0xFF, 0xF7, 0xCE, 0xFD,
0xB8, 0x63, 0xFB, 0x68, 0x00, 0x2B, 0x01, 0xD0,
0xBB, 0x6B, 0x00, 0xE0, 0x00, 0x23, 0xFA, 0x68,
0x13, 0x44, 0xFB, 0x60, 0xBB, 0x6B, 0xFA, 0x6B,
0x13, 0x44, 0xFB, 0x63, 0x00, 0x23, 0xBB, 0x63,
0x0F, 0xE0, 0x0E, 0xE0, 0xFB, 0x68, 0x00, 0x2B,
0x05, 0xD0, 0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60,
0xFA, 0x6C, 0x12, 0x78, 0x1A, 0x70, 0xFB, 0x6C,
0x01, 0x33, 0xFB, 0x64, 0xFB, 0x6B, 0x01, 0x33,
0xFB, 0x63, 0xFB, 0x6C, 0x1B, 0x78, 0x00, 0x2B,
0xEC, 0xD1, 0xBB, 0x6B, 0x00, 0x2B, 0x22, 0xD0,
0xBB, 0x6B, 0x5B, 0x42, 0xBB, 0x63, 0xBA, 0x6B,
0x7B, 0x6A, 0x9A, 0x42, 0x1B, 0xD9, 0xBA, 0x6B,
0x7B, 0x6A, 0xD3, 0x1A, 0xBB, 0x63, 0x97, 0xF8,
0x2F, 0x30, 0xF8, 0x68, 0x19, 0x46, 0xBA, 0x6B,
0xFF, 0xF7, 0x94, 0xFD, 0xB8, 0x63, 0xFB, 0x68,
0x00, 0x2B, 0x01, 0xD0, 0xBB, 0x6B, 0x00, 0xE0,
0x00, 0x23, 0xFA, 0x68, 0x13, 0x44, 0xFB, 0x60,
0xBB, 0x6B, 0xFA, 0x6B, 0x13, 0x44, 0xFB, 0x63,
0x00, 0x23, 0xBB, 0x63, 0x86, 0xE1, 0x85, 0xE1,
0x01, 0x23, 0x87, 0xF8, 0x2E, 0x30, 0x97, 0xF8,
0x2D, 0x30, 0x00, 0x2B, 0x0C, 0xD0, 0x7B, 0x68,
0x07, 0x33, 0x23, 0xF0, 0x07, 0x03, 0x03, 0xF1,
0x08, 0x02, 0x7A, 0x60, 0xD3, 0xE9, 0x00, 0x23,
0x09, 0xE0, 0x00, 0xBF, 0x38, 0x11, 0x00, 0x10,
0x7B, 0x68, 0x1A, 0x1D, 0x7A, 0x60, 0x1B, 0x68,
0x1A, 0x46, 0x4F, 0xF0, 0x00, 0x03, 0xC7, 0xE9,
0x10, 0x23, 0xBB, 0x6B, 0x00, 0x2B, 0x1E, 0xD0,
0xD7, 0xE9, 0x10, 0x01, 0xFF, 0xF7, 0x26, 0xFC,
0x03, 0x46, 0xBA, 0x6B, 0xD3, 0x1A, 0xBB, 0x63,
0x97, 0xF8, 0x2F, 0x30, 0xF8, 0x68, 0x19, 0x46,
0xBA, 0x6B, 0xFF, 0xF7, 0x53, 0xFD, 0xB8, 0x63,
0xFB, 0x68, 0x00, 0x2B, 0x01, 0xD0, 0xBB, 0x6B,
0x00, 0xE0, 0x00, 0x23, 0xFA, 0x68, 0x13, 0x44,
0xFB, 0x60, 0xBB, 0x6B, 0xFA, 0x6B, 0x13, 0x44,
0xFB, 0x63, 0x00, 0x23, 0xBB, 0x63, 0x97, 0xF8,
0x2E, 0x30, 0xD7, 0xE9, 0x10, 0x01, 0xFA, 0x68,
0xFF, 0xF7, 0xBC, 0xFC, 0x78, 0x63, 0xFB, 0x68,
0x00, 0x2B, 0x03, 0xD0, 0x7B, 0x6B, 0xFA, 0x68,
0x13, 0x44, 0xFB, 0x60, 0x7B, 0x6B, 0xFA, 0x6B,
0x13, 0x44, 0xFB, 0x63, 0x32, 0xE1, 0x97, 0xF8,
0x2D, 0x30, 0x00, 0x2B, 0x09, 0xD0, 0x7B, 0x68,
0x07, 0x33, 0x23, 0xF0, 0x07, 0x03, 0x03, 0xF1,
0x08, 0x02, 0x7A, 0x60, 0xD3, 0xE9, 0x00, 0x23,
0x06, 0xE0, 0x7B, 0x68, 0x1A, 0x1D, 0x7A, 0x60,
0x1B, 0x68, 0x1A, 0x46, 0x4F, 0xF0, 0x00, 0x03,
0xC7, 0xE9, 0x10, 0x23, 0xBB, 0x6B, 0x00, 0x2B,
0x1E, 0xD0, 0xD7, 0xE9, 0x10, 0x01, 0xFF, 0xF7,
0x99, 0xFB, 0x03, 0x46, 0xBA, 0x6B, 0xD3, 0x1A,
0xBB, 0x63, 0x97, 0xF8, 0x2F, 0x30, 0xF8, 0x68,
0x19, 0x46, 0xBA, 0x6B, 0xFF, 0xF7, 0x06, 0xFD,
0xB8, 0x63, 0xFB, 0x68, 0x00, 0x2B, 0x01, 0xD0,
0xBB, 0x6B, 0x00, 0xE0, 0x00, 0x23, 0xFA, 0x68,
0x13, 0x44, 0xFB, 0x60, 0xBB, 0x6B, 0xFA, 0x6B,
0x13, 0x44, 0xFB, 0x63, 0x00, 0x23, 0xBB, 0x63,
0xD7, 0xE9, 0x10, 0x01, 0xFA, 0x68, 0xFF, 0xF7,
0x27, 0xFC, 0x78, 0x63, 0xFB, 0x68, 0x00, 0x2B,
0x03, 0xD0, 0x7B, 0x6B, 0xFA, 0x68, 0x13, 0x44,
0xFB, 0x60, 0x7B, 0x6B, 0xFA, 0x6B, 0x13, 0x44,
0xFB, 0x63, 0xE7, 0xE0, 0x97, 0xF8, 0x2D, 0x30,
0x00, 0x2B, 0x09, 0xD0, 0x7B, 0x68, 0x07, 0x33,
0x23, 0xF0, 0x07, 0x03, 0x03, 0xF1, 0x08, 0x02,
0x7A, 0x60, 0xD3, 0xE9, 0x00, 0x23, 0x06, 0xE0,
0x7B, 0x68, 0x1A, 0x1D, 0x7A, 0x60, 0x1B, 0x68,
0x1A, 0x46, 0x4F, 0xEA, 0xE2, 0x73, 0xC7, 0xE9,
0x06, 0x23, 0xD7, 0xE9, 0x06, 0x23, 0x00, 0x2A,
0x73, 0xF1, 0x00, 0x01, 0x0A, 0xDA, 0xD7, 0xE9,
0x06, 0x23, 0x52, 0x42, 0x63, 0xEB, 0x43, 0x03,
0xC7, 0xE9, 0x10, 0x23, 0x01, 0x23, 0x87, 0xF8,
0x2C, 0x30, 0x06, 0xE0, 0xD7, 0xE9, 0x06, 0x23,
0xC7, 0xE9, 0x10, 0x23, 0x00, 0x23, 0x87, 0xF8,
0x2C, 0x30, 0xBB, 0x6B, 0x00, 0x2B, 0x4A, 0xD0,
0xD7, 0xE9, 0x10, 0x23, 0x10, 0x46, 0x19, 0x46,
0xFF, 0xF7, 0x56, 0xFB, 0x03, 0x46, 0xBA, 0x6B,
0xD3, 0x1A, 0xBB, 0x63, 0x97, 0xF8, 0x2C, 0x30,
0x00, 0x2B, 0x11, 0xD0, 0xBB, 0x6B, 0x01, 0x3B,
0xBB, 0x63, 0x97, 0xF8, 0x2F, 0x30, 0x30, 0x2B,
0x0A, 0xD1, 0xFB, 0x68, 0x00, 0x2B, 0x04, 0xD0,
0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60, 0x2D, 0x22,
0x1A, 0x70, 0xFB, 0x6B, 0x01, 0x33, 0xFB, 0x63,
0x97, 0xF8, 0x2F, 0x30, 0xF8, 0x68, 0x19, 0x46,
0xBA, 0x6B, 0xFF, 0xF7, 0x8B, 0xFC, 0xB8, 0x63,
0xFB, 0x68, 0x00, 0x2B, 0x01, 0xD0, 0xBB, 0x6B,
0x00, 0xE0, 0x00, 0x23, 0xFA, 0x68, 0x13, 0x44,
0xFB, 0x60, 0xBB, 0x6B, 0xFA, 0x6B, 0x13, 0x44,
0xFB, 0x63, 0x00, 0x23, 0xBB, 0x63, 0x97, 0xF8,
0x2C, 0x30, 0x00, 0x2B, 0x1E, 0xD0, 0x97, 0xF8,
0x2F, 0x30, 0x20, 0x2B, 0x1A, 0xD1, 0xFB, 0x68,
0x00, 0x2B, 0x04, 0xD0, 0xFB, 0x68, 0x5A, 0x1C,
0xFA, 0x60, 0x2D, 0x22, 0x1A, 0x70, 0xFB, 0x6B,
0x01, 0x33, 0xFB, 0x63, 0x0E, 0xE0, 0x97, 0xF8,
0x2C, 0x30, 0x00, 0x2B, 0x0A, 0xD0, 0xFB, 0x68,
0x00, 0x2B, 0x04, 0xD0, 0xFB, 0x68, 0x5A, 0x1C,
0xFA, 0x60, 0x2D, 0x22, 0x1A, 0x70, 0xFB, 0x6B,
0x01, 0x33, 0xFB, 0x63, 0xD7, 0xE9, 0x10, 0x01,
0xFA, 0x68, 0xFF, 0xF7, 0x89, 0xFB, 0x78, 0x63,
0xFB, 0x68, 0x00, 0x2B, 0x03, 0xD0, 0x7B, 0x6B,
0xFA, 0x68, 0x13, 0x44, 0xFB, 0x60, 0x7B, 0x6B,
0xFA, 0x6B, 0x13, 0x44, 0xFB, 0x63, 0x49, 0xE0,
0xFB, 0x68, 0x00, 0x2B, 0x38, 0xD0, 0x7B, 0x68,
0x07, 0x33, 0x23, 0xF0, 0x07, 0x03, 0x03, 0xF1,
0x08, 0x02, 0x7A, 0x60, 0xD3, 0xE9, 0x00, 0x23,
0x10, 0x46, 0x19, 0x46, 0x00, 0xF0, 0x98, 0xFD,
0x03, 0x46, 0x7B, 0x61, 0xFB, 0x68, 0x14, 0x22,
0x1A, 0x60, 0x78, 0x69, 0xF9, 0x68, 0x3A, 0x6B,
0xFF, 0xF7, 0x52, 0xFC, 0x78, 0x63, 0x7B, 0x6B,
0x00, 0x2B, 0x14, 0xDA, 0x7B, 0x6B, 0xB3, 0xF1,
0xFF, 0x3F, 0x02, 0xD1, 0x1D, 0x4B, 0xBB, 0x62,
0x08, 0xE0, 0x7B, 0x6B, 0x13, 0xF1, 0x02, 0x0F,
0x02, 0xD1, 0x1B, 0x4B, 0xBB, 0x62, 0x01, 0xE0,
0x1A, 0x4B, 0xBB, 0x62, 0xFB, 0x68, 0xBA, 0x6A,
0x1A, 0x60, 0x03, 0x23, 0x7B, 0x63, 0x7B, 0x6B,
0xFA, 0x6B, 0x13, 0x44, 0xFB, 0x63, 0x7B, 0x6B,
0xFA, 0x68, 0x13, 0x44, 0xFB, 0x60, 0x0D, 0xE0,
0x0C, 0xE0, 0xFB, 0x68, 0x00, 0x2B, 0x05, 0xD0,
0xFB, 0x68, 0x5A, 0x1C, 0xFA, 0x60, 0xBA, 0x68,
0x12, 0x78, 0x1A, 0x70, 0xFB, 0x6B, 0x01, 0x33,
0xFB, 0x63, 0x00, 0xBF, 0xBB, 0x68, 0x01, 0x33,
0xBB, 0x60, 0xBB, 0x68, 0x1B, 0x78, 0x00, 0x2B,
0x7F, 0xF4, 0x11, 0xAD, 0xFB, 0x68, 0x00, 0x2B,
0x02, 0xD0, 0xFB, 0x68, 0x00, 0x22, 0x1A, 0x70,
0xFB, 0x6B, 0x18, 0x46, 0x50, 0x37, 0xBD, 0x46,
0x80, 0xBD, 0x00, 0xBF, 0x30, 0x2E, 0x30, 0x00,
0x23, 0x2E, 0x23, 0x00, 0x3F, 0x2E, 0x3F, 0x00,
0x0F, 0xB4, 0x80, 0xB5, 0x82, 0xB0, 0x00, 0xAF,
0x07, 0xF1, 0x14, 0x03, 0x3B, 0x60, 0x09, 0x48,
0x39, 0x69, 0x3A, 0x68, 0xFF, 0xF7, 0xE8, 0xFC,
0x78, 0x60, 0x07, 0x4B, 0x1B, 0x68, 0x05, 0x48,
0x98, 0x47, 0x7B, 0x68, 0x18, 0x46, 0x08, 0x37,
0xBD, 0x46, 0xBD, 0xE8, 0x80, 0x40, 0x04, 0xB0,
0x70, 0x47, 0x00, 0xBF, 0x38, 0x10, 0x00, 0x10,
0x40, 0x11, 0x00, 0x10, 0x80, 0xB5, 0x00, 0xAF,
0x01, 0x48, 0xFF, 0xF7, 0xDD, 0xFF, 0x80, 0xBD,
0xD8, 0x9A, 0x00, 0x00, 0x90, 0xB4, 0x82, 0xB0,
0x00, 0xAF, 0x78, 0x60, 0x7B, 0x68, 0x5B, 0x68,
0x03, 0xF0, 0x02, 0x03, 0x00, 0x2B, 0x00, 0xF0,
0x94, 0x80, 0x7B, 0x68, 0x1B, 0x68, 0x00, 0x2B,
0x00, 0xDA, 0x4D, 0xE0, 0x92, 0x4B, 0x73, 0x22,
0x1A, 0x60, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0xF8, 0x03, 0x5A, 0x08, 0x8F, 0x4B, 0x13, 0x44,
0x1A, 0x46, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x07, 0x03, 0x9B, 0x00, 0x02, 0x21, 0x99, 0x40,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xF8, 0x03,
0x58, 0x08, 0x88, 0x4B, 0x03, 0x44, 0x18, 0x68,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0x07, 0x03,
0x9B, 0x00, 0x07, 0x24, 0x04, 0xFA, 0x03, 0xF3,
0xDB, 0x43, 0x03, 0x40, 0x0B, 0x43, 0x13, 0x60,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xFC, 0x03,
0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0x80, 0x33,
0x1A, 0x46, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x03, 0x03, 0xDB, 0x00, 0x18, 0x21, 0x99, 0x40,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xFC, 0x03,
0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0x80, 0x33,
0x18, 0x68, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x03, 0x03, 0xDB, 0x00, 0xFF, 0x24, 0x04, 0xFA,
0x03, 0xF3, 0xDB, 0x43, 0x03, 0x40, 0x0B, 0x43,
0x13, 0x60, 0x6D, 0x4B, 0x00, 0x22, 0x1A, 0x60,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03,
0xDA, 0x08, 0x6B, 0x4B, 0x13, 0x44, 0x7A, 0x68,
0x12, 0x68, 0x02, 0xF0, 0x1F, 0x02, 0x01, 0x21,
0x01, 0xFA, 0x02, 0xF2, 0x1A, 0x60, 0x7B, 0x68,
0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03, 0xDA, 0x08,
0x64, 0x4B, 0x13, 0x44, 0x1A, 0x46, 0x7B, 0x68,
0x5B, 0x68, 0x03, 0xF0, 0x01, 0x03, 0x00, 0x2B,
0x10, 0xD0, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xD9, 0x08, 0x5D, 0x4B, 0x0B, 0x44,
0x19, 0x68, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x1F, 0x03, 0x01, 0x20, 0x00, 0xFA, 0x03, 0xF3,
0x0B, 0x43, 0x10, 0xE0, 0x7B, 0x68, 0x1B, 0x68,
0x03, 0xF0, 0x20, 0x03, 0xD9, 0x08, 0x55, 0x4B,
0x0B, 0x44, 0x19, 0x68, 0x7B, 0x68, 0x1B, 0x68,
0x03, 0xF0, 0x1F, 0x03, 0x01, 0x20, 0x00, 0xFA,
0x03, 0xF3, 0xDB, 0x43, 0x0B, 0x40, 0x13, 0x60,
0x92, 0xE0, 0x7B, 0x68, 0x1B, 0x68, 0x00, 0x2B,
0x00, 0xDA, 0x4D, 0xE0, 0x48, 0x4B, 0x73, 0x22,
0x1A, 0x60, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0xF8, 0x03, 0x5A, 0x08, 0x45, 0x4B, 0x13, 0x44,
0x1A, 0x46, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x07, 0x03, 0x9B, 0x00, 0x06, 0x21, 0x99, 0x40,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xF8, 0x03,
0x58, 0x08, 0x3E, 0x4B, 0x03, 0x44, 0x18, 0x68,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0x07, 0x03,
0x9B, 0x00, 0x07, 0x24, 0x04, 0xFA, 0x03, 0xF3,
0xDB, 0x43, 0x03, 0x40, 0x0B, 0x43, 0x13, 0x60,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xFC, 0x03,
0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0x80, 0x33,
0x1A, 0x46, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x03, 0x03, 0xDB, 0x00, 0x18, 0x21, 0x99, 0x40,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0xFC, 0x03,
0x03, 0xF1, 0x80, 0x43, 0x03, 0xF5, 0x80, 0x33,
0x18, 0x68, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x03, 0x03, 0xDB, 0x00, 0xFF, 0x24, 0x04, 0xFA,
0x03, 0xF3, 0xDB, 0x43, 0x03, 0x40, 0x0B, 0x43,
0x13, 0x60, 0x23, 0x4B, 0x00, 0x22, 0x1A, 0x60,
0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03,
0xDA, 0x08, 0x23, 0x4B, 0x13, 0x44, 0x7A, 0x68,
0x12, 0x68, 0x02, 0xF0, 0x1F, 0x02, 0x01, 0x21,
0x01, 0xFA, 0x02, 0xF2, 0x1A, 0x60, 0x7B, 0x68,
0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03, 0xDA, 0x08,
0x1A, 0x4B, 0x13, 0x44, 0x1A, 0x46, 0x7B, 0x68,
0x5B, 0x68, 0x03, 0xF0, 0x01, 0x03, 0x00, 0x2B,
0x10, 0xD0, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xD9, 0x08, 0x13, 0x4B, 0x0B, 0x44,
0x19, 0x68, 0x7B, 0x68, 0x1B, 0x68, 0x03, 0xF0,
0x1F, 0x03, 0x01, 0x20, 0x00, 0xFA, 0x03, 0xF3,
0x0B, 0x43, 0x10, 0xE0, 0x7B, 0x68, 0x1B, 0x68,
0x03, 0xF0, 0x20, 0x03, 0xD9, 0x08, 0x0B, 0x4B,
0x0B, 0x44, 0x19, 0x68, 0x7B, 0x68, 0x1B, 0x68,
0x03, 0xF0, 0x1F, 0x03, 0x01, 0x20, 0x00, 0xFA,
0x03, 0xF3, 0xDB, 0x43, 0x0B, 0x40, 0x13, 0x60,
0x08, 0x37, 0xBD, 0x46, 0x90, 0xBC, 0x70, 0x47,
0x60, 0x00, 0x01, 0x40, 0x40, 0x00, 0x01, 0x40,
0xA8, 0x00, 0x01, 0x40, 0x88, 0x00, 0x01, 0x40,
0xB4, 0x00, 0x01, 0x40, 0x80, 0xB5, 0x84, 0xB0,
0x00, 0xAF, 0x78, 0x60, 0x39, 0x60, 0x00, 0x23,
0xFB, 0x60, 0x09, 0xE0, 0xFB, 0x68, 0xDB, 0x00,
0x7A, 0x68, 0x13, 0x44, 0x18, 0x46, 0xFF, 0xF7,
0xB1, 0xFE, 0xFB, 0x68, 0x01, 0x33, 0xFB, 0x60,
0xFA, 0x68, 0x3B, 0x68, 0x9A, 0x42, 0xF1, 0xD3,
0x10, 0x37, 0xBD, 0x46, 0x80, 0xBD, 0x00, 0xBF,
0x80, 0xB4, 0x83, 0xB0, 0x00, 0xAF, 0x78, 0x60,
0x39, 0x60, 0x3B, 0x68, 0xDB, 0x00, 0x7A, 0x68,
0x13, 0x44, 0x5B, 0x68, 0x03, 0xF0, 0x02, 0x03,
0x00, 0x2B, 0x43, 0xD0, 0x3B, 0x68, 0xDB, 0x00,
0x7A, 0x68, 0x13, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xDA, 0x08, 0x2A, 0x4B, 0x13, 0x44,
0x1A, 0x46, 0x3B, 0x68, 0xDB, 0x00, 0x79, 0x68,
0x0B, 0x44, 0x5B, 0x68, 0x03, 0xF0, 0x01, 0x03,
0x00, 0x2B, 0x16, 0xD0, 0x3B, 0x68, 0xDB, 0x00,
0x79, 0x68, 0x0B, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xD9, 0x08, 0x20, 0x4B, 0x0B, 0x44,
0x19, 0x68, 0x3B, 0x68, 0xDB, 0x00, 0x78, 0x68,
0x03, 0x44, 0x1B, 0x68, 0x03, 0xF0, 0x1F, 0x03,
0x01, 0x20, 0x00, 0xFA, 0x03, 0xF3, 0x0B, 0x43,
0x16, 0xE0, 0x3B, 0x68, 0xDB, 0x00, 0x79, 0x68,
0x0B, 0x44, 0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03,
0xD9, 0x08, 0x15, 0x4B, 0x0B, 0x44, 0x19, 0x68,
0x3B, 0x68, 0xDB, 0x00, 0x78, 0x68, 0x03, 0x44,
0x1B, 0x68, 0x03, 0xF0, 0x1F, 0x03, 0x01, 0x20,
0x00, 0xFA, 0x03, 0xF3, 0xDB, 0x43, 0x0B, 0x40,
0x13, 0x60, 0x14, 0xE0, 0x3B, 0x68, 0xDB, 0x00,
0x7A, 0x68, 0x13, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xDA, 0x08, 0x09, 0x4B, 0x13, 0x44,
0x3A, 0x68, 0xD2, 0x00, 0x79, 0x68, 0x0A, 0x44,
0x12, 0x68, 0x02, 0xF0, 0x1F, 0x02, 0x01, 0x21,
0x01, 0xFA, 0x02, 0xF2, 0x1A, 0x60, 0x0C, 0x37,
0xBD, 0x46, 0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47,
0x88, 0x00, 0x01, 0x40, 0xA8, 0x00, 0x01, 0x40,
0x80, 0xB4, 0x83, 0xB0, 0x00, 0xAF, 0x78, 0x60,
0x39, 0x60, 0x3B, 0x68, 0xDB, 0x00, 0x7A, 0x68,
0x13, 0x44, 0x5B, 0x68, 0x03, 0xF0, 0x02, 0x03,
0x00, 0x2B, 0x43, 0xD0, 0x3B, 0x68, 0xDB, 0x00,
0x7A, 0x68, 0x13, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xDA, 0x08, 0x2A, 0x4B, 0x13, 0x44,
0x1A, 0x46, 0x3B, 0x68, 0xDB, 0x00, 0x79, 0x68,
0x0B, 0x44, 0x5B, 0x68, 0x03, 0xF0, 0x01, 0x03,
0x00, 0x2B, 0x16, 0xD1, 0x3B, 0x68, 0xDB, 0x00,
0x79, 0x68, 0x0B, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xD9, 0x08, 0x20, 0x4B, 0x0B, 0x44,
0x19, 0x68, 0x3B, 0x68, 0xDB, 0x00, 0x78, 0x68,
0x03, 0x44, 0x1B, 0x68, 0x03, 0xF0, 0x1F, 0x03,
0x01, 0x20, 0x00, 0xFA, 0x03, 0xF3, 0x0B, 0x43,
0x16, 0xE0, 0x3B, 0x68, 0xDB, 0x00, 0x79, 0x68,
0x0B, 0x44, 0x1B, 0x68, 0x03, 0xF0, 0x20, 0x03,
0xD9, 0x08, 0x15, 0x4B, 0x0B, 0x44, 0x19, 0x68,
0x3B, 0x68, 0xDB, 0x00, 0x78, 0x68, 0x03, 0x44,
0x1B, 0x68, 0x03, 0xF0, 0x1F, 0x03, 0x01, 0x20,
0x00, 0xFA, 0x03, 0xF3, 0xDB, 0x43, 0x0B, 0x40,
0x13, 0x60, 0x14, 0xE0, 0x3B, 0x68, 0xDB, 0x00,
0x7A, 0x68, 0x13, 0x44, 0x1B, 0x68, 0x03, 0xF0,
0x20, 0x03, 0xDA, 0x08, 0x09, 0x4B, 0x13, 0x44,
0x3A, 0x68, 0xD2, 0x00, 0x79, 0x68, 0x0A, 0x44,
0x12, 0x68, 0x02, 0xF0, 0x1F, 0x02, 0x01, 0x21,
0x01, 0xFA, 0x02, 0xF2, 0x1A, 0x60, 0x0C, 0x37,
0xBD, 0x46, 0x5D, 0xF8, 0x04, 0x7B, 0x70, 0x47,
0x88, 0x00, 0x01, 0x40, 0xB4, 0x00, 0x01, 0x40,
0x80, 0xB5, 0x86, 0xB0, 0x00, 0xAF, 0xF8, 0x60,
0xB9, 0x60, 0x7A, 0x60, 0x00, 0x23, 0x7B, 0x61,
0x14, 0xE0, 0x7B, 0x69, 0x01, 0x22, 0x02, 0xFA,
0x03, 0xF3, 0x1A, 0x46, 0x7B, 0x68, 0x13, 0x40,
0x00, 0x2B, 0x04, 0xD0, 0xF8, 0x68, 0x79, 0x69,
0xFF, 0xF7, 0x0A, 0xFF, 0x03, 0xE0, 0xF8, 0x68,
0x79, 0x69, 0xFF, 0xF7, 0x75, 0xFF, 0x7B, 0x69,
0x01, 0x33, 0x7B, 0x61, 0x7A, 0x69, 0xBB, 0x68,
0x9A, 0x42, 0xE6, 0xD3, 0x18, 0x37, 0xBD, 0x46,
0x80, 0xBD, 0x00, 0xBF, 0x12, 0x48, 0x13, 0x49,
0x01, 0x60, 0xD1, 0xF8, 0x00, 0xD0, 0x12, 0x48,
0x01, 0x68, 0x41, 0xF4, 0x70, 0x01, 0x01, 0x60,
0xBF, 0xF3, 0x4F, 0x8F, 0xBF, 0xF3, 0x6F, 0x8F,
0x0E, 0x48, 0x0F, 0x49, 0x0F, 0x4A, 0x50, 0xF8,
0x04, 0x3B, 0x41, 0xF8, 0x04, 0x3B, 0x91, 0x42,
0x7F, 0xF7, 0xF9, 0xAF, 0x0C, 0x48, 0x0D, 0x49,
0x4F, 0xF0, 0x00, 0x02, 0x88, 0x42, 0xB8, 0xBF,
0x40, 0xF8, 0x04, 0x2B, 0xFF, 0xF6, 0xFA, 0xAF,
0xFE, 0xF7, 0xFE, 0xFD, 0x00, 0xBE, 0x00, 0x00,
0x08, 0xED, 0x00, 0xE0, 0x00, 0x80, 0x00, 0x00,
0x88, 0xED, 0x00, 0xE0, 0x04, 0x9B, 0x00, 0x00,
0x00, 0x10, 0x00, 0x10, 0x34, 0x10, 0x00, 0x10,
0x34, 0x10, 0x00, 0x10, 0x44, 0x11, 0x00, 0x10,
0x80, 0xB4, 0x00, 0xAF, 0xFE, 0xE7, 0x00, 0xBF,
0x80, 0xB4, 0x00, 0xAF, 0xFE, 0xE7, 0x00, 0xBF,
0x08, 0xB5, 0x00, 0xF0, 0xD7, 0xF9, 0x00, 0xF0,
0x75, 0xFA, 0x01, 0x20, 0x00, 0xF0, 0xE8, 0xF9,
0x01, 0x20, 0x00, 0xF0, 0x83, 0xF8, 0x02, 0x20,
0x00, 0xF0, 0x80, 0xF8, 0x00, 0xF0, 0xEE, 0xF9,
0xBD, 0xE8, 0x08, 0x40, 0x00, 0xF0, 0xBE, 0xB9,
0x10, 0xB5, 0x10, 0x4B, 0x1B, 0x68, 0x13, 0xF0,
0x01, 0x04, 0x86, 0xB0, 0x01, 0xD0, 0x06, 0xB0,
0x10, 0xBD, 0x06, 0xA8, 0x0C, 0x4B, 0x40, 0xF8,
0x14, 0x3D, 0x00, 0xF0, 0xFD, 0xF9, 0x0B, 0x4B,
0x0B, 0x49, 0x0C, 0x4A, 0x73, 0x20, 0x18, 0x60,
0x08, 0x68, 0x20, 0xF0, 0x70, 0x00, 0x08, 0x60,
0x11, 0x68, 0x21, 0xF4, 0x7F, 0x41, 0x41, 0xF4,
0x80, 0x51, 0x11, 0x60, 0x1C, 0x60, 0x06, 0xB0,
0x10, 0xBD, 0x00, 0xBF, 0x3C, 0x11, 0x00, 0x10,
0x40, 0x42, 0x0F, 0x00, 0x60, 0x00, 0x01, 0x40,
0x54, 0x00, 0x01, 0x40, 0x28, 0x00, 0x01, 0x40,
0x0F, 0x4B, 0x1B, 0x68, 0x10, 0xB5, 0x13, 0xF0,
0x01, 0x04, 0x00, 0xD0, 0x10, 0xBD, 0x00, 0xF0,
0x37, 0xF9, 0x0C, 0x4B, 0x0C, 0x49, 0x0D, 0x4A,
0x73, 0x20, 0x18, 0x60, 0x08, 0x68, 0x20, 0xF0,
0x70, 0x00, 0x40, 0xF0, 0x20, 0x00, 0x08, 0x60,
0x11, 0x68, 0x21, 0xF4, 0x7F, 0x41, 0x41, 0xF4,
0xC0, 0x51, 0x11, 0x60, 0x1C, 0x60, 0xBD, 0xE8,
0x10, 0x40, 0x00, 0xF0, 0x15, 0xBA, 0x00, 0xBF,
0x3C, 0x11, 0x00, 0x10, 0x60, 0x00, 0x01, 0x40,
0x54, 0x00, 0x01, 0x40, 0x28, 0x00, 0x01, 0x40,
0x00, 0xF0, 0x2C, 0xB9, 0x05, 0x4B, 0x06, 0x4A,
0x10, 0xB4, 0x00, 0x21, 0x47, 0x24, 0x1C, 0x60,
0x10, 0x60, 0x5D, 0xF8, 0x04, 0x4B, 0x19, 0x60,
0x70, 0x47, 0x00, 0xBF, 0x14, 0x40, 0x00, 0x40,
0x18, 0x40, 0x00, 0x40, 0x03, 0x4A, 0x04, 0x4B,
0x12, 0x68, 0x02, 0xF0, 0x07, 0x02, 0x53, 0xF8,
0x22, 0x00, 0x70, 0x47, 0x18, 0x40, 0x00, 0x40,
0xE4, 0x9A, 0x00, 0x00, 0x02, 0x4B, 0x1A, 0x68,
0x22, 0xEA, 0x00, 0x00, 0x18, 0x60, 0x70, 0x47,
0x0C, 0x40, 0x00, 0x40, 0x02, 0x4B, 0x1A, 0x68,
0x10, 0x43, 0x18, 0x60, 0x70, 0x47, 0x00, 0xBF,
0x0C, 0x40, 0x00, 0x40, 0x30, 0xB4, 0x0D, 0x68,
0x8C, 0x68, 0x4A, 0x68, 0x06, 0x4B, 0x00, 0x2D,
0x42, 0xEA, 0x04, 0x42, 0x4F, 0xEA, 0x00, 0x10,
0x0C, 0xBF, 0x00, 0x21, 0x4F, 0xF0, 0x00, 0x41,
0x0A, 0x43, 0xC2, 0x50, 0x30, 0xBC, 0x70, 0x47,
0x0C, 0x80, 0x00, 0x40, 0x00, 0x01, 0x07, 0x4B,
0xC2, 0x58, 0x10, 0xB4, 0x01, 0xF0, 0x08, 0x24,
0x22, 0xEA, 0x04, 0x02, 0x01, 0xF0, 0x01, 0x11,
0x11, 0x43, 0xC1, 0x50, 0x5D, 0xF8, 0x04, 0x4B,
0x70, 0x47, 0x00, 0xBF, 0x0C, 0x80, 0x00, 0x40,
0x00, 0x01, 0x03, 0x4B, 0xC2, 0x58, 0x01, 0xF0,
0x08, 0x21, 0x0A, 0x43, 0xC2, 0x50, 0x70, 0x47,
0x0C, 0x80, 0x00, 0x40, 0xF0, 0xB4, 0x00, 0x01,
0x1B, 0x4C, 0x04, 0x59, 0x11, 0xF5, 0x80, 0x3F,
0x08, 0xBF, 0x24, 0x0C, 0x04, 0xF4, 0xC0, 0x74,
0x80, 0x2C, 0x16, 0xD0, 0x4F, 0xF6, 0xFF, 0x75,
0x00, 0x24, 0xA9, 0x42, 0x26, 0x46, 0x15, 0x4F,
0xDF, 0xF8, 0x54, 0xC0, 0x19, 0xD0, 0x11, 0xF5,
0x80, 0x3F, 0x1B, 0xD0, 0x33, 0x0C, 0x91, 0xB2,
0x1B, 0x04, 0x0C, 0x43, 0x43, 0xEA, 0x12, 0x42,
0xC4, 0x51, 0x40, 0xF8, 0x0C, 0x20, 0xF0, 0xBC,
0x70, 0x47, 0x4F, 0xF6, 0xFF, 0x75, 0xA9, 0x42,
0x4F, 0xEA, 0x02, 0x44, 0x16, 0x46, 0x09, 0x4F,
0xDF, 0xF8, 0x24, 0xC0, 0xC3, 0xEB, 0x02, 0x02,
0xE5, 0xD1, 0x92, 0xB2, 0x14, 0x43, 0xC4, 0x51,
0xF0, 0xBC, 0x70, 0x47, 0x92, 0xB2, 0x14, 0x43,
0x40, 0xF8, 0x0C, 0x40, 0xF0, 0xBC, 0x70, 0x47,
0x0C, 0x80, 0x00, 0x40, 0x04, 0x80, 0x00, 0x40,
0x08, 0x80, 0x00, 0x40, 0x02, 0x4B, 0x1A, 0x68,
0x10, 0x43, 0x18, 0x60, 0x70, 0x47, 0x00, 0xBF,
0x00, 0x82, 0x00, 0x40, 0x01, 0x4B, 0x18, 0x60,
0x70, 0x47, 0x00, 0xBF, 0x08, 0x82, 0x00, 0x40,
0x01, 0x38, 0x7F, 0xF4, 0xFD, 0xAF, 0x70, 0x47,
0x0F, 0x28, 0x0B, 0xD8, 0x05, 0x28, 0x12, 0xD0,
0x06, 0x28, 0x16, 0xD0, 0x04, 0x28, 0x04, 0xD1,
0x0D, 0x4B, 0x1A, 0x68, 0x42, 0xF4, 0x80, 0x32,
0x1A, 0x60, 0x70, 0x47, 0x10, 0x38, 0x00, 0xF0,
0x1F, 0x00, 0x01, 0x22, 0x09, 0x4B, 0x02, 0xFA,
0x00, 0xF0, 0x18, 0x60, 0x70, 0x47, 0x06, 0x4B,
0x1A, 0x68, 0x42, 0xF4, 0x00, 0x32, 0x1A, 0x60,
0x70, 0x47, 0x03, 0x4B, 0x1A, 0x68, 0x42, 0xF4,
0x80, 0x22, 0x1A, 0x60, 0x70, 0x47, 0x00, 0xBF,
0x24, 0xED, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE0,
0xEF, 0xF3, 0x10, 0x80, 0x62, 0xB6, 0x70, 0x47,
0x10, 0xB5, 0x04, 0x46, 0xFF, 0xF7, 0x32, 0xFF,
0x04, 0x4B, 0xA3, 0xFB, 0x00, 0x20, 0x80, 0x0C,
0x04, 0xFB, 0x00, 0xF0, 0xBD, 0xE8, 0x10, 0x40,
0xFF, 0xF7, 0xC2, 0xBF, 0x81, 0x9F, 0x5E, 0x16,
0x0D, 0x4B, 0x1B, 0x68, 0xDA, 0x07, 0x30, 0xB4,
0x14, 0xD4, 0x0C, 0x4A, 0x13, 0x68, 0x43, 0xF0,
0x80, 0x73, 0x13, 0x60, 0x13, 0x68, 0xDB, 0x01,
0xFC, 0xD5, 0x09, 0x48, 0x09, 0x4D, 0x0A, 0x4C,
0x0A, 0x49, 0x0B, 0x4B, 0x05, 0x60, 0x0B, 0x4A,
0x0F, 0x25, 0x4F, 0xF0, 0xFF, 0x30, 0x25, 0x60,
0x08, 0x60, 0x1A, 0x60, 0x30, 0xBC, 0x70, 0x47,
0x3C, 0x11, 0x00, 0x10, 0xFC, 0xED, 0x00, 0xE0,
0xB0, 0x0F, 0x00, 0xE0, 0x55, 0xCE, 0xAC, 0xC5,
0x40, 0x0E, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0xE0,
0x80, 0x0E, 0x00, 0xE0, 0x11, 0x05, 0x15, 0x00,
0x08, 0xB5, 0x08, 0x4A, 0x13, 0x68, 0x1B, 0x02,
0xFC, 0xD4, 0xFF, 0xF7, 0xF3, 0xFE, 0x06, 0x4B,
0xA3, 0xFB, 0x00, 0x20, 0x80, 0x0C, 0x32, 0x23,
0x03, 0xFB, 0x00, 0xF0, 0xBD, 0xE8, 0x08, 0x40,
0xFF, 0xF7, 0x82, 0xBF, 0x80, 0x0E, 0x00, 0xE0,
0x81, 0x9F, 0x5E, 0x16, 0x03, 0x78, 0x30, 0xB4,
0x93, 0xB1, 0x02, 0x46, 0x00, 0x23, 0x12, 0xF8,
0x01, 0x1F, 0x01, 0x33, 0x00, 0x29, 0xFA, 0xD1,
0x4F, 0xF0, 0x60, 0x42, 0xC5, 0x18, 0x14, 0x46,
0x10, 0xF8, 0x01, 0x1B, 0x13, 0x68, 0x00, 0x2B,
0xFC, 0xD0, 0xA8, 0x42, 0x21, 0x70, 0xF7, 0xD1,
0x30, 0xBC, 0x70, 0x47, 0x0D, 0x4B, 0x0E, 0x49,
0x1B, 0x68, 0x0E, 0x4A, 0x09, 0x68, 0xC1, 0x60,
0x70, 0xB4, 0x41, 0x68, 0x15, 0x68, 0x0C, 0x4C,
0x42, 0x69, 0x29, 0x43, 0x41, 0x60, 0x24, 0x68,
0x03, 0xF0, 0x01, 0x06, 0xC3, 0xF3, 0x40, 0x01,
0x22, 0x43, 0xC3, 0xF3, 0x80, 0x03, 0x06, 0x70,
0x01, 0x72, 0x03, 0x74, 0x42, 0x61, 0x70, 0xBC,
0x70, 0x47, 0x00, 0xBF, 0xCC, 0x01, 0x02, 0x40,
0xC4, 0x01, 0x02, 0x40, 0xC0, 0x01, 0x02, 0x40,
0xC8, 0x01, 0x02, 0x40, 0x02, 0x4B, 0x6F, 0xF0,
0x01, 0x02, 0x1A, 0x60, 0x70, 0x47, 0x00, 0xBF,
0xFC, 0x00, 0x02, 0x40, 0x08, 0x4B, 0x09, 0x4A,
0x19, 0x68, 0x41, 0xF0, 0x02, 0x01, 0x19, 0x60,
0x19, 0x68, 0x41, 0xF0, 0x01, 0x01, 0x19, 0x60,
0x13, 0x68, 0x99, 0x07, 0xFC, 0xD5, 0x03, 0x4A,
0x13, 0x68, 0xDB, 0x07, 0xFC, 0xD5, 0x70, 0x47,
0x10, 0x00, 0x02, 0x40, 0x14, 0x00, 0x02, 0x40,
0x05, 0x4B, 0x1A, 0x68, 0x18, 0xB9, 0x22, 0xF0,
0x80, 0x02, 0x1A, 0x60, 0x70, 0x47, 0x42, 0xF0,
0x80, 0x02, 0x1A, 0x60, 0x70, 0x47, 0x00, 0xBF,
0x0C, 0x40, 0x00, 0x40, 0x02, 0x4B, 0x1A, 0x68,
0x42, 0xF0, 0x10, 0x02, 0x1A, 0x60, 0x70, 0x47,
0x50, 0x40, 0x00, 0x40, 0x58, 0xB1, 0x0A, 0x4B,
0x1B, 0x68, 0x33, 0xF0, 0x01, 0x02, 0x09, 0x4B,
0x1A, 0x68, 0x07, 0xD0, 0x22, 0xF0, 0x04, 0x02,
0x1A, 0x60, 0x30, 0xBF, 0x70, 0x47, 0x05, 0x4B,
0x1A, 0x68, 0xF7, 0xE7, 0x42, 0xF0, 0x04, 0x02,
0x1A, 0x60, 0x30, 0xBF, 0x70, 0x47, 0x00, 0xBF,
0x50, 0x02, 0x02, 0x40, 0x10, 0xED, 0x00, 0xE0,
0x38, 0xB5, 0x21, 0x4B, 0x04, 0x68, 0x00, 0x22,
0x1A, 0x60, 0x1C, 0xB3, 0x1F, 0x49, 0x20, 0x4B,
0x20, 0x4A, 0x01, 0x20, 0x08, 0x60, 0xA4, 0xF5,
0x61, 0x41, 0x91, 0x42, 0x88, 0xBF, 0x1C, 0x46,
0xFF, 0xF7, 0x48, 0xFE, 0x43, 0x1C, 0x2C, 0xD0,
0xC0, 0x08, 0xB0, 0xFB, 0xF4, 0xF4, 0x01, 0x3C,
0xA4, 0xB2, 0x19, 0x4A, 0x19, 0x4D, 0x1A, 0x4B,
0x1A, 0x49, 0x14, 0x60, 0x00, 0x20, 0x02, 0x24,
0x40, 0xF2, 0x01, 0x22, 0x2C, 0x60, 0x08, 0x60,
0x1A, 0x60, 0x32, 0x20, 0xBD, 0xE8, 0x38, 0x40,
0xFF, 0xF7, 0xFA, 0xBE, 0x10, 0x4A, 0x03, 0x69,
0x13, 0x60, 0x83, 0x68, 0xC2, 0xF8, 0xE0, 0x30,
0xC2, 0x68, 0x0A, 0x49, 0x0E, 0x4B, 0x01, 0x24,
0x01, 0x3A, 0x04, 0xFA, 0x02, 0xF2, 0x0A, 0x60,
0x42, 0x68, 0x19, 0x68, 0x0A, 0x43, 0x1A, 0x60,
0x32, 0x20, 0xBD, 0xE8, 0x38, 0x40, 0xFF, 0xF7,
0xE3, 0xBE, 0x02, 0x24, 0xD5, 0xE7, 0x00, 0xBF,
0x04, 0x03, 0x04, 0xE0, 0x04, 0x00, 0x04, 0xE0,
0x40, 0x42, 0x0F, 0x00, 0x80, 0xA3, 0x1D, 0x00,
0x10, 0x00, 0x04, 0xE0, 0xF0, 0x00, 0x04, 0xE0,
0x50, 0x02, 0x02, 0x40, 0x00, 0x0F, 0x04, 0xE0,
0x01, 0x4B, 0x00, 0x22, 0x1A, 0x60, 0x70, 0x47,
0x50, 0x02, 0x02, 0x40, 0x01, 0x4B, 0x37, 0x22,
0x1A, 0x60, 0x70, 0x47, 0x08, 0xC0, 0x00, 0x40,
0x4F, 0xEA, 0x41, 0x02, 0xB2, 0xF1, 0xE0, 0x43,
0x24, 0xBF, 0xB3, 0xF5, 0x00, 0x1C, 0xDC, 0xF1,
0xFE, 0x5C, 0x0D, 0xD9, 0x01, 0xF0, 0x00, 0x4C,
0x4F, 0xEA, 0xC0, 0x02, 0x4C, 0xEA, 0x50, 0x70,
0xB2, 0xF1, 0x00, 0x4F, 0x40, 0xEB, 0x83, 0x00,
0x08, 0xBF, 0x20, 0xF0, 0x01, 0x00, 0x70, 0x47,
0x11, 0xF0, 0x80, 0x4F, 0x21, 0xD1, 0x13, 0xF1,
0x38, 0x72, 0xBC, 0xBF, 0x01, 0xF0, 0x00, 0x40,
0x70, 0x47, 0x41, 0xF4, 0x80, 0x11, 0x4F, 0xEA,
0x52, 0x52, 0xC2, 0xF1, 0x18, 0x02, 0xC2, 0xF1,
0x20, 0x0C, 0x10, 0xFA, 0x0C, 0xF3, 0x20, 0xFA,
0x02, 0xF0, 0x18, 0xBF, 0x40, 0xF0, 0x01, 0x00,
0x4F, 0xEA, 0xC1, 0x23, 0x4F, 0xEA, 0xD3, 0x23,
0x03, 0xFA, 0x0C, 0xFC, 0x40, 0xEA, 0x0C, 0x00,
0x23, 0xFA, 0x02, 0xF3, 0x4F, 0xEA, 0x43, 0x03,
0xCC, 0xE7, 0x7F, 0xEA, 0x62, 0x53, 0x07, 0xD1,
0x50, 0xEA, 0x01, 0x33, 0x1E, 0xBF, 0x4F, 0xF0,
0xFE, 0x40, 0x40, 0xF4, 0x40, 0x00, 0x70, 0x47,
0x01, 0xF0, 0x00, 0x40, 0x40, 0xF0, 0xFE, 0x40,
0x40, 0xF4, 0x00, 0x00, 0x70, 0x47, 0x00, 0xBF,
0x42, 0x69, 0x6E, 0x61, 0x72, 0x79, 0x20, 0x43,
0x6F, 0x75, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x45,
0x78, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x0A, 0x00,
0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6E, 0x01,
0x00, 0x1B, 0xB7, 0x00, 0x00, 0x12, 0x7A, 0x00,
0x80, 0x8D, 0x5B, 0x00, 0x00, 0x3E, 0x49, 0x00,
0x00, 0x09, 0x3D, 0x00, 0xDB, 0x50, 0x34, 0x00,
0xC0, 0xC6, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00,
0x56, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#endif // APOLLO_BOOT_DEMO_H
@@ -0,0 +1,500 @@
//*****************************************************************************
//
//! @file spi_boot_host.c
//!
//! @brief An example to drive the IO Slave on a second board.
//!
//! This example acts as the boot host for spi_boot and multi_boot on Apollo
//! and Apollo2 MCUs. It will deliver a predefined firmware image to a boot
//! slave over a SPI protocol. The purpose of this demo is to show how a host
//! processor might store, load, and update the firmware on an Apollo or
//! Apollo2 device that is connected as a slave.
//!
//! Please see the multi_boot README.txt for more details on how to run the
//! examples.
//!
//! @verbatim
//! PIN fly lead connections assumed by multi_boot:
//! HOST SLAVE (multi_boot target)
//! -------- --------
//! GPIO[2] GPIO Interrupt (slave to host) GPIO[4] GPIO interrupt
//! GPIO[4] OVERRIDE pin (host to slave) GPIO[18] Override pin or n/c
//! GPIO[5] IOM0 SPI CLK/I2C SCL GPIO[0] IOS SPI SCK/I2C SCL
//! GPIO[6] IOM0 SPI MISO/I2C SDA GPIO[1] IOS SPI MISO/I2C SDA
//! GPIO[7] IOM0 SPI MOSI GPIO[2] IOS SPI MOSI
//! GPIO[11] IOM0 SPI nCE GPIO[3] IOS SPI nCE
//! GPIO[17] Slave reset (host to slave) Reset Pin or n/c
//! GND GND
//! Reset and Override pin connections from Host are optional
//! Keeping Button1 pressed on target has same effect as host driving override
//! @endverbatim
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2020, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// Third party software included in this distribution is subject to the
// additional license terms as defined in the /docs/licenses directory.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision 2.4.2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#include <stdint.h>
#include <stdbool.h>
#include "am_mcu_apollo.h"
#include "am_bsp.h"
#include "am_util.h"
//*****************************************************************************
//
// Download image details.
//
// This header file represents the binary image that the boot host will try to
// load onto the slave device.
//
// By default, the demo image used is the same as the host device. That is,
// the slave device to which the demo image is downloaded is assumed to be
// the same device as the host. If the 2 devices are not the same, the
// appropriate image to be downloaded to the slave can be selected here.
//
//*****************************************************************************
//#define USE_APOLLO1_DEMO 1
//#define USE_APOLLO2_DEMO 1
#if defined(USE_APOLLO1_DEMO)
#include "apollo_boot_demo.h"
#elif defined(USE_APOLLO2_DEMO)
#include "apollo2_boot_demo.h"
#elif defined(AM_PART_APOLLO)
#include "apollo_boot_demo.h"
#elif defined(AM_PART_APOLLO2)
#include "apollo2_boot_demo.h"
#endif
// This assumes Host is running on same type of board as target.
// If that is not true, this definition needs to be adjusted to match the
// desired pin on target board
#define TARGET_BOARD_OVERRIDE_PIN AM_BSP_GPIO_BUTTON1
// Slave interrupt pin is connected here
#define BOOTLOADER_HANDSHAKE_PIN 2
// This pin is connected to RESET pin of slave
#define DRIVE_SLAVE_RESET_PIN 17
// This pin is connected to the 'Override' pin of slave
#define DRIVE_SLAVE_OVERRIDE_PIN 4
//*****************************************************************************
//
// Boot Commands.
//
//*****************************************************************************
#define AM_BOOTLOADER_ACK_CMD 0x00000000
#define AM_BOOTLOADER_NAK_CMD 0x00000001
#define AM_BOOTLOADER_NEW_IMAGE 0x00000002
#define AM_BOOTLOADER_NEW_PACKET 0x00000003
#define AM_BOOTLOADER_RESET 0x00000004
#define AM_BOOTLOADER_SET_OVERRIDE_CMD 0x00000005
#define AM_BOOTLOADER_BL_VERSION_CMD 0x00000006
#define AM_BOOTLOADER_FW_VERSION_CMD 0x00000007
//*****************************************************************************
//
// Slave messages.
//
//*****************************************************************************
#define AM_BOOTLOADER_ACK 0x00000000
#define AM_BOOTLOADER_NAK 0x00000001
#define AM_BOOTLOADER_READY 0x00000002
#define AM_BOOTLOADER_IMAGE_COMPLETE 0x00000003
#define AM_BOOTLOADER_BAD_CRC 0x00000004
#define AM_BOOTLOADER_ERROR 0x00000005
#define AM_BOOTLOADER_BL_VERSION 0x00000006
#define AM_BOOTLOADER_FW_VERSION 0x00000007
//*****************************************************************************
//
// Global message buffer for the IO master.
//
//*****************************************************************************
am_hal_iom_buffer(256) g_psTxBuffer;
am_hal_iom_buffer(256) g_psRxBuffer;
//*****************************************************************************
//
// AES information
//
//*****************************************************************************
uint32_t pui32ExpandedKey[60];
//*****************************************************************************
//
// Configuration structure for the IO Master.
//
//*****************************************************************************
const am_hal_iom_config_t g_sIOMConfig =
{
.ui32InterfaceMode = AM_HAL_IOM_SPIMODE,
.ui32ClockFrequency = AM_HAL_IOM_100KHZ,
.bSPHA = 0,
.bSPOL = 0,
.ui8WriteThreshold = 4,
.ui8ReadThreshold = 60,
};
//*****************************************************************************
//
// Configure GPIOs for this example
//
//*****************************************************************************
void
configure_pins(void)
{
//
// Configure I/O Master 0 as SPI
//
am_hal_gpio_pin_config(5, AM_HAL_PIN_5_M0SCK);
am_hal_gpio_pin_config(6, AM_HAL_PIN_6_M0MISO);
am_hal_gpio_pin_config(7, AM_HAL_PIN_7_M0MOSI);
am_hal_gpio_pin_config(11, AM_HAL_PIN_11_M0nCE0);
//
// Configure the I/O Slave interrupt pin
//
am_hal_gpio_pin_config(BOOTLOADER_HANDSHAKE_PIN, AM_HAL_PIN_INPUT | AM_HAL_GPIO_PULLUP);
}
//*****************************************************************************
//
// Interrupt handler for the GPIO pins.
//
//*****************************************************************************
void
am_gpio_isr(void)
{
uint64_t ui64Status;
//
// Read and clear the GPIO interrupt status.
//
ui64Status = am_hal_gpio_int_status_get(false);
am_hal_gpio_int_clear(ui64Status);
}
//*****************************************************************************
//
// Reset the slave device and force it into boot mode.
//
//*****************************************************************************
void
start_boot_mode(void)
{
//
// Drive RESET low.
//
am_hal_gpio_out_bit_clear(DRIVE_SLAVE_RESET_PIN);
am_hal_gpio_pin_config(DRIVE_SLAVE_RESET_PIN, AM_HAL_PIN_OUTPUT);
//
// Drive the override pin low to force the slave into boot mode.
//
am_hal_gpio_out_bit_clear(DRIVE_SLAVE_OVERRIDE_PIN);
am_hal_gpio_pin_config(DRIVE_SLAVE_OVERRIDE_PIN, AM_HAL_PIN_OUTPUT);
//
// Short delay.
//
am_util_delay_us(5);
//
// Release RESET.
//
am_hal_gpio_out_bit_set(DRIVE_SLAVE_RESET_PIN);
//
// Wait for the slave to Set the handshake pin
//
while ( !am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
}
//*****************************************************************************
//
// Send the commands to start a new boot download.
//
//*****************************************************************************
void
start_new_image(void)
{
//
// Wait for the slave to send the ready signal
//
while ( am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
//
// Make sure the override pin is high so the slave will reboot into
// application mode when our boot procedure is complete.
//
am_hal_gpio_out_bit_set(DRIVE_SLAVE_OVERRIDE_PIN);
// Clear any interrupts that may have happened while Slave is coming up
am_hal_iom_int_clear(0, 0xFFFFFFFF);
am_hal_iom_spi_read(0, 0, g_psRxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x0));
//
// ACK the ready signal to have slave pull the interrupt line high.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_ACK_CMD;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
//
// Wait for the slave to read the ACK
//
while ( !am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
//
// Write the image parameters to the SPI FIFO
//
g_psTxBuffer.words[0] = IMAGE_LINK_ADDRESS;
g_psTxBuffer.words[1] = IMAGE_SIZE;
g_psTxBuffer.words[2] = IMAGE_CRC;
//
// Send the image parameters to the slave.
//
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 12, AM_HAL_IOM_OFFSET(0x84));
//
// Finish out the image start routine with the "New Image" packet.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_NEW_IMAGE;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
}
//*****************************************************************************
//
// Set override pin.
//
//*****************************************************************************
void
override_pin_set(uint32_t ui32OverridePin, uint32_t ui32OverridePolarity)
{
//
// Wait for the slave to send the ready signal
//
while ( am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
am_hal_iom_spi_read(0, 0, g_psRxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x0));
//
// ACK the ready signal to have slave pull the interrupt line high.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_ACK_CMD;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
//
// Wait for the slave to read the ACK
//
while ( !am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
//
// Write the image parameters to the SPI FIFO
//
g_psTxBuffer.words[0] = ui32OverridePin;
g_psTxBuffer.words[1] = ui32OverridePolarity;
//
// Send the image parameters to the slave.
//
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 8, AM_HAL_IOM_OFFSET(0x84));
//
// Finish out the image start routine with the "New Image" packet.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_SET_OVERRIDE_CMD;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
}
//*****************************************************************************
//
// Send the actual firmware image over to the boot slave.
//
//*****************************************************************************
void
transfer_image(void)
{
uint32_t ui32BytesRemaining;
uint32_t ui32TransferSize;
uint32_t ui32Offset;
uint32_t i;
//
// Send the firmware image across.
//
ui32BytesRemaining = IMAGE_SIZE;
ui32Offset = 0;
while ( ui32BytesRemaining )
{
//
// Wait for another ready signal.
//
while ( am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
am_hal_iom_spi_read(0, 0, g_psRxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x0));
//
// ACK the ready signal to have slave pull the interrupt line high.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_ACK_CMD;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
//
// Wait for the slave to read the ACK
//
while ( !am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
//
// We can't transfer more than a few bytes at a time. Limit the
// transaction to 112 bytes max.
//
ui32TransferSize = ui32BytesRemaining > 112 ? 112 : ui32BytesRemaining;
//
// Start the packet with the packet length.
//
g_psTxBuffer.words[0] = ui32TransferSize;
//
// Fill in the packet contents.
//
for ( i = 0; i < ui32TransferSize; i++ )
{
g_psTxBuffer.bytes[4 + i] = IMAGE_ARRAY[ui32Offset + i];
}
//
// Send the data over to the slave.
//
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, ui32TransferSize + 4,
AM_HAL_IOM_OFFSET(0x84));
//
// Finish with the "New Packet" boot command.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_NEW_PACKET;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
//
// Update the loop variables.
//
ui32BytesRemaining -= ui32TransferSize;
ui32Offset += ui32TransferSize;
}
}
//*****************************************************************************
//
// Main function.
//
//*****************************************************************************
int
main(void)
{
//
// Set the clock frequency.
//
am_hal_clkgen_sysclk_select(AM_HAL_CLKGEN_SYSCLK_MAX);
//
// Set the default cache configuration
//
am_hal_cachectrl_enable(&am_hal_cachectrl_defaults);
//
// Configure the board for low power operation.
//
am_bsp_low_power_init();
//
// Setup the pins for IO Master Example.
//
configure_pins();
//
// Initialize IOM 0 in SPI mode at 100KHz
//
#ifndef AM_PART_APOLLO
am_hal_iom_pwrctrl_enable(0);
#endif
am_hal_iom_config(0, &g_sIOMConfig);
//
// Turn on the IOM for this operation.
//
am_bsp_iom_enable(0);
//
// Force the slave into boot mode.
//
start_boot_mode();
//
// Wait for the 'READY' from the boot slave, and then send the packet
// information.
//
start_new_image();
//
// Change the override pin to correspond to a button on the Apollo EVK
//
override_pin_set(TARGET_BOARD_OVERRIDE_PIN, 0);
//
// Wait for another 'READY', and send the actual image across.
//
transfer_image();
//
// At this point, the slave should send back a either 'CRC OK' or some sort
// of error. If the CRC was good, we should tell the slave to reset itself
// and run the new image.
//
while ( am_hal_gpio_input_bit_read(BOOTLOADER_HANDSHAKE_PIN) );
am_hal_iom_spi_read(0, 0, g_psRxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x0));
if ( g_psRxBuffer.words[0] == AM_BOOTLOADER_IMAGE_COMPLETE )
{
//
// If the CRC is correct, send a RESET command.
//
g_psTxBuffer.words[0] = AM_BOOTLOADER_RESET;
am_hal_iom_spi_write(0, 0, g_psTxBuffer.words, 4, AM_HAL_IOM_OFFSET(0x80));
}
//
// Loop forever.
//
while (1)
{
}
}