Leroy P Leahy (leroy.p.leahy@intel.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10051
-gerrit
commit ff08683a0aa07bf2bb3089e898af8674971ad730 Author: Lee Leahy leroy.p.leahy@intel.com Date: Mon Apr 20 15:20:28 2015 -0700
DO NOT MERGE: Braswell: Add Braswell SOC support
Add the files to support the Braswell SOC.
BRANCH=none BUG=None TEST=Build for a Braswell platform
Change-Id: I968da68733e57647d0a08e4040ff0378b4d59004 Signed-off-by: Lee Leahy leroy.p.leahy@intel.com --- src/soc/intel/braswell/Kconfig | 214 + src/soc/intel/braswell/Makefile.inc | 118 + src/soc/intel/braswell/acpi.c | 588 + src/soc/intel/braswell/acpi/cpu.asl | 89 + src/soc/intel/braswell/acpi/device_nvs.asl | 87 + src/soc/intel/braswell/acpi/dptf/charger.asl | 59 + src/soc/intel/braswell/acpi/dptf/cpu.asl | 178 + src/soc/intel/braswell/acpi/dptf/dptf.asl | 81 + src/soc/intel/braswell/acpi/dptf/thermal.asl | 203 + src/soc/intel/braswell/acpi/dptf/wifi.asl | 16 + src/soc/intel/braswell/acpi/dptf/wwan.asl | 16 + src/soc/intel/braswell/acpi/globalnvs.asl | 109 + src/soc/intel/braswell/acpi/gpio.asl | 139 + src/soc/intel/braswell/acpi/irq_helper.h | 48 + src/soc/intel/braswell/acpi/irqlinks.asl | 493 + src/soc/intel/braswell/acpi/irqroute.asl | 37 + src/soc/intel/braswell/acpi/lpc.asl | 169 + src/soc/intel/braswell/acpi/lpe.asl | 119 + src/soc/intel/braswell/acpi/lpss.asl | 712 + src/soc/intel/braswell/acpi/platform.asl | 80 + src/soc/intel/braswell/acpi/scc.asl | 187 + src/soc/intel/braswell/acpi/sleepstates.asl | 26 + src/soc/intel/braswell/acpi/southcluster.asl | 270 + src/soc/intel/braswell/acpi/xhci.asl | 36 + src/soc/intel/braswell/bootblock/Makefile.inc | 1 + src/soc/intel/braswell/bootblock/bootblock.c | 82 + src/soc/intel/braswell/bootblock/timestamp.inc | 21 + src/soc/intel/braswell/chip.c | 116 + src/soc/intel/braswell/chip.h | 114 + src/soc/intel/braswell/cpu.c | 276 + src/soc/intel/braswell/elog.c | 111 + src/soc/intel/braswell/emmc.c | 66 + src/soc/intel/braswell/gfx.c | 114 + src/soc/intel/braswell/gpio.c | 320 + src/soc/intel/braswell/gpio_support.c | 87 + src/soc/intel/braswell/hda.c | 47 + src/soc/intel/braswell/include/chipset_fsp_util.h | 42 + src/soc/intel/braswell/include/soc/acpi.h | 38 + src/soc/intel/braswell/include/soc/device_nvs.h | 68 + src/soc/intel/braswell/include/soc/ehci.h | 28 + src/soc/intel/braswell/include/soc/gfx.h | 98 + src/soc/intel/braswell/include/soc/gpio.h | 543 + src/soc/intel/braswell/include/soc/hda.h | 45 + src/soc/intel/braswell/include/soc/iomap.h | 92 + src/soc/intel/braswell/include/soc/iosf.h | 229 + src/soc/intel/braswell/include/soc/irq.h | 220 + src/soc/intel/braswell/include/soc/lpc.h | 55 + src/soc/intel/braswell/include/soc/msr.h | 52 + src/soc/intel/braswell/include/soc/nvs.h | 79 + src/soc/intel/braswell/include/soc/pattrs.h | 64 + src/soc/intel/braswell/include/soc/pci_devs.h | 154 + src/soc/intel/braswell/include/soc/pcie.h | 103 + src/soc/intel/braswell/include/soc/pei_data.h | 68 + src/soc/intel/braswell/include/soc/pei_wrapper.h | 30 + src/soc/intel/braswell/include/soc/pm.h | 310 + src/soc/intel/braswell/include/soc/ramstage.h | 41 + src/soc/intel/braswell/include/soc/romstage.h | 44 + src/soc/intel/braswell/include/soc/sata.h | 155 + src/soc/intel/braswell/include/soc/smm.h | 37 + src/soc/intel/braswell/include/soc/spi.h | 76 + src/soc/intel/braswell/include/soc/xhci.h | 51 + src/soc/intel/braswell/iosf.c | 196 + src/soc/intel/braswell/lpe.c | 195 + src/soc/intel/braswell/lpss.c | 203 + src/soc/intel/braswell/memmap.c | 57 + src/soc/intel/braswell/microcode/M01406C221D.h | 17152 ++++++++++++++++++++ src/soc/intel/braswell/microcode/M01406C3337.h | 17152 ++++++++++++++++++++ src/soc/intel/braswell/microcode/Makefile.inc | 13 + src/soc/intel/braswell/microcode/microcode_blob.c | 4 + src/soc/intel/braswell/northcluster.c | 161 + src/soc/intel/braswell/pcie.c | 281 + src/soc/intel/braswell/placeholders.c | 8 + src/soc/intel/braswell/pmutil.c | 364 + src/soc/intel/braswell/ramstage.c | 204 + src/soc/intel/braswell/romstage/Makefile.inc | 5 + src/soc/intel/braswell/romstage/early_spi.c | 68 + src/soc/intel/braswell/romstage/gfx.c | 53 + src/soc/intel/braswell/romstage/pmc.c | 32 + src/soc/intel/braswell/romstage/romstage.c | 202 + src/soc/intel/braswell/sata.c | 64 + src/soc/intel/braswell/scc.c | 73 + src/soc/intel/braswell/sd.c | 72 + src/soc/intel/braswell/smihandler.c | 435 + src/soc/intel/braswell/smm.c | 137 + src/soc/intel/braswell/southcluster.c | 550 + src/soc/intel/braswell/spi.c | 599 + src/soc/intel/braswell/spi_loading.c | 154 + src/soc/intel/braswell/stage_cache.c | 38 + src/soc/intel/braswell/tsc_freq.c | 70 + src/soc/intel/braswell/xhci.c | 82 + 90 files changed, 46775 insertions(+)
diff --git a/src/soc/intel/braswell/Kconfig b/src/soc/intel/braswell/Kconfig new file mode 100644 index 0000000..e1309b8 --- /dev/null +++ b/src/soc/intel/braswell/Kconfig @@ -0,0 +1,214 @@ + +config SOC_INTEL_BRASWELL + bool + help + Braswell M/D part support. + +if SOC_INTEL_BRASWELL + +config CPU_SPECIFIC_OPTIONS + def_bool y + select ARCH_BOOTBLOCK_X86_32 + select ARCH_RAMSTAGE_X86_32 + select ARCH_ROMSTAGE_X86_32 + select ARCH_VERSTAGE_X86_32 + select BACKUP_DEFAULT_SMM_REGION + select CACHE_MRC_SETTINGS + select CACHE_RELOCATED_RAMSTAGE_OUTSIDE_CBMEM + select CACHE_ROM + select CAR_MIGRATION + select COLLECT_TIMESTAMPS + select CPU_MICROCODE_IN_CBFS + select CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED + select DYNAMIC_CBMEM + select HAS_PRECBMEM_TIMESTAMP_REGION + select HAVE_MONOTONIC_TIMER + select HAVE_SMI_HANDLER + select HAVE_HARD_RESET + select MMCONF_SUPPORT + select MMCONF_SUPPORT_DEFAULT + select RELOCATABLE_MODULES + select PARALLEL_MP + select PCIEXP_ASPM + select PCIEXP_COMMON_CLOCK + select PLATFORM_USES_FSP1_1 + select SOC_INTEL_COMMON + select SOC_INTEL_COMMON_RAM_INIT + select SOC_INTEL_COMMON_RESET + select SOC_INTEL_COMMON_ROMSTAGE + select SOC_INTEL_COMMON_STACK + select SMM_MODULES + select SMM_TSEG + select SMP + select SPI_FLASH + select SSE2 + select SUPPORT_CPU_UCODE_IN_CBFS + select TSC_CONSTANT_RATE + select TSC_MONOTONIC_TIMER + select TSC_SYNC_MFENCE + select UDELAY_TSC + select USE_GENERIC_FSP_CAR_INC + +config BOOTBLOCK_CPU_INIT + string + default "soc/intel/braswell/bootblock/bootblock.c" + +config MMCONF_BASE_ADDRESS + hex "PCIe CFG Base Address" + default 0xe0000000 + +config MAX_CPUS + int + default 4 + +config CPU_ADDR_BITS + int + default 36 + +config SMM_TSEG_SIZE + hex + default 0x800000 + +config SMM_RESERVED_SIZE + hex + default 0x100000 + +# Cache As RAM region layout: +# +# +-------------+ DCACHE_RAM_BASE + DCACHE_RAM_SIZE +# | Stack |\ +# | | | * DCACHE_RAM_ROMSTAGE_STACK_SIZE +# | v |/ +# +-------------+ +# | ^ | +# | | | +# | CAR Globals | +# +-------------+ DCACHE_RAM_BASE +# + +config DCACHE_RAM_BASE + hex "Temporary RAM Base Address" + default 0xfef00000 + +config DCACHE_RAM_SIZE + hex "Temporary RAM Size" + default 0x4000 + help + The size of the cache-as-ram region required during bootblock + and/or romstage. Note DCACHE_RAM_SIZE and DCACHE_RAM_MRC_VAR_SIZE + must add up to a power of 2. + +config DCACHE_RAM_ROMSTAGE_STACK_SIZE + hex + default 0x800 + help + The amount of anticipated stack usage from the data cache + during pre-ram rom stage execution. + +config RESET_ON_INVALID_RAMSTAGE_CACHE + bool "Reset the system on S3 wake when ramstage cache invalid." + default n + depends on RELOCATABLE_RAMSTAGE + help + The haswell romstage code caches the loaded ramstage program + in SMM space. On S3 wake the romstage will copy over a fresh + ramstage that was cached in the SMM space. This option determines + the action to take when the ramstage cache is invalid. If selected + the system will reset otherwise the ramstage will be reloaded from + cbfs. + +config CBFS_SIZE + hex "Size of CBFS filesystem in ROM" + default 0x100000 + help + The firmware image has to store a lot more than just coreboot, + including: + - a firmware descriptor + - Intel Management Engine firmware + - MRC cache information + This option allows to limit the size of the CBFS portion in the + firmware image. + +config LOCK_MANAGEMENT_ENGINE + bool "Lock Management Engine section" + default n + help + The Intel Management Engine supports preventing write accesses + from the host to the Management Engine section in the firmware + descriptor. If the ME section is locked, it can only be overwritten + with an external SPI flash programmer. You will want this if you + want to increase security of your ROM image once you are sure + that the ME firmware is no longer going to change. + + If unsure, say N. + +config ENABLE_BUILTIN_COM1 + bool "Enable builtin COM1 Serial Port" + default n + help + The PMC has a legacy COM1 serial port. Choose this option to + configure the pads and enable it. This serial port can be used for + the debug console. + +config HAVE_IFD_BIN + bool + default y + +config BUILD_WITH_FAKE_IFD + bool "Build with a fake IFD" + default y if !HAVE_IFD_BIN + help + If you don't have an Intel Firmware Descriptor (ifd.bin) for your + board, you can select this option and coreboot will build without it. + Though, the resulting coreboot.rom will not contain all parts required + to get coreboot running on your board. You can however write only the + BIOS section to your board's flash ROM and keep the other sections + untouched. Unfortunately the current version of flashrom doesn't + support this yet. But there is a patch pending [1]. + + WARNING: Never write a complete coreboot.rom to your flash ROM if it + was built with a fake IFD. It just won't work. + + [1] http://www.flashrom.org/pipermail/flashrom/2013-June/011083.html + +config HAVE_ME_BIN + bool "Add Intel Management Engine firmware" + default y + help + The Intel processor in the selected system requires a special firmware + for an integrated controller called Management Engine (ME). The ME + firmware might be provided in coreboot's 3rdparty repository. If + not and if you don't have the firmware elsewhere, you can still + build coreboot without it. In this case however, you'll have to make + sure that you don't overwrite your ME firmware on your flash ROM. + +config IED_REGION_SIZE + hex + default 0x400000 + +config IFD_BIN_PATH + string "Path to intel firmware descriptor" + depends on !BUILD_WITH_FAKE_IFD + default "3rdparty/mainboard/$(MAINBOARDDIR)/descriptor.bin" + +config IFD_BIOS_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config IFD_ME_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config IFD_PLATFORM_SECTION + depends on BUILD_WITH_FAKE_IFD + string + default "" + +config ME_BIN_PATH + string "Path to management engine firmware" + depends on HAVE_ME_BIN + default "3rdparty/mainboard/$(MAINBOARDDIR)/me.bin" + +endif diff --git a/src/soc/intel/braswell/Makefile.inc b/src/soc/intel/braswell/Makefile.inc new file mode 100644 index 0000000..984ec93 --- /dev/null +++ b/src/soc/intel/braswell/Makefile.inc @@ -0,0 +1,118 @@ +ifeq ($(CONFIG_SOC_INTEL_BRASWELL),y) + +subdirs-y += bootblock +subdirs-y += microcode +subdirs-y += romstage +subdirs-y += ../common +subdirs-y += ../../../cpu/x86/lapic +subdirs-y += ../../../cpu/x86/mtrr +subdirs-y += ../../../cpu/x86/smm +subdirs-y += ../../../cpu/x86/tsc +subdirs-y += ../../../cpu/intel/microcode +subdirs-y += ../../../cpu/intel/turbo + +romstage-y += gpio_support.c +romstage-y += iosf.c +romstage-y += memmap.c +romstage-y += stage_cache.c +romstage-y += tsc_freq.c + +ramstage-y += acpi.c +ramstage-y += chip.c +ramstage-y += cpu.c +ramstage-$(CONFIG_ELOG) += elog.c +ramstage-y += emmc.c +ramstage-y += gpio.c +ifeq ($(CONFIG_GOP_SUPPORT),n) +ramstage-y += gfx.c +endif +ramstage-y += hda.c +ramstage-y += iosf.c +ramstage-y += lpe.c +ramstage-y += lpss.c +ramstage-y += memmap.c +ramstage-y += northcluster.c +ramstage-y += pcie.c +ramstage-y += pmutil.c +ramstage-y += ramstage.c +ramstage-y += sata.c +ramstage-y += scc.c +ramstage-y += sd.c +ramstage-y += smm.c +ramstage-y += southcluster.c +ramstage-y += spi.c +ramstage-$(CONFIG_ALT_CBFS_LOAD_PAYLOAD) += spi_loading.c +ramstage-y += stage_cache.c +ramstage-y += tsc_freq.c +ramstage-y += xhci.c + +# Remove as ramstage gets fleshed out +ramstage-y += placeholders.c + +smm-y += pmutil.c +smm-y += smihandler.c +smm-y += spi.c +smm-y += tsc_freq.c + +CPPFLAGS_common += -I$(src)/arch/x86/include/ +CPPFLAGS_common += -I$(src)/soc/intel/braswell/ +CPPFLAGS_common += -I$(src)/soc/intel/braswell/include + +CPPFLAGS_common += -I$(src)/drivers/intel/fsp1_1 +CPPFLAGS_common += -I$(src)/vendorcode/intel/fsp/fsp1_1 +CPPFLAGS_common += -I$(src)/vendorcode/intel/edk2/uefi_2.4 +CPPFLAGS_common += -I$(src)/vendorcode/intel/edk2/uefi_2.4/MdePkg/Include +CPPFLAGS_common += -I$(src)/vendorcode/intel/edk2/uefi_2.4/MdePkg/Include/Ia32 +CPPFLAGS_common += -I$(CONFIG_FSP_INCLUDE_PATH) + +# Run an intermediate step when producing coreboot.rom +# that adds additional components to the final firmware +# image outside of CBFS +INTERMEDIATE := pch_add_me + +ifeq ($(CONFIG_BUILD_WITH_FAKE_IFD),y) +IFD_BIN_PATH := $(objgenerated)/ifdfake.bin +IFD_SECTIONS := $(addprefix -b ,$(CONFIG_IFD_BIOS_SECTION:"%"=%)) \ + $(addprefix -m ,$(CONFIG_IFD_ME_SECTION:"%"=%)) \ + $(addprefix -p ,$(CONFIG_IFD_PLATFORM_SECTION:"%"=%)) +else +IFD_BIN_PATH := $(CONFIG_IFD_BIN_PATH) +endif + +pch_add_me: $(obj)/coreboot.pre $(IFDTOOL) $(IFDFAKE) +ifeq ($(CONFIG_BUILD_WITH_FAKE_IFD),y) + printf "\n** WARNING **\n" + printf "Coreboot will be built with a fake Intel Firmware Descriptor (IFD).\n" + printf "Never write a complete coreboot.rom with a fake IFD to your board's\n" + printf "flash ROM! Make sure that you only write valid flash regions.\n\n" + printf " IFDFAKE Building a fake Intel Firmware Descriptor\n" + $(IFDFAKE) $(IFD_SECTIONS) $(IFD_BIN_PATH) +endif + printf " DD Adding Intel Firmware Descriptor\n" + printf "CONFIG_IFD_BIN_PATH: $(CONFIG_IFD_BIN_PATH)\n" + printf "IFD_BIN_PATH: $(IFD_BIN_PATH)\n" + dd if=$(IFD_BIN_PATH) \ + of=$(obj)/coreboot.pre conv=notrunc >/dev/null 2>&1 + printf "CONFIG_HAVE_ME_BIN: $(CONFIG_HAVE_ME_BIN)\n" +ifeq ($(CONFIG_HAVE_ME_BIN),y) + printf " IFDTOOL me.bin -> coreboot.pre\n" + printf "CONFIG_ME_BIN_PATH: $(CONFIG_ME_BIN_PATH)\n" + $(objutil)/ifdtool/ifdtool \ + -i ME:$(CONFIG_ME_BIN_PATH) \ + $(obj)/coreboot.pre + mv $(obj)/coreboot.pre.new $(obj)/coreboot.pre +endif + +ifeq ($(CONFIG_LOCK_MANAGEMENT_ENGINE),y) + printf " IFDTOOL Locking Management Engine\n" + $(objutil)/ifdtool/ifdtool -l $(obj)/coreboot.pre + mv $(obj)/coreboot.pre.new $(obj)/coreboot.pre +else + printf " IFDTOOL Unlocking Management Engine\n" + $(objutil)/ifdtool/ifdtool -u $(obj)/coreboot.pre + mv $(obj)/coreboot.pre.new $(obj)/coreboot.pre +endif + +PHONY += pch_add_me + +endif diff --git a/src/soc/intel/braswell/acpi.c b/src/soc/intel/braswell/acpi.c new file mode 100644 index 0000000..7acac9d --- /dev/null +++ b/src/soc/intel/braswell/acpi.c @@ -0,0 +1,588 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/acpi.h> +#include <arch/acpigen.h> +#include <arch/cpu.h> +#include <arch/io.h> +#include <arch/smp/mpspec.h> +#include <cbfs_core.h> +#include <cbmem.h> +#include <console/console.h> +#include <cpu/intel/turbo.h> +#include <cpu/x86/msr.h> +#include <cpu/x86/smm.h> +#include <cpu/x86/tsc.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <ec/google/chromeec/ec.h> +#include <fsp_gop.h> +#include <soc/acpi.h> +#include <soc/gfx.h> +#include <soc/iomap.h> +#include <soc/irq.h> +#include <soc/msr.h> +#include <soc/pattrs.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <string.h> +#include <types.h> +#include <vendorcode/google/chromeos/gnvs.h> + +#define MWAIT_RES(state, sub_state) \ + { \ + .addrl = (((state) << 4) | (sub_state)), \ + .space_id = ACPI_ADDRESS_SPACE_FIXED, \ + .bit_width = ACPI_FFIXEDHW_VENDOR_INTEL, \ + .bit_offset = ACPI_FFIXEDHW_CLASS_MWAIT, \ + .access_size = ACPI_FFIXEDHW_FLAG_HW_COORD, \ + } + +/* C-state map without S0ix */ +static acpi_cstate_t cstate_map[] = { + { + /* C1 */ + .ctype = 1, /* ACPI C1 */ + .latency = 1, + .power = 1000, + .resource = MWAIT_RES(0, 0), + }, + { + /* C6NS with no L2 shrink */ + /* NOTE: this substate is above CPUID limit */ + .ctype = 2, /* ACPI C2 */ + .latency = 500, + .power = 10, + .resource = MWAIT_RES(5, 1), + }, + { + /* C6FS with full L2 shrink */ + .ctype = 3, /* ACPI C3 */ + .latency = 1500, /* 1.5ms worst case */ + .power = 1, + .resource = MWAIT_RES(5, 2), + } +}; + +void acpi_init_gnvs(global_nvs_t *gnvs) +{ + /* Set unknown wake source */ + gnvs->pm1i = -1; + + /* CPU core count */ + gnvs->pcnt = dev_count_cpu(); + + /* Top of Low Memory (start of resource allocation) */ + gnvs->tolm = nc_read_top_of_low_memory(); + +#if IS_ENABLED(CONFIG_CONSOLE_CBMEM) + /* Update the mem console pointer. */ + gnvs->cbmc = (u32)cbmem_find(CBMEM_ID_CONSOLE); +#endif + +#if IS_ENABLED(CONFIG_CHROMEOS) + /* Initialize Verified Boot data */ + chromeos_init_vboot(&(gnvs->chromeos)); +#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC) + gnvs->chromeos.vbt2 = google_ec_running_ro() ? + ACTIVE_ECFW_RO : ACTIVE_ECFW_RW; +#endif +#endif +} + +static int acpi_sci_irq(void) +{ + void *actl = (void *)(ILB_BASE_ADDRESS + ACTL); + int scis; + static int sci_irq; + + if (sci_irq) + return sci_irq; + + /* Determine how SCI is routed. */ + scis = read32(actl) & SCIS_MASK; + switch (scis) { + case SCIS_IRQ9: + case SCIS_IRQ10: + case SCIS_IRQ11: + sci_irq = scis - SCIS_IRQ9 + 9; + break; + case SCIS_IRQ20: + case SCIS_IRQ21: + case SCIS_IRQ22: + case SCIS_IRQ23: + sci_irq = scis - SCIS_IRQ20 + 20; + break; + default: + printk(BIOS_DEBUG, "Invalid SCI route! Defaulting to IRQ9.\n"); + sci_irq = 9; + break; + } + + printk(BIOS_DEBUG, "SCI is IRQ%d\n", sci_irq); + return sci_irq; +} + +void acpi_create_intel_hpet(acpi_hpet_t *hpet) +{ + acpi_header_t *header = &(hpet->header); + acpi_addr_t *addr = &(hpet->addr); + + memset((void *) hpet, 0, sizeof(acpi_hpet_t)); + + /* fill out header fields */ + memcpy(header->signature, "HPET", 4); + memcpy(header->oem_id, OEM_ID, 6); + memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8); + memcpy(header->asl_compiler_id, ASLC, 4); + + header->length = sizeof(acpi_hpet_t); + header->revision = 1; + + /* fill out HPET address */ + addr->space_id = 0; /* Memory */ + addr->bit_width = 64; + addr->bit_offset = 0; + addr->addrl = (unsigned long long)HPET_BASE_ADDRESS & 0xffffffff; + addr->addrh = (unsigned long long)HPET_BASE_ADDRESS >> 32; + + hpet->id = 0x8086a201; /* Intel */ + hpet->number = 0x00; + hpet->min_tick = 0x0080; + + header->checksum = + acpi_checksum((void *) hpet, sizeof(acpi_hpet_t)); +} + +unsigned long acpi_fill_mcfg(unsigned long current) +{ + current += acpi_create_mcfg_mmconfig((acpi_mcfg_mmconfig_t *)current, + MCFG_BASE_ADDRESS, 0, 0, 255); + return current; +} + +void acpi_fill_in_fadt(acpi_fadt_t *fadt) +{ + const uint16_t pmbase = ACPI_BASE_ADDRESS; + + fadt->sci_int = acpi_sci_irq(); + fadt->smi_cmd = APM_CNT; + fadt->acpi_enable = APM_CNT_ACPI_ENABLE; + fadt->acpi_disable = APM_CNT_ACPI_DISABLE; + fadt->s4bios_req = 0x0; + fadt->pstate_cnt = 0; + + fadt->pm1a_evt_blk = pmbase + PM1_STS; + fadt->pm1b_evt_blk = 0x0; + fadt->pm1a_cnt_blk = pmbase + PM1_CNT; + fadt->pm1b_cnt_blk = 0x0; + fadt->pm2_cnt_blk = pmbase + PM2A_CNT_BLK; + fadt->pm_tmr_blk = pmbase + PM1_TMR; + fadt->gpe0_blk = pmbase + GPE0_STS; + fadt->gpe1_blk = 0; + + fadt->pm1_evt_len = 4; + fadt->pm1_cnt_len = 2; + fadt->pm2_cnt_len = 1; + fadt->pm_tmr_len = 4; + fadt->gpe0_blk_len = 2 * (GPE0_EN - GPE0_STS); + fadt->gpe1_blk_len = 0; + fadt->gpe1_base = 0; + fadt->cst_cnt = 0; + fadt->p_lvl2_lat = 1; + fadt->p_lvl3_lat = 87; + fadt->flush_size = 1024; + fadt->flush_stride = 16; + fadt->duty_offset = 1; + fadt->duty_width = 0; + fadt->day_alrm = 0xd; + fadt->mon_alrm = 0x00; + fadt->century = 0x00; + fadt->iapc_boot_arch = ACPI_FADT_LEGACY_DEVICES | ACPI_FADT_8042; + + fadt->flags = ACPI_FADT_WBINVD | ACPI_FADT_C1_SUPPORTED | + ACPI_FADT_C2_MP_SUPPORTED | ACPI_FADT_SLEEP_BUTTON | + ACPI_FADT_RESET_REGISTER | ACPI_FADT_SEALED_CASE | + ACPI_FADT_S4_RTC_WAKE | ACPI_FADT_PLATFORM_CLOCK; + + fadt->reset_reg.space_id = 1; + fadt->reset_reg.bit_width = 8; + fadt->reset_reg.bit_offset = 0; + fadt->reset_reg.resv = 0; + fadt->reset_reg.addrl = 0xcf9; + fadt->reset_reg.addrh = 0; + fadt->reset_value = 6; + + fadt->x_pm1a_evt_blk.space_id = 1; + fadt->x_pm1a_evt_blk.bit_width = fadt->pm1_evt_len * 8; + fadt->x_pm1a_evt_blk.bit_offset = 0; + fadt->x_pm1a_evt_blk.resv = 0; + fadt->x_pm1a_evt_blk.addrl = pmbase + PM1_STS; + fadt->x_pm1a_evt_blk.addrh = 0x0; + + fadt->x_pm1b_evt_blk.space_id = 1; + fadt->x_pm1b_evt_blk.bit_width = 0; + fadt->x_pm1b_evt_blk.bit_offset = 0; + fadt->x_pm1b_evt_blk.resv = 0; + fadt->x_pm1b_evt_blk.addrl = 0x0; + fadt->x_pm1b_evt_blk.addrh = 0x0; + + fadt->x_pm1a_cnt_blk.space_id = 1; + fadt->x_pm1a_cnt_blk.bit_width = fadt->pm1_cnt_len * 8; + fadt->x_pm1a_cnt_blk.bit_offset = 0; + fadt->x_pm1a_cnt_blk.resv = 0; + fadt->x_pm1a_cnt_blk.addrl = pmbase + PM1_CNT; + fadt->x_pm1a_cnt_blk.addrh = 0x0; + + fadt->x_pm1b_cnt_blk.space_id = 1; + fadt->x_pm1b_cnt_blk.bit_width = 0; + fadt->x_pm1b_cnt_blk.bit_offset = 0; + fadt->x_pm1b_cnt_blk.resv = 0; + fadt->x_pm1b_cnt_blk.addrl = 0x0; + fadt->x_pm1b_cnt_blk.addrh = 0x0; + + fadt->x_pm2_cnt_blk.space_id = 1; + fadt->x_pm2_cnt_blk.bit_width = fadt->pm2_cnt_len * 8; + fadt->x_pm2_cnt_blk.bit_offset = 0; + fadt->x_pm2_cnt_blk.resv = 0; + fadt->x_pm2_cnt_blk.addrl = pmbase + PM2A_CNT_BLK; + fadt->x_pm2_cnt_blk.addrh = 0x0; + + fadt->x_pm_tmr_blk.space_id = 1; + fadt->x_pm_tmr_blk.bit_width = fadt->pm_tmr_len * 8; + fadt->x_pm_tmr_blk.bit_offset = 0; + fadt->x_pm_tmr_blk.resv = 0; + fadt->x_pm_tmr_blk.addrl = pmbase + PM1_TMR; + fadt->x_pm_tmr_blk.addrh = 0x0; + + fadt->x_gpe0_blk.space_id = 1; + fadt->x_gpe0_blk.bit_width = fadt->gpe0_blk_len * 8; + fadt->x_gpe0_blk.bit_offset = 0; + fadt->x_gpe0_blk.resv = 0; + fadt->x_gpe0_blk.addrl = pmbase + GPE0_STS; + fadt->x_gpe0_blk.addrh = 0x0; + + fadt->x_gpe1_blk.space_id = 1; + fadt->x_gpe1_blk.bit_width = 0; + fadt->x_gpe1_blk.bit_offset = 0; + fadt->x_gpe1_blk.resv = 0; + fadt->x_gpe1_blk.addrl = 0x0; + fadt->x_gpe1_blk.addrh = 0x0; +} + +static acpi_tstate_t braswell_tss_table[] = { + { 100, 1000, 0, 0x00, 0 }, + { 88, 875, 0, 0x1e, 0 }, + { 75, 750, 0, 0x1c, 0 }, + { 63, 625, 0, 0x1a, 0 }, + { 50, 500, 0, 0x18, 0 }, + { 38, 375, 0, 0x16, 0 }, + { 25, 250, 0, 0x14, 0 }, + { 13, 125, 0, 0x12, 0 }, +}; + +static int generate_t_state_entries(int core, int cores_per_package) +{ + int len; + + /* Indicate SW_ALL coordination for T-states */ + len = acpigen_write_TSD_package(core, cores_per_package, SW_ALL); + + /* Indicate FFixedHW so OS will use MSR */ + len += acpigen_write_empty_PTC(); + + /* Set NVS controlled T-state limit */ + len += acpigen_write_TPC("\TLVL"); + + /* Write TSS table for MSR access */ + len += acpigen_write_TSS_package( + ARRAY_SIZE(braswell_tss_table), braswell_tss_table); + + return len; +} + +static int calculate_power(int tdp, int p1_ratio, int ratio) +{ + u32 m; + u32 power; + + /* + * M = ((1.1 - ((p1_ratio - ratio) * 0.00625)) / 1.1) ^ 2 + * + * Power = (ratio / p1_ratio) * m * tdp + */ + + m = (110000 - ((p1_ratio - ratio) * 625)) / 11; + m = (m * m) / 1000; + + power = ((ratio * 100000 / p1_ratio) / 100); + power *= (m / 100) * (tdp / 1000); + power /= 1000; + + return (int)power; +} + +static int generate_p_state_entries(int core, int cores_per_package) +{ + int len, len_pss; + int ratio_min, ratio_max, ratio_turbo, ratio_step, ratio_range_2; + int coord_type, power_max, power_unit, num_entries; + int ratio, power, clock, clock_max; + int vid, vid_turbo, vid_min, vid_max, vid_range_2; + u32 control_status; + const struct pattrs *pattrs = pattrs_get(); + msr_t msr; + + /* Inputs from CPU attributes */ + ratio_max = pattrs->iacore_ratios[IACORE_MAX]; + ratio_min = pattrs->iacore_ratios[IACORE_LFM]; + vid_max = pattrs->iacore_vids[IACORE_MAX]; + vid_min = pattrs->iacore_vids[IACORE_LFM]; + + /* Set P-states coordination type based on MSR disable bit */ + coord_type = (pattrs->num_cpus > 2) ? SW_ALL : HW_ALL; + + /* Max Non-Turbo Frequency */ + clock_max = (ratio_max * pattrs->bclk_khz) / 1000; + + /* Calculate CPU TDP in mW */ + msr = rdmsr(MSR_PKG_POWER_SKU_UNIT); + power_unit = 1 << (msr.lo & 0xf); + msr = rdmsr(MSR_PKG_POWER_LIMIT); + power_max = ((msr.lo & 0x7fff) / power_unit) * 1000; + + /* Write _PCT indicating use of FFixedHW */ + len = acpigen_write_empty_PCT(); + + /* Write _PPC with NVS specified limit on supported P-state */ + len += acpigen_write_PPC_NVS(); + + /* Write PSD indicating configured coordination type */ + len += acpigen_write_PSD_package(core, 1, coord_type); + + /* Add P-state entries in _PSS table */ + len += acpigen_write_name("_PSS"); + + /* Determine ratio points */ + ratio_step = 1; + num_entries = (ratio_max - ratio_min) / ratio_step; + while (num_entries > 15) { /* ACPI max is 15 ratios */ + ratio_step <<= 1; + num_entries >>= 1; + } + + /* P[T] is Turbo state if enabled */ + if (get_turbo_state() == TURBO_ENABLED) { + /* _PSS package count including Turbo */ + len_pss = acpigen_write_package(num_entries + 2); + + ratio_turbo = pattrs->iacore_ratios[IACORE_TURBO]; + vid_turbo = pattrs->iacore_vids[IACORE_TURBO]; + control_status = (ratio_turbo << 8) | vid_turbo; + + /* Add entry for Turbo ratio */ + len_pss += acpigen_write_PSS_package( + clock_max + 1, /* MHz */ + power_max, /* mW */ + 10, /* lat1 */ + 10, /* lat2 */ + control_status, /* control */ + control_status); /* status */ + } else { + /* _PSS package count without Turbo */ + len_pss = acpigen_write_package(num_entries + 1); + ratio_turbo = ratio_max; + vid_turbo = vid_max; + } + + /* First regular entry is max non-turbo ratio */ + control_status = (ratio_max << 8) | vid_max; + len_pss += acpigen_write_PSS_package( + clock_max, /* MHz */ + power_max, /* mW */ + 10, /* lat1 */ + 10, /* lat2 */ + control_status, /* control */ + control_status); /* status */ + + /* Set up ratio and vid ranges for VID calculation */ + ratio_range_2 = (ratio_turbo - ratio_min) * 2; + vid_range_2 = (vid_turbo - vid_min) * 2; + + /* Generate the remaining entries */ + for (ratio = ratio_min + ((num_entries - 1) * ratio_step); + ratio >= ratio_min; ratio -= ratio_step) { + + /* Calculate VID for this ratio */ + vid = ((ratio - ratio_min) * vid_range_2) / + ratio_range_2 + vid_min; + /* Round up if remainder */ + if (((ratio - ratio_min) * vid_range_2) % ratio_range_2) + vid++; + + /* Calculate power at this ratio */ + power = calculate_power(power_max, ratio_max, ratio); + clock = (ratio * pattrs->bclk_khz) / 1000; + control_status = (ratio << 8) | (vid & 0xff); + + len_pss += acpigen_write_PSS_package( + clock, /* MHz */ + power, /* mW */ + 10, /* lat1 */ + 10, /* lat2 */ + control_status, /* control */ + control_status); /* status */ + } + + /* Fix package length */ + len_pss--; + acpigen_patch_len(len_pss); + + return len + len_pss; +} + +void generate_cpu_entries(void) +{ + int len_pr, core; + int pcontrol_blk = get_pmbase(), plen = 6; + const struct pattrs *pattrs = pattrs_get(); + + for (core = 0; core < pattrs->num_cpus; core++) { + if (core > 0) { + pcontrol_blk = 0; + plen = 0; + } + + /* Generate processor _PR.CPUx */ + len_pr = acpigen_write_processor( + core, pcontrol_blk, plen); + + /* Generate P-state tables */ + len_pr += generate_p_state_entries( + core, pattrs->num_cpus); + + /* Generate C-state tables */ + len_pr += acpigen_write_CST_package( + cstate_map, ARRAY_SIZE(cstate_map)); + + /* Generate T-state tables */ + len_pr += generate_t_state_entries( + core, pattrs->num_cpus); + + len_pr--; + acpigen_patch_len(len_pr); + } +} + +unsigned long acpi_madt_irq_overrides(unsigned long current) +{ + int sci_irq = acpi_sci_irq(); + acpi_madt_irqoverride_t *irqovr; + uint16_t sci_flags = MP_IRQ_TRIGGER_LEVEL; + + /* INT_SRC_OVR */ + irqovr = (void *)current; + current += acpi_create_madt_irqoverride(irqovr, 0, 0, 2, 0); + + if (sci_irq >= 20) + sci_flags |= MP_IRQ_POLARITY_LOW; + else + sci_flags |= MP_IRQ_POLARITY_HIGH; + + irqovr = (void *)current; + current += acpi_create_madt_irqoverride(irqovr, 0, sci_irq, sci_irq, + sci_flags); + + return current; +} + +#if CONFIG_GOP_SUPPORT +/* Reading VBT table from flash */ +static void get_fsp_vbt(igd_opregion_t *opregion) +{ + const optionrom_vbt_t *vbt; + uint32_t vbt_len; + + vbt = fsp_get_vbt(&vbt_len); + if (!vbt) + die("vbt data not found"); + memcpy(opregion->header.vbios_version, vbt->coreblock_biosbuild, 4); + memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size < + sizeof(opregion->vbt.gvd1) ? vbt->hdr_vbt_size : + sizeof(opregion->vbt.gvd1)); +} + +/* Initialize IGD OpRegion, called from ACPI code */ +int init_igd_opregion(igd_opregion_t *opregion) +{ + device_t igd; + u16 reg16; + + memset(opregion, 0, sizeof(igd_opregion_t)); + + /* FIXME if IGD is disabled, we should exit here. */ + + memcpy(&opregion->header.signature, IGD_OPREGION_SIGNATURE, + sizeof(IGD_OPREGION_SIGNATURE)); + + /* 8kb */ + opregion->header.size = sizeof(igd_opregion_t) / 1024; + opregion->header.version = IGD_OPREGION_VERSION; + + /* FIXME We just assume we're mobile for now */ + opregion->header.mailboxes = MAILBOXES_MOBILE; + + /* TODO Initialize Mailbox 1 */ + + /* TODO Initialize Mailbox 3 */ + opregion->mailbox3.bclp = IGD_BACKLIGHT_BRIGHTNESS; + opregion->mailbox3.pfit = IGD_FIELD_VALID | IGD_PFIT_STRETCH; + opregion->mailbox3.pcft = 0; /* should be (IMON << 1) & 0x3e */ + opregion->mailbox3.cblv = IGD_FIELD_VALID | IGD_INITIAL_BRIGHTNESS; + opregion->mailbox3.bclm[0] = IGD_WORD_FIELD_VALID + 0x0000; + opregion->mailbox3.bclm[1] = IGD_WORD_FIELD_VALID + 0x0a19; + opregion->mailbox3.bclm[2] = IGD_WORD_FIELD_VALID + 0x1433; + opregion->mailbox3.bclm[3] = IGD_WORD_FIELD_VALID + 0x1e4c; + opregion->mailbox3.bclm[4] = IGD_WORD_FIELD_VALID + 0x2866; + opregion->mailbox3.bclm[5] = IGD_WORD_FIELD_VALID + 0x327f; + opregion->mailbox3.bclm[6] = IGD_WORD_FIELD_VALID + 0x3c99; + opregion->mailbox3.bclm[7] = IGD_WORD_FIELD_VALID + 0x46b2; + opregion->mailbox3.bclm[8] = IGD_WORD_FIELD_VALID + 0x50cc; + opregion->mailbox3.bclm[9] = IGD_WORD_FIELD_VALID + 0x5ae5; + opregion->mailbox3.bclm[10] = IGD_WORD_FIELD_VALID + 0x64ff; + + get_fsp_vbt(opregion); + + /* + * TODO This needs to happen in S3 resume, too. + * Maybe it should move to the finalize handler + */ + igd = dev_find_slot(0, PCI_DEVFN(GFX_DEV, GFX_FUNC)); + + pci_write_config32(igd, ASLS, (u32)opregion); + reg16 = pci_read_config16(igd, SWSCI); + reg16 &= ~(1 << 0); + reg16 |= (1 << 15); + pci_write_config16(igd, SWSCI, reg16); + + return 0; +} +#endif diff --git a/src/soc/intel/braswell/acpi/cpu.asl b/src/soc/intel/braswell/acpi/cpu.asl new file mode 100644 index 0000000..401242b --- /dev/null +++ b/src/soc/intel/braswell/acpi/cpu.asl @@ -0,0 +1,89 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2011 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +/* CPU */ +#define DPTF_CPU_PASSIVE 80 +#define DPTF_CPU_CRITICAL 90 +#define DPTF_CPU_PASSIVE 80 +#define DPTF_CPU_CRITICAL 90 +#define DPTF_CPU_ACTIVE_AC0 90 +#define DPTF_CPU_ACTIVE_AC1 80 +#define DPTF_CPU_ACTIVE_AC2 70 +#define DPTF_CPU_ACTIVE_AC3 60 +#define DPTF_CPU_ACTIVE_AC4 50 + +/* These devices are created at runtime */ +External (_PR.CPU0, DeviceObj) +External (_PR.CPU1, DeviceObj) +External (_PR.CPU2, DeviceObj) +External (_PR.CPU3, DeviceObj) + + +/* Notify OS to re-read CPU tables, assuming ^2 CPU count */ +Method (PNOT) +{ + If (LGreaterEqual (\PCNT, 2)) { + Notify (_PR.CPU0, 0x81) /* _CST */ + Notify (_PR.CPU1, 0x81) /* _CST */ + } + If (LGreaterEqual (\PCNT, 4)) { + Notify (_PR.CPU2, 0x81) /* _CST */ + Notify (_PR.CPU3, 0x81) /* _CST */ + } +} + +/* Notify OS to re-read CPU _PPC limit, assuming ^2 CPU count */ +Method (PPCN) +{ + If (LGreaterEqual (\PCNT, 2)) { + Notify (_PR.CPU0, 0x80) /* _PPC */ + Notify (_PR.CPU1, 0x80) /* _PPC */ + } + If (LGreaterEqual (\PCNT, 4)) { + Notify (_PR.CPU2, 0x80) /* _PPC */ + Notify (_PR.CPU3, 0x80) /* _PPC */ + } +} + +/* Notify OS to re-read Throttle Limit tables, assuming ^2 CPU count */ +Method (TNOT) +{ + If (LGreaterEqual (\PCNT, 2)) { + Notify (_PR.CPU0, 0x82) /* _TPC */ + Notify (_PR.CPU1, 0x82) /* _TPC */ + } + If (LGreaterEqual (\PCNT, 4)) { + Notify (_PR.CPU2, 0x82) /* _TPC */ + Notify (_PR.CPU3, 0x82) /* _TPC */ + } +} + +/* Return a package containing enabled processor entries */ +Method (PPKG) +{ + If (LGreaterEqual (\PCNT, 4)) { + Return (Package() {_PR.CPU0, _PR.CPU1, _PR.CPU2, _PR.CPU3}) + } ElseIf (LGreaterEqual (\PCNT, 2)) { + Return (Package() {_PR.CPU0, _PR.CPU1}) + } Else { + Return (Package() {_PR.CPU0}) + } +} diff --git a/src/soc/intel/braswell/acpi/device_nvs.asl b/src/soc/intel/braswell/acpi/device_nvs.asl new file mode 100644 index 0000000..c9254b5 --- /dev/null +++ b/src/soc/intel/braswell/acpi/device_nvs.asl @@ -0,0 +1,87 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +/* Device Enabled in ACPI Mode */ + +S0EN, 8, /* SDMA Enable */ +S1EN, 8, /* I2C1 Enable */ +S2EN, 8, /* I2C2 Enable */ +S3EN, 8, /* I2C3 Enable */ +S4EN, 8, /* I2C4 Enable */ +S5EN, 8, /* I2C5 Enable */ +S6EN, 8, /* I2C6 Enable */ +S7EN, 8, /* I2C7 Enable */ +S8EN, 8, /* SDMA2 Enable */ +S9EN, 8, /* SPI Enable */ +SAEN, 8, /* PWM1 Enable */ +SBEN, 8, /* PWM2 Enable */ +SCEN, 8, /* UART2 Enable */ +SDEN, 8, /* UART2 Enable */ +C0EN, 8, /* MMC Enable */ +C1EN, 8, /* SDIO Enable */ +C2EN, 8, /* SD Card Enable */ +LPEN, 8, /* LPE Enable */ + +/* BAR 0 */ + +S0B0, 32, /* SDMA BAR0 */ +S1B0, 32, /* I2C1 BAR0 */ +S2B0, 32, /* I2C2 BAR0 */ +S3B0, 32, /* I2C3 BAR0 */ +S4B0, 32, /* I2C4 BAR0 */ +S5B0, 32, /* I2C5 BAR0 */ +S6B0, 32, /* I2C6 BAR0 */ +S7B0, 32, /* I2C7 BAR0 */ +S8B0, 32, /* SDMA2 BAR0 */ +S9B0, 32, /* SPI BAR0 */ +SAB0, 32, /* PWM1 BAR0 */ +SBB0, 32, /* PWM2 BAR0 */ +SCB0, 32, /* UART1 BAR0 */ +SDB0, 32, /* UART2 BAR0 */ +C0B0, 32, /* MMC BAR0 */ +C1B0, 32, /* SDIO BAR0 */ +C2B0, 32, /* SD Card BAR0 */ +LPB0, 32, /* LPE BAR0 */ + +/* BAR 1 */ + +S0B1, 32, /* SDMA BAR1 */ +S1B1, 32, /* I2C1 BAR1 */ +S2B1, 32, /* I2C2 BAR1 */ +S3B1, 32, /* I2C3 BAR1 */ +S4B1, 32, /* I2C4 BAR1 */ +S5B1, 32, /* I2C5 BAR1 */ +S6B1, 32, /* I2C6 BAR1 */ +S7B1, 32, /* I2C7 BAR1 */ +S8B1, 32, /* SDMA2 BAR1 */ +S9B1, 32, /* SPI BAR1 */ +SAB1, 32, /* PWM1 BAR1 */ +SBB1, 32, /* PWM2 BAR1 */ +SCB1, 32, /* UART1 BAR1 */ +SDB1, 32, /* UART2 BAR1 */ +C0B1, 32, /* MMC BAR1 */ +C1B1, 32, /* SDIO BAR1 */ +C2B1, 32, /* SD Card BAR1 */ +LPB1, 32, /* LPE BAR1 */ + +/* Extra */ + +LPFW, 32, /* LPE BAR2 Firmware */ diff --git a/src/soc/intel/braswell/acpi/dptf/charger.asl b/src/soc/intel/braswell/acpi/dptf/charger.asl new file mode 100644 index 0000000..7c7f62f --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/charger.asl @@ -0,0 +1,59 @@ +Device (TCHG) +{ + Name (_HID, "INT3403") + Name (_UID, 0) + Name (PTYP, 0x0B) + Name (_STR, Unicode("Battery Charger")) + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + /* Return charger performance states defined by mainboard */ + Method (PPSS) + { + Return (_SB.CHPS) + } + + /* Return maximum charger current limit */ + Method (PPPC) + { + /* Convert size of PPSS table to index */ + Store (SizeOf (_SB.CHPS), Local0) + Decrement (Local0) + + /* Check if charging is disabled (AC removed) */ + If (LEqual (\PWRS, Zero)) { + /* Return last power state */ + Return (Local0) + } Else { + /* Return highest power state */ + Return (0) + } + + Return (0) + } + + /* Set charger current limit */ + Method (SPPC, 1) + { + /* Retrieve Control (index 4) for specified PPSS level */ + Store (DeRefOf (Index (DeRefOf (Index + (_SB.CHPS, ToInteger (Arg0))), 4)), Local0) + + /* Pass Control value to EC to limit charging */ + _SB.PCI0.LPCB.EC0.CHGS (Local0) + } + + /* Initialize charger participant */ + Method (INIT) + { + /* Disable charge limit */ + _SB.PCI0.LPCB.EC0.CHGD () + } +} diff --git a/src/soc/intel/braswell/acpi/dptf/cpu.asl b/src/soc/intel/braswell/acpi/dptf/cpu.asl new file mode 100644 index 0000000..9b1930b --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/cpu.asl @@ -0,0 +1,178 @@ +External (_PR.CPU0._TSS, MethodObj) +External (_PR.CPU0._TPC, MethodObj) +External (_PR.CPU0._PTC, PkgObj) +External (_PR.CPU0._TSD, PkgObj) +External (_PR.CPU0._PSS, MethodObj) +External (_SB.DPTF.CTOK, MethodObj) + +Device (B0DB) +{ + Name (_ADR, 0x000B0000) /* Bus 0, Device B, Function 0 */ + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + /* + * Processor Throttling Controls + */ + + Method (_TSS) + { + If (CondRefOf (_PR.CPU0._TSS)) { + Return (_PR.CPU0._TSS) + } Else { + Return (Package () + { + Package () { 0, 0, 0, 0, 0 } + }) + } + } + + Method (_TPC) + { + If (CondRefOf (_PR.CPU0._TPC)) { + Return (_PR.CPU0._TPC) + } Else { + Return (0) + } + } + + Method (_PTC) + { + If (CondRefOf (_PR.CPU0._PTC)) { + Return (_PR.CPU0._PTC) + } Else { + Return (Package () + { + Buffer () { 0 }, + Buffer () { 0 } + }) + } + } + + Method (_TSD) + { + If (CondRefOf (_PR.CPU0._TSD)) { + Return (_PR.CPU0._TSD) + } Else { + Return (Package () + { + Package () { 5, 0, 0, 0, 0 } + }) + } + } + + Method (_TDL) + { + If (CondRefOf (_PR.CPU0._TSS)) { + Store (SizeOf (_PR.CPU0._TSS ()), Local0) + Decrement (Local0) + Return (Local0) + } Else { + Return (0) + } + } + + /* + * Processor Performance Control + */ + + Method (_PPC) + { + Return (0) + } + + Method (SPPC, 1) + { + Store (Arg0, \PPCM) + + /* Notify OS to re-read _PPC limit on each CPU */ + \PPCN () + } + + Method (_PSS) + { + If (CondRefOf (_PR.CPU0._PSS)) { + Return (_PR.CPU0._PSS) + } Else { + Return (Package () + { + Package () { 0, 0, 0, 0, 0, 0 } + }) + } + } + + Method (_PDL) + { + /* Check for mainboard specific _PDL override */ + If (CondRefOf (_SB.MPDL)) { + Return (_SB.MPDL) + } ElseIf (CondRefOf (_PR.CPU0._PSS)) { + Store (SizeOf (_PR.CPU0._PSS ()), Local0) + Decrement (Local0) + Return (Local0) + } Else { + Return (0) + } + } + + /* Return PPCC table defined by mainboard */ + Method (PPCC) + { + Return (_SB.MPPC) + } +#ifdef DPTF_CPU_CRITICAL + Method (_CRT) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_CRITICAL)) + } +#endif + +#ifdef DPTF_CPU_PASSIVE + Method (_PSV) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_PASSIVE)) + } +#endif + +#ifdef DPTF_CPU_ACTIVE_AC0 + Method (_AC0) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_ACTIVE_AC0)) + } +#endif + +#ifdef DPTF_CPU_ACTIVE_AC1 + Method (_AC1) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_ACTIVE_AC1)) + } +#endif + +#ifdef DPTF_CPU_ACTIVE_AC2 + Method (_AC2) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_ACTIVE_AC2)) + } +#endif + +#ifdef DPTF_CPU_ACTIVE_AC3 + Method (_AC3) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_ACTIVE_AC3)) + } +#endif + +#ifdef DPTF_CPU_ACTIVE_AC4 + Method (_AC4) + { + Return (_SB.DPTF.CTOK(DPTF_CPU_ACTIVE_AC4)) + } +#endif +} diff --git a/src/soc/intel/braswell/acpi/dptf/dptf.asl b/src/soc/intel/braswell/acpi/dptf/dptf.asl new file mode 100644 index 0000000..f8d8347 --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/dptf.asl @@ -0,0 +1,81 @@ + +Device (DPTF) +{ + Name (_HID, EISAID ("INT3400")) + Name (_UID, 0) + + Name (IDSP, Package() + { + /* DPPM Passive Policy 1.0 */ + ToUUID ("42A441D6-AE6A-462B-A84B-4A8CE79027D3"), + + /* DPPM Critical Policy */ + ToUUID ("97C68AE7-15FA-499c-B8C9-5DA81D606E0A"), + + /* DPPM Cooling Policy */ + ToUUID ("16CAF1B7-DD38-40ED-B1C1-1B8A1913D531"), + }) + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + /* + * Arg0: Buffer containing UUID + * Arg1: Integer containing Revision ID of buffer format + * Arg2: Integer containing count of entries in Arg3 + * Arg3: Buffer containing list of DWORD capabilities + * Return: Buffer containing list of DWORD capabilities + */ + Method (_OSC, 4, Serialized) + { + /* Check for Passive Policy UUID */ + If (LEqual (DeRefOf (Index (IDSP, 0)), Arg0)) { + /* Initialize Thermal Devices */ + ^TINI () + +#ifdef DPTF_ENABLE_CHARGER + /* Initialize Charger Device */ + ^TCHG.INIT () +#endif + } + + Return (Arg3) + } + + /* Priority based _TRT */ + Name (TRTR, 1) + + Method (_TRT) + { + Return (_SB.DTRT) + } + + /* Convert from Degrees C to 1/10 Kelvin for ACPI */ + Method (CTOK, 1) { + /* 10th of Degrees C */ + Multiply (Arg0, 10, Local0) + + /* Convert to Kelvin */ + Add (Local0, 2732, Local0) + + Return (Local0) + } + + /* Include Thermal Participants */ + #include "thermal.asl" + +#ifdef DPTF_ENABLE_CHARGER + /* Include Charger Participant */ + #include "charger.asl" +#endif + + /* Include Network Participants */ + #include "wifi.asl" + #include "wwan.asl" +} diff --git a/src/soc/intel/braswell/acpi/dptf/thermal.asl b/src/soc/intel/braswell/acpi/dptf/thermal.asl new file mode 100644 index 0000000..b123fb6 --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/thermal.asl @@ -0,0 +1,203 @@ +/* Thermal Threshold Event Handler */ +Method (TEVT, 1, NotSerialized) +{ + Store (ToInteger (Arg0), Local0) + +#ifdef DPTF_TSR0_SENSOR_ID + If (LEqual (Local0, DPTF_TSR0_SENSOR_ID)) { + Notify (^TSR0, 0x90) + } +#endif +#ifdef DPTF_TSR1_SENSOR_ID + If (LEqual (Local0, DPTF_TSR1_SENSOR_ID)) { + Notify (^TSR1, 0x90) + } +#endif +#ifdef DPTF_TSR2_SENSOR_ID + If (LEqual (Local0, DPTF_TSR2_SENSOR_ID)) { + Notify (^TSR2, 0x90) + } +#endif +} + +/* Thermal device initialization - Disable Aux Trip Points */ +Method (TINI) +{ +#ifdef DPTF_TSR0_SENSOR_ID + ^TSR0.PATD () +#endif +#ifdef DPTF_TSR1_SENSOR_ID + ^TSR1.PATD () +#endif +#ifdef DPTF_TSR2_SENSOR_ID + ^TSR2.PATD () +#endif +} + +#ifdef DPTF_TSR0_SENSOR_ID +Device (TSR0) +{ + Name (_HID, EISAID ("INT3403")) + Name (_UID, 1) + Name (PTYP, 0x03) + Name (TMPI, DPTF_TSR0_SENSOR_ID) + Name (_STR, Unicode (DPTF_TSR0_SENSOR_NAME)) + Name (GTSH, 20) /* 2 degree hysteresis */ + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + Method (_TMP, 0, Serialized) + { + Return (_SB.PCI0.LPCB.EC0.TSRD (TMPI)) + } + + Method (_PSV) + { + Return (CTOK (DPTF_TSR0_PASSIVE)) + } + + Method (_CRT) + { + Return (CTOK (DPTF_TSR0_CRITICAL)) + } + + Name (PATC, 2) + + /* Set Aux Trip Point */ + Method (PAT0, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT0 (TMPI, Arg0) + } + + /* Set Aux Trip Point */ + Method (PAT1, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT1 (TMPI, Arg0) + } + + /* Disable Aux Trip Point */ + Method (PATD, 0, Serialized) + { + _SB.PCI0.LPCB.EC0.PATD (TMPI) + } +} +#endif + +#ifdef DPTF_TSR1_SENSOR_ID +Device (TSR1) +{ + Name (_HID, EISAID ("INT3403")) + Name (_UID, 2) + Name (PTYP, 0x03) + Name (TMPI, DPTF_TSR1_SENSOR_ID) + Name (_STR, Unicode (DPTF_TSR1_SENSOR_NAME)) + Name (GTSH, 20) /* 2 degree hysteresis */ + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + Method (_TMP, 0, Serialized) + { + Return (_SB.PCI0.LPCB.EC0.TSRD (TMPI)) + } + + Method (_PSV) + { + Return (CTOK (DPTF_TSR1_PASSIVE)) + } + + Method (_CRT) + { + Return (CTOK (DPTF_TSR1_CRITICAL)) + } + + Name (PATC, 2) + + /* Set Aux Trip Point */ + Method (PAT0, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT0 (TMPI, Arg0) + } + + /* Set Aux Trip Point */ + Method (PAT1, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT1 (TMPI, Arg0) + } + + /* Disable Aux Trip Point */ + Method (PATD, 0, Serialized) + { + _SB.PCI0.LPCB.EC0.PATD (TMPI) + } +} +#endif + +#ifdef DPTF_TSR2_SENSOR_ID +Device (TSR2) +{ + Name (_HID, EISAID ("INT3403")) + Name (_UID, 3) + Name (PTYP, 0x03) + Name (TMPI, DPTF_TSR2_SENSOR_ID) + Name (_STR, Unicode (DPTF_TSR2_SENSOR_NAME)) + Name (GTSH, 20) /* 2 degree hysteresis */ + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + Method (_TMP, 0, Serialized) + { + Return (_SB.PCI0.LPCB.EC0.TSRD (TMPI)) + } + + Method (_PSV) + { + Return (CTOK (DPTF_TSR2_PASSIVE)) + } + + Method (_CRT) + { + Return (CTOK (DPTF_TSR2_CRITICAL)) + } + + Name (PATC, 2) + + /* Set Aux Trip Point */ + Method (PAT0, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT0 (TMPI, Arg0) + } + + /* Set Aux Trip Point */ + Method (PAT1, 1, Serialized) + { + _SB.PCI0.LPCB.EC0.PAT1 (TMPI, Arg0) + } + + /* Disable Aux Trip Point */ + Method (PATD, 0, Serialized) + { + _SB.PCI0.LPCB.EC0.PATD (TMPI) + } +} +#endif diff --git a/src/soc/intel/braswell/acpi/dptf/wifi.asl b/src/soc/intel/braswell/acpi/dptf/wifi.asl new file mode 100644 index 0000000..28da69a --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/wifi.asl @@ -0,0 +1,16 @@ +Device (WIFI) +{ + Name (_HID, "INT3408") + Name (_UID, 0) + Name (PTYP, 0x07) + Name (_STR, Unicode("WIFI wireless device")) + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} diff --git a/src/soc/intel/braswell/acpi/dptf/wwan.asl b/src/soc/intel/braswell/acpi/dptf/wwan.asl new file mode 100644 index 0000000..f205b8a --- /dev/null +++ b/src/soc/intel/braswell/acpi/dptf/wwan.asl @@ -0,0 +1,16 @@ +Device (WWAN) +{ + Name (_HID, "INT3408") + Name (_UID, 0) + Name (PTYP, 0xF) + Name (_STR, Unicode("Wireless Wide Area Network")) + + Method (_STA) + { + If (LEqual (\DPTE, One)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} diff --git a/src/soc/intel/braswell/acpi/globalnvs.asl b/src/soc/intel/braswell/acpi/globalnvs.asl new file mode 100644 index 0000000..cc3f09b --- /dev/null +++ b/src/soc/intel/braswell/acpi/globalnvs.asl @@ -0,0 +1,109 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +/* Global Variables */ + +Name(\PICM, 0) /* IOAPIC/8259 */ + +/* + * Global ACPI memory region. This region is used for passing information + * between coreboot (aka "the system bios"), ACPI, and the SMI handler. + * Since we don't know where this will end up in memory at ACPI compile time, + * we have to fix it up in coreboot's ACPI creation phase. + */ + + +OperationRegion (GNVS, SystemMemory, 0xC0DEBABE, 0x2000) +Field (GNVS, ByteAcc, NoLock, Preserve) +{ + /* Miscellaneous */ + Offset (0x00), + OSYS, 16, /* 0x00 - Operating System */ + SMIF, 8, /* 0x02 - SMI function */ + PRM0, 8, /* 0x03 - SMI function parameter */ + PRM1, 8, /* 0x04 - SMI function parameter */ + SCIF, 8, /* 0x05 - SCI function */ + PRM2, 8, /* 0x06 - SCI function parameter */ + PRM3, 8, /* 0x07 - SCI function parameter */ + LCKF, 8, /* 0x08 - Global Lock function for EC */ + PRM4, 8, /* 0x09 - Lock function parameter */ + PRM5, 8, /* 0x0a - Lock function parameter */ + P80D, 32, /* 0x0b - Debug port (IO 0x80) value */ + LIDS, 8, /* 0x0f - LID state (open = 1) */ + PWRS, 8, /* 0x10 - Power State (AC = 1) */ + PCNT, 8, /* 0x11 - Processor count */ + TPMP, 8, /* 0x12 - TPM Present and Enabled */ + TLVL, 8, /* 0x13 - Throttle Level */ + PPCM, 8, /* 0x14 - Maximum P-state usable by OS */ + PM1I, 32, /* 0x15 - System Wake Source - PM1 Index */ + + /* Device Config */ + Offset (0x20), + S5U0, 8, /* 0x20 - Enable USB0 in S5 */ + S5U1, 8, /* 0x21 - Enable USB1 in S5 */ + S3U0, 8, /* 0x22 - Enable USB0 in S3 */ + S3U1, 8, /* 0x23 - Enable USB1 in S3 */ + TACT, 8, /* 0x24 - Thermal Active trip point */ + TPSV, 8, /* 0x25 - Thermal Passive trip point */ + TCRT, 8, /* 0x26 - Thermal Critical trip point */ + DPTE, 8, /* 0x27 - Enable DPTF */ + + /* Base addresses */ + Offset (0x30), + CMEM, 32, /* 0x30 - CBMEM TOC */ + TOLM, 32, /* 0x34 - Top of Low Memory */ + CBMC, 32, /* 0x38 - coreboot mem console pointer */ + + /* ChromeOS specific */ + Offset (0x100), + #include <vendorcode/google/chromeos/acpi/gnvs.asl> + + Offset (0x1000), + #include <soc/intel/braswell/acpi/device_nvs.asl> +} + +/* Set flag to enable USB charging in S3 */ +Method (S3UE) +{ + Store (One, \S3U0) + Store (One, \S3U1) +} + +/* Set flag to disable USB charging in S3 */ +Method (S3UD) +{ + Store (Zero, \S3U0) + Store (Zero, \S3U1) +} + +/* Set flag to enable USB charging in S5 */ +Method (S5UE) +{ + Store (One, \S5U0) + Store (One, \S5U1) +} + +/* Set flag to disable USB charging in S5 */ +Method (S5UD) +{ + Store (Zero, \S5U0) + Store (Zero, \S5U1) +} diff --git a/src/soc/intel/braswell/acpi/gpio.asl b/src/soc/intel/braswell/acpi/gpio.asl new file mode 100644 index 0000000..a44bc28 --- /dev/null +++ b/src/soc/intel/braswell/acpi/gpio.asl @@ -0,0 +1,139 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <soc/iomap.h> +#include <soc/irq.h> + +/* GPIO SouthWest Community */ +Device (GPSW) +{ + Name (_HID, "INT33FF") + Name (_CID, "INT33FF") + Name (_UID, 1) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x8000, RMEM) + Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,,) + { + GPIO_SW_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^RMEM._BAS, RBAS) + Add (IO_BASE_ADDRESS, COMMUNITY_OFFSET_GPSOUTHWEST, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + Return (0xF) + } +} + +/* GPIO North Community */ +Device (GPNC) +{ + Name (_HID, "INT33FF") + Name (_CID, "INT33FF") + Name (_UID, 2) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x8000, RMEM) + Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,,) + { + GPIO_N_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^RMEM._BAS, RBAS) + Add (IO_BASE_ADDRESS, COMMUNITY_OFFSET_GPNORTH, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + Return (0xF) + } +} + +/* GPIO East Community */ +Device (GPEC) +{ + Name (_HID, "INT33FF") + Name (_CID, "INT33FF") + Name (_UID, 3) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x8000, RMEM) + Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,,) + { + GPIO_E_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^RMEM._BAS, RBAS) + Add (IO_BASE_ADDRESS, COMMUNITY_OFFSET_GPEAST, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + Return (0xF) + } +} + +/* GPIO SouthEast Community */ +Device (GPSE) +{ + Name (_HID, "INT33FF") + Name (_CID, "INT33FF") + Name (_UID, 4) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x8000, RMEM) + Interrupt (ResourceConsumer, Level, ActiveLow, Shared,,,) + { + GPIO_SE_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^RMEM._BAS, RBAS) + Add (IO_BASE_ADDRESS, COMMUNITY_OFFSET_GPSOUTHEAST, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + Return (0xF) + } +} diff --git a/src/soc/intel/braswell/acpi/irq_helper.h b/src/soc/intel/braswell/acpi/irq_helper.h new file mode 100644 index 0000000..b19895b --- /dev/null +++ b/src/soc/intel/braswell/acpi/irq_helper.h @@ -0,0 +1,48 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#undef PCI_DEV_PIRQ_ROUTES +#undef ACPI_DEV_APIC_IRQ +#undef PCI_DEV_PIRQ_ROUTE +#undef PIRQ_PIC_ROUTES +#undef PIRQ_PIC + +#if defined(PIC_MODE) + +#define ACPI_DEV_APIC_IRQ(dev_, pin_, pin_name_) \ + Package() { ## dev_ ## ffff, pin_, _SB.PCI0.LPCB.LNK ## pin_name_, 0 } + +#else /* defined(PIC_MODE) */ + +#define ACPI_DEV_APIC_IRQ(dev_, pin_, pin_name_) \ + Package() { ## dev_ ## ffff, pin_, 0, PIRQ ## pin_name_ ## _APIC_IRQ } + +#endif + +#define PCI_DEV_PIRQ_ROUTE(dev_, a_, b_, c_, d_) \ + ACPI_DEV_APIC_IRQ(dev_, 0, a_), \ + ACPI_DEV_APIC_IRQ(dev_, 1, b_), \ + ACPI_DEV_APIC_IRQ(dev_, 2, c_), \ + ACPI_DEV_APIC_IRQ(dev_, 3, d_) + +/* Empty PIRQ_PIC definition. */ +#define PIRQ_PIC(pirq_, pic_irq_) + +/* Include the mainboard irq route definition. */ +#include "irqroute.h" diff --git a/src/soc/intel/braswell/acpi/irqlinks.asl b/src/soc/intel/braswell/acpi/irqlinks.asl new file mode 100644 index 0000000..ab6427f --- /dev/null +++ b/src/soc/intel/braswell/acpi/irqlinks.asl @@ -0,0 +1,493 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Device (LNKA) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 1) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTA) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLA, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLA, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTA */ + ShiftLeft(1, And(PRTA, 0x0f), IRQ0) + + Return (RTLA) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTA) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTA, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKB) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 2) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTB) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLB, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLB, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTB */ + ShiftLeft(1, And(PRTB, 0x0f), IRQ0) + + Return (RTLB) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTB) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTB, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKC) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 3) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTC) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLC, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLC, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTC */ + ShiftLeft(1, And(PRTC, 0x0f), IRQ0) + + Return (RTLC) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTC) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTC, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKD) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 4) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTD) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLD, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLD, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTD */ + ShiftLeft(1, And(PRTD, 0x0f), IRQ0) + + Return (RTLD) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTD) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTD, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKE) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 5) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTE) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLE, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLE, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTE */ + ShiftLeft(1, And(PRTE, 0x0f), IRQ0) + + Return (RTLE) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTE) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTE, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKF) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 6) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTF) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLF, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLF, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTF */ + ShiftLeft(1, And(PRTF, 0x0f), IRQ0) + + Return (RTLF) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTF) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTF, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKG) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 7) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTG) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLG, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLG, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTG */ + ShiftLeft(1, And(PRTG, 0x0f), IRQ0) + + Return (RTLG) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTG) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTG, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + +Device (LNKH) +{ + Name (_HID, EISAID("PNP0C0F")) + Name (_UID, 8) + + /* Disable method */ + Method (_DIS, 0, Serialized) + { + Store (0x80, PRTH) + } + + /* Possible Resource Settings for this Link */ + Name (_PRS, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) + { 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 } + }) + + /* Current Resource Settings for this link */ + Method (_CRS, 0, Serialized) + { + Name (RTLH, ResourceTemplate() + { + IRQ(Level, ActiveLow, Shared) {} + }) + CreateWordField(RTLH, 1, IRQ0) + + /* Clear the WordField */ + Store (Zero, IRQ0) + + /* Set the bit from PRTH */ + ShiftLeft(1, And(PRTH, 0x0f), IRQ0) + + Return (RTLH) + } + + /* Set Resource Setting for this IRQ link */ + Method (_SRS, 1, Serialized) + { + CreateWordField(Arg0, 1, IRQ0) + + /* Which bit is set? */ + FindSetRightBit(IRQ0, Local0) + + Decrement(Local0) + Store(Local0, PRTH) + } + + /* Status */ + Method (_STA, 0, Serialized) + { + If(And(PRTH, 0x80)) { + Return (0x9) + } Else { + Return (0xb) + } + } +} + diff --git a/src/soc/intel/braswell/acpi/irqroute.asl b/src/soc/intel/braswell/acpi/irqroute.asl new file mode 100644 index 0000000..db2b228 --- /dev/null +++ b/src/soc/intel/braswell/acpi/irqroute.asl @@ -0,0 +1,37 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* PCI Interrupt Routing */ +Method(_PRT) +{ + If (PICM) { + Return (Package() { + #undef PIC_MODE + #include <soc/intel/braswell/acpi/irq_helper.h> + PCI_DEV_PIRQ_ROUTES + }) + } Else { + Return (Package() { + #define PIC_MODE + #include <soc/intel/braswell/acpi/irq_helper.h> + PCI_DEV_PIRQ_ROUTES + }) + } +} diff --git a/src/soc/intel/braswell/acpi/lpc.asl b/src/soc/intel/braswell/acpi/lpc.asl new file mode 100644 index 0000000..7961a9a --- /dev/null +++ b/src/soc/intel/braswell/acpi/lpc.asl @@ -0,0 +1,169 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +/* Intel LPC Bus Device - 0:1f.0 */ + +Device (LPCB) +{ + Name(_ADR, 0x001f0000) + + #include "irqlinks.asl" + + #include "acpi/ec.asl" + + Device (DMAC) /* DMA Controller */ + { + Name(_HID, EISAID("PNP0200")) + Name(_CRS, ResourceTemplate() + { + IO (Decode16, 0x00, 0x00, 0x01, 0x20) + IO (Decode16, 0x81, 0x81, 0x01, 0x11) + IO (Decode16, 0x93, 0x93, 0x01, 0x0d) + IO (Decode16, 0xc0, 0xc0, 0x01, 0x20) + DMA (Compatibility, NotBusMaster, Transfer8_16) { 4 } + }) + } + + Device (FWH) /* Firmware Hub */ + { + Name (_HID, EISAID("INT0800")) + Name (_CRS, ResourceTemplate() + { + Memory32Fixed(ReadOnly, 0xff000000, 0x01000000) + }) + } + + Device (HPET) + { + Name (_HID, EISAID("PNP0103")) + Name (_CID, 0x010CD041) + + Method (_STA, 0) /* Device Status */ + { + Return (0xf) /* Enable and show device */ + } + + Name(_CRS, ResourceTemplate() + { + Memory32Fixed(ReadOnly, 0xfed00000, 0x400) + }) + } + + Device(PIC) /* 8259 Interrupt Controller */ + { + Name(_HID,EISAID("PNP0000")) + Name(_CRS, ResourceTemplate() + { + IO (Decode16, 0x20, 0x20, 0x01, 0x02) + IO (Decode16, 0x24, 0x24, 0x01, 0x02) + IO (Decode16, 0x28, 0x28, 0x01, 0x02) + IO (Decode16, 0x2c, 0x2c, 0x01, 0x02) + IO (Decode16, 0x30, 0x30, 0x01, 0x02) + IO (Decode16, 0x34, 0x34, 0x01, 0x02) + IO (Decode16, 0x38, 0x38, 0x01, 0x02) + IO (Decode16, 0x3c, 0x3c, 0x01, 0x02) + IO (Decode16, 0xa0, 0xa0, 0x01, 0x02) + IO (Decode16, 0xa4, 0xa4, 0x01, 0x02) + IO (Decode16, 0xa8, 0xa8, 0x01, 0x02) + IO (Decode16, 0xac, 0xac, 0x01, 0x02) + IO (Decode16, 0xb0, 0xb0, 0x01, 0x02) + IO (Decode16, 0xb4, 0xb4, 0x01, 0x02) + IO (Decode16, 0xb8, 0xb8, 0x01, 0x02) + IO (Decode16, 0xbc, 0xbc, 0x01, 0x02) + IO (Decode16, 0x4d0, 0x4d0, 0x01, 0x02) + IRQNoFlags () { 2 } + }) + } + + Device(LDRC) /* LPC device: Resource consumption */ + { + Name (_HID, EISAID("PNP0C02")) + Name (_UID, 2) + + Name (RBUF, ResourceTemplate() + { + IO (Decode16, 0x61, 0x61, 0x1, 0x01) /* NMI Status */ + IO (Decode16, 0x63, 0x63, 0x1, 0x01) /* CPU Reserved */ + IO (Decode16, 0x65, 0x65, 0x1, 0x01) /* CPU Reserved */ + IO (Decode16, 0x67, 0x67, 0x1, 0x01) /* CPU Reserved */ + IO (Decode16, 0x80, 0x80, 0x1, 0x01) /* Port 80 Post */ + IO (Decode16, 0x92, 0x92, 0x1, 0x01) /* CPU Reserved */ + IO (Decode16, 0xb2, 0xb2, 0x1, 0x02) /* SWSMI */ + }) + + Method (_CRS, 0, NotSerialized) + { + Return (RBUF) + } + } + + Device (RTC) /* Real Time Clock */ + { + Name (_HID, EISAID("PNP0B00")) + Name (_CRS, ResourceTemplate() + { + IO (Decode16, 0x70, 0x70, 1, 8) +/* + * Disable as Windows doesn't like it, and systems don't seem to use it. + * IRQNoFlags() { 8 } + */ + }) + } + + Device (TIMR) /* Intel 8254 timer */ + { + Name(_HID, EISAID("PNP0100")) + Name(_CRS, ResourceTemplate() + { + IO (Decode16, 0x40, 0x40, 0x01, 0x04) + IO (Decode16, 0x50, 0x50, 0x10, 0x04) + IRQNoFlags() {0} + }) + } + + /* Include mainboard's superio.asl file. */ + #include "acpi/superio.asl" + +#ifdef ENABLE_TPM + Device (TPM) /* Trusted Platform Module */ + { + Name(_HID, EISAID("IFX0102")) + Name(_CID, 0x310cd041) + Name(_UID, 1) + + Method(_STA, 0) + { + If (TPMP) { + Return (0xf) + } + Return (0x0) + } + + Name(_CRS, ResourceTemplate() { + IO (Decode16, 0x2e, 0x2e, 0x01, 0x02) + IO (Decode16, 0x6f0, 0x6f0, 0x01, 0x10) + Memory32Fixed (ReadWrite, 0xfed40000, 0x5000) + IRQ (Edge, Activehigh, Exclusive) { 6 } + }) + } +#endif +} diff --git a/src/soc/intel/braswell/acpi/lpe.asl b/src/soc/intel/braswell/acpi/lpe.asl new file mode 100644 index 0000000..1c6c50a --- /dev/null +++ b/src/soc/intel/braswell/acpi/lpe.asl @@ -0,0 +1,119 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Device (LPEA) +{ + Name (_HID, "808622A8") + Name (_CID, "808622A8") + Name (_UID, 1) + Name (_DDN, "Intel(R) Low Power Audio Controller - 808622A8") + Name (_PR0, Package () { PLPE }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x00200000, BAR0) + Memory32Fixed (ReadWrite, 0, 0x00001000, BAR1) + Memory32Fixed (ReadWrite, 0, 0x00100000, BAR2) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_DMA0_IRQ + } + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_DMA1_IRQ + } + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_SSP0_IRQ + } + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_SSP1_IRQ + } + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_SSP2_IRQ + } + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPE_IPC2HOST_IRQ + } + }) + + Method (_CRS) + { + /* Update BAR0 from NVS */ + CreateDwordField (^RBUF, ^BAR0._BAS, BAS0) + Store (\LPB0, BAS0) + + /* Update BAR1 from NVS */ + CreateDwordField (^RBUF, ^BAR1._BAS, BAS1) + Store (\LPB1, BAS1) + + /* Update LPE FW from NVS */ + CreateDwordField (^RBUF, ^BAR2._BAS, BAS2) + Store (\LPFW, BAS2) + + /* Append any Mainboard defined GPIOs */ + If (CondRefOf (^GBUF, Local0)) { + ConcatenateResTemplate (^RBUF, ^GBUF, Local1) + Return (Local1) + } + + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\LPEN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, LPB1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + PowerResource (PLPE, 0, 0) + { + Method (_STA) + { + Return (1) + } + + Method (_OFF) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_ON) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + } +} diff --git a/src/soc/intel/braswell/acpi/lpss.asl b/src/soc/intel/braswell/acpi/lpss.asl new file mode 100644 index 0000000..3af3179 --- /dev/null +++ b/src/soc/intel/braswell/acpi/lpss.asl @@ -0,0 +1,712 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Device (SDM1) +{ + Name (_HID, "INTL9C60") + Name (_UID, 1) + Name (_DDN, "DMA Controller #1") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_DMA1_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S0B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S0EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} + +Device (SDM2) +{ + Name (_HID, "INTL9C60") + Name (_UID, 2) + Name (_DDN, "DMA Controller #2") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_DMA2_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S8B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S8EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} + +Device (I2C1) +{ + Name (_HID, "808622C1") + Name (_UID, 1) + Name (_DDN, "I2C Controller #1") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C1_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S1B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S1EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S1B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C2) +{ + Name (_HID, "808622C1") + Name (_UID, 2) + Name (_DDN, "I2C Controller #2") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C2_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S2B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S2EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S2B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C3) +{ + Name (_HID, "808622C1") + Name (_UID, 3) + Name (_DDN, "I2C Controller #3") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C3_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S3B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S3EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S3B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C4) +{ + Name (_HID, "808622C1") + Name (_UID, 4) + Name (_DDN, "I2C Controller #4") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C4_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S4B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S4EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S4B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C5) +{ + Name (_HID, "808622C1") + Name (_UID, 5) + Name (_DDN, "I2C Controller #5") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C5_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S5B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S5EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S5B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C6) +{ + Name (_HID, "808622C1") + Name (_UID, 6) + Name (_DDN, "I2C Controller #6") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C6_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S6B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S6EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S6B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (I2C7) +{ + Name (_HID, "808622C1") + Name (_UID, 7) + Name (_DDN, "I2C Controller #7") + + /* Standard Mode: HCNT, LCNT, SDA Hold Time */ + Name (SSCN, Package () { 0x200, 0x200, 0x6 }) + + /* Fast Mode: HCNT, LCNT, SDA Hold Time */ + Name (FMCN, Package () { 0x55, 0x99, 0x6 }) + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_I2C7_IRQ + } + FixedDMA (0x10, 0x0, Width32Bit, ) + FixedDMA (0x11, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S7B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S7EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S7B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (SPI1) +{ + Name (_HID, "8086228E") + Name (_UID, 1) + Name (_DDN, "SPI Controller #2") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_SPI_IRQ + } + FixedDMA (0x0, 0x0, Width32Bit, ) + FixedDMA (0x1, 0x1, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\S9B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\S9EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, S9B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (PWM1) +{ + Name (_HID, "80862288") + Name (_UID, 1) + Name (_DDN, "PWM Controller #1") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\SAB0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\SAEN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} + +Device (PWM2) +{ + Name (_HID, "80862288") + Name (_UID, 2) + Name (_DDN, "PWM Controller #2") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\SBB0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\SBEN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } +} + +Device (UAR1) +{ + Name (_HID, "8086228A") + Name (_UID, 1) + Name (_DDN, "HS-UART Controller #1") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_HSUART1_IRQ + } + FixedDMA (0x2, 0x2, Width32Bit, ) + FixedDMA (0x3, 0x3, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\SCB0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\SCEN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, SCB1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (UAR2) +{ + Name (_HID, "8086228A") + Name (_UID, 2) + Name (_DDN, "HS-UART Controller #2") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + LPSS_HSUART2_IRQ + } + FixedDMA (0x4, 0x4, Width32Bit, ) + FixedDMA (0x5, 0x5, Width32Bit, ) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\SDB0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\SDEN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, SDB1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} diff --git a/src/soc/intel/braswell/acpi/platform.asl b/src/soc/intel/braswell/acpi/platform.asl new file mode 100644 index 0000000..a8b331b --- /dev/null +++ b/src/soc/intel/braswell/acpi/platform.asl @@ -0,0 +1,80 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2012 Google Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* The APM port can be used for generating software SMIs */ + +OperationRegion (APMP, SystemIO, 0xb2, 2) +Field (APMP, ByteAcc, NoLock, Preserve) +{ + APMC, 8, /* APM command */ + APMS, 8 /* APM status */ +} + +/* Port 80 POST */ + +OperationRegion (POST, SystemIO, 0x80, 1) +Field (POST, ByteAcc, Lock, Preserve) +{ + DBG0, 8 +} + +/* SMI I/O Trap */ +Method(TRAP, 1, Serialized) +{ + Store (Arg0, SMIF) /* SMI Function */ + Store (0, TRP0) /* Generate trap */ + Return (SMIF) /* Return value of SMI handler */ +} + +/* + * The _PIC method is called by the OS to choose between interrupt + * routing via the i8259 interrupt controller or the APIC. + * + * _PIC is called with a parameter of 0 for i8259 configuration and + * with a parameter of 1 for Local Apic/IOAPIC configuration. + */ + +Method(_PIC, 1) +{ + /* Remember the OS' IRQ routing choice. */ + Store(Arg0, PICM) +} + +/* + * The _PTS method (Prepare To Sleep) is called before the OS is + * entering a sleep state. The sleep state number is passed in Arg0 + */ + +Method(_PTS,1) +{ +} + +/* The _WAK method is called on system wakeup */ + +Method(_WAK,1) +{ + Return(Package(){0,0}) +} + +Method (_SWS) +{ + /* Index into PM1 for device that caused wake */ + Return (\PM1I) +} diff --git a/src/soc/intel/braswell/acpi/scc.asl b/src/soc/intel/braswell/acpi/scc.asl new file mode 100644 index 0000000..bb8234e --- /dev/null +++ b/src/soc/intel/braswell/acpi/scc.asl @@ -0,0 +1,187 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Device (EMMC) +{ + Name (_HID, "80860F14") + Name (_CID, "PNP0D40") + Name (_UID, 1) + Name (_DDN, "eMMC Controller 4.5") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + SCC_EMMC_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\C0B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\C0EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, C0B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Device (EM45) + { + /* Slot 0, Function 8 */ + Name (_ADR, 0x8) + + Method (_RMV, 0, NotSerialized) + { + Return (0) + } + } +} + +Device (SDIO) +{ + Name (_HID, "INT33BB") + Name (_CID, "PNP0D40") + Name (_UID, 2) + Name (_DDN, "SDIO Controller") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0, 0x1000, BAR0) + Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive,,,) + { + SCC_SDIO_IRQ + } + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\C1B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\C1EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, C1B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} + +Device (SDCD) +{ + Name (_HID, "INT33BB") + Name (_CID, "PNP0D40") + Name (_UID, 3) + Name (_DDN, "SD Card Controller") + + Name (RBUF, ResourceTemplate() + { + Memory32Fixed (ReadWrite, 0x00000000, 0x00001000, BAR0) + Interrupt(ResourceConsumer, Level, ActiveLow, Exclusive, , , ) + {SCC_SD_IRQ} /* SD Card IRQ */ + GpioInt(Edge, ActiveBoth, SharedAndWake, PullNone, 10000, "\_SB.GPSE", 0, ResourceConsumer, , ) + {SDCARD_CD} /* SE81 */ + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^BAR0._BAS, RBAS) + Store (\C2B0, RBAS) + Return (^RBUF) + } + + Method (_STA) + { + If (LEqual (\C2EN, 1)) { + Return (0xF) + } Else { + Return (0x0) + } + } + + OperationRegion (KEYS, SystemMemory, C2B1, 0x100) + Field (KEYS, DWordAcc, NoLock, WriteAsZeros) + { + Offset (0x84), + PSAT, 32, + } + + Method (_PS3) + { + Or (PSAT, 0x00000003, PSAT) + Or (PSAT, 0x00000000, PSAT) + } + + Method (_PS0) + { + And (PSAT, 0xfffffffc, PSAT) + Or (PSAT, 0x00000000, PSAT) + } +} diff --git a/src/soc/intel/braswell/acpi/sleepstates.asl b/src/soc/intel/braswell/acpi/sleepstates.asl new file mode 100644 index 0000000..7dd2d51 --- /dev/null +++ b/src/soc/intel/braswell/acpi/sleepstates.asl @@ -0,0 +1,26 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2007-2009 coresystems GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Name(_S0, Package(){0x0,0x0,0x0,0x0}) +Name(_S3, Package(){0x5,0x5,0x0,0x0}) +Name(_S4, Package(){0x6,0x6,0x0,0x0}) +Name(_S5, Package(){0x7,0x7,0x0,0x0}) + diff --git a/src/soc/intel/braswell/acpi/southcluster.asl b/src/soc/intel/braswell/acpi/southcluster.asl new file mode 100644 index 0000000..fba8c64 --- /dev/null +++ b/src/soc/intel/braswell/acpi/southcluster.asl @@ -0,0 +1,270 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <soc/iomap.h> +#include <soc/irq.h> + +Scope() +{ + /* IO-Trap at 0x800. This is the ACPI->SMI communication interface. */ + + OperationRegion(IO_T, SystemIO, 0x800, 0x10) + Field(IO_T, ByteAcc, NoLock, Preserve) + { + Offset(0x8), + TRP0, 8 /* IO-Trap at 0x808 */ + } + + /* Intel Legacy Block */ + OperationRegion(ILBS, SystemMemory, ILB_BASE_ADDRESS, ILB_BASE_SIZE) + Field (ILBS, AnyAcc, NoLock, Preserve) + { + Offset (0x8), + PRTA, 8, + PRTB, 8, + PRTC, 8, + PRTD, 8, + PRTE, 8, + PRTF, 8, + PRTG, 8, + PRTH, 8, + } +} + +Name(_HID,EISAID("PNP0A08")) /* PCIe */ +Name(_CID,EISAID("PNP0A03")) /* PCI */ + +Name(_ADR, 0) +Name(_BBN, 0) + +Method (_CRS, 0, Serialized) +{ + Name (MCRS, ResourceTemplate() + { + /* Bus Numbers */ + WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, + 0x0000, 0x0000, 0x00ff, 0x0000, 0x0100,,, PB00) + + /* IO Region 0 */ + DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, 0x0000, 0x0cf7, 0x0000, 0x0cf8,,, PI00) + + /* PCI Config Space */ + Io (Decode16, 0x0cf8, 0x0cf8, 0x0001, 0x0008) + + /* IO Region 1 */ + DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, + 0x0000, 0x0d00, 0xffff, 0x0000, 0xf300,,, PI01) + + /* VGA memory (0xa0000-0xbffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000a0000, 0x000bffff, 0x00000000, + 0x00020000,,, ASEG) + + /* OPROM reserved (0xc0000-0xc3fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000c0000, 0x000c3fff, 0x00000000, + 0x00004000,,, OPR0) + + /* OPROM reserved (0xc4000-0xc7fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000c4000, 0x000c7fff, 0x00000000, + 0x00004000,,, OPR1) + + /* OPROM reserved (0xc8000-0xcbfff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000c8000, 0x000cbfff, 0x00000000, + 0x00004000,,, OPR2) + + /* OPROM reserved (0xcc000-0xcffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000cc000, 0x000cffff, 0x00000000, + 0x00004000,,, OPR3) + + /* OPROM reserved (0xd0000-0xd3fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000d0000, 0x000d3fff, 0x00000000, + 0x00004000,,, OPR4) + + /* OPROM reserved (0xd4000-0xd7fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000d4000, 0x000d7fff, 0x00000000, + 0x00004000,,, OPR5) + + /* OPROM reserved (0xd8000-0xdbfff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000d8000, 0x000dbfff, 0x00000000, + 0x00004000,,, OPR6) + + /* OPROM reserved (0xdc000-0xdffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000dc000, 0x000dffff, 0x00000000, + 0x00004000,,, OPR7) + + /* BIOS Extension (0xe0000-0xe3fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000e0000, 0x000e3fff, 0x00000000, + 0x00004000,,, ESG0) + + /* BIOS Extension (0xe4000-0xe7fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000e4000, 0x000e7fff, 0x00000000, + 0x00004000,,, ESG1) + + /* BIOS Extension (0xe8000-0xebfff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000e8000, 0x000ebfff, 0x00000000, + 0x00004000,,, ESG2) + + /* BIOS Extension (0xec000-0xeffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000ec000, 0x000effff, 0x00000000, + 0x00004000,,, ESG3) + + /* System BIOS (0xf0000-0xfffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0x000f0000, 0x000fffff, 0x00000000, + 0x00010000,,, FSEG) + + /* PCI Memory Region (Top of memory-0xfeafffff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0xfea00000, 0xfeafffff, 0x00000000, + 0x00100000,,, PMEM) + + /* TPM Area (0xfed40000-0xfed44fff) */ + DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, + Cacheable, ReadWrite, + 0x00000000, 0xfed40000, 0xfed44fff, 0x00000000, + 0x00005000,,, TPMR) + }) + + /* Update PCI resource area */ + CreateDwordField(MCRS, PMEM._MIN, PMIN) + CreateDwordField(MCRS, PMEM._MAX, PMAX) + CreateDwordField(MCRS, PMEM._LEN, PLEN) + + /* TOLM is BMBOUND accessible from IOSF so is saved in NVS */ + Store (\TOLM, PMIN) + Add (Subtract (PMAX, PMIN), 1, PLEN) + + Return (MCRS) +} + +/* Device Resource Consumption */ +Device (PDRC) +{ + Name (_HID, EISAID("PNP0C02")) + Name (_UID, 1) + + Name (PDRS, ResourceTemplate() { + Memory32Fixed(ReadWrite, ABORT_BASE_ADDRESS, ABORT_BASE_SIZE) + Memory32Fixed(ReadWrite, MCFG_BASE_ADDRESS, MCFG_BASE_SIZE) + Memory32Fixed(ReadWrite, PMC_BASE_ADDRESS, PMC_BASE_SIZE) + Memory32Fixed(ReadWrite, ILB_BASE_ADDRESS, ILB_BASE_SIZE) + Memory32Fixed(ReadWrite, SPI_BASE_ADDRESS, SPI_BASE_SIZE) + Memory32Fixed(ReadWrite, MPHY_BASE_ADDRESS, MPHY_BASE_SIZE) + Memory32Fixed(ReadWrite, PUNIT_BASE_ADDRESS, PUNIT_BASE_SIZE) + Memory32Fixed(ReadWrite, RCBA_BASE_ADDRESS, RCBA_BASE_SIZE) + }) + + /* Current Resource Settings */ + Method (_CRS, 0, Serialized) + { + Return(PDRS) + } +} + +Method (_OSC, 4) +{ + /* Check for proper GUID */ + If (LEqual (Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) + { + /* Let OS control everything */ + Return (Arg3) + } + Else + { + /* Unrecognized UUID */ + CreateDWordField (Arg3, 0, CDW1) + Or (CDW1, 4, CDW1) + Return (Arg3) + } +} + +/* IOSF MBI Interface for kernel access */ +Device (IOSF) +{ + Name (_HID, "INT33BD") + Name (_CID, "INT33BD") + Name (_UID, 1) + + Name (RBUF, ResourceTemplate () + { + /* MCR / MDR / MCRX */ + Memory32Fixed (ReadWrite, 0, 12, RBAR) + }) + + Method (_CRS) + { + CreateDwordField (^RBUF, ^RBAR._BAS, RBAS) + Store (Add (MCFG_BASE_ADDRESS, 0xD0), RBAS) + Return (^RBUF) + } +} + +/* LPC Bridge 0:1f.0 */ +#include "lpc.asl" + +/* USB XHCI 0:14.0 */ +#include "xhci.asl" + +/* IRQ routing for each PCI device */ +#include "irqroute.asl" + +Scope (_SB) +{ + /* GPIO Devices */ + #include "gpio.asl" + + /* LPSS Devices */ + #include "lpss.asl" + + /* SCC Devices */ + #include "scc.asl" + + /* LPE Device */ + #include "lpe.asl" +} diff --git a/src/soc/intel/braswell/acpi/xhci.asl b/src/soc/intel/braswell/acpi/xhci.asl new file mode 100644 index 0000000..4d5367a --- /dev/null +++ b/src/soc/intel/braswell/acpi/xhci.asl @@ -0,0 +1,36 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +Device (XHCI) +{ + Name (_ADR, 0x00140000) + Name (_PRW, Package () { 0x0d, 3 }) + Name (_S3D, 3) /* Highest D state in S3 state */ + + Device (RHUB) + { + Name (_ADR, 0x00000000) + Device (PRT1) { Name (_ADR, 1) } + Device (PRT2) { Name (_ADR, 2) } + Device (PRT3) { Name (_ADR, 3) } + Device (PRT4) { Name (_ADR, 4) } + } +} diff --git a/src/soc/intel/braswell/bootblock/Makefile.inc b/src/soc/intel/braswell/bootblock/Makefile.inc new file mode 100644 index 0000000..17d1ee8 --- /dev/null +++ b/src/soc/intel/braswell/bootblock/Makefile.inc @@ -0,0 +1 @@ +chipset_bootblock_inc += $(src)/soc/intel/braswell/bootblock/timestamp.inc diff --git a/src/soc/intel/braswell/bootblock/bootblock.c b/src/soc/intel/braswell/bootblock/bootblock.c new file mode 100644 index 0000000..9a6004d --- /dev/null +++ b/src/soc/intel/braswell/bootblock/bootblock.c @@ -0,0 +1,82 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <cpu/x86/cache.h> +#include <cpu/x86/msr.h> +#include <cpu/x86/mtrr.h> +#include <soc/iosf.h> +#include <cpu/intel/microcode/microcode.c> + +static void set_var_mtrr(int reg, uint32_t base, uint32_t size, int type) +{ + msr_t basem, maskm; + basem.lo = base | type; + basem.hi = 0; + wrmsr(MTRRphysBase_MSR(reg), basem); + maskm.lo = ~(size - 1) | MTRRphysMaskValid; + maskm.hi = (1 << (CONFIG_CPU_ADDR_BITS - 32)) - 1; + wrmsr(MTRRphysMask_MSR(reg), maskm); +} + +static void enable_rom_caching(void) +{ + msr_t msr; + + disable_cache(); + /* Why only top 4MiB ? */ + set_var_mtrr(1, 0xffc00000, 4*1024*1024, MTRR_TYPE_WRPROT); + enable_cache(); + + /* Enable Variable MTRRs */ + msr.hi = 0x00000000; + msr.lo = 0x00000800; + wrmsr(MTRRdefType_MSR, msr); +} + +static void setup_mmconfig(void) +{ + uint32_t reg; + + /* + * Set up the MMCONF range. The register lives in the BUNIT. The + * IO variant of the config access needs to be used initially to + * properly configure as the IOSF access registers live in PCI + * config space. + */ + reg = 0; + /* Clear the extended register. */ + pci_io_write_config32(IOSF_PCI_DEV, MCRX_REG, reg); + reg = CONFIG_MMCONF_BASE_ADDRESS | 1; + pci_io_write_config32(IOSF_PCI_DEV, MDR_REG, reg); + reg = IOSF_OPCODE(IOSF_OP_WRITE_BUNIT) | IOSF_PORT(IOSF_PORT_BUNIT) | + IOSF_REG(BUNIT_MMCONF_REG) | IOSF_BYTE_EN; + pci_io_write_config32(IOSF_PCI_DEV, MCR_REG, reg); +} + +static void bootblock_cpu_init(void) +{ + /* Allow memory-mapped PCI config access. */ + setup_mmconfig(); + + /* Load microcode before any caching. */ + intel_update_microcode_from_cbfs(); + enable_rom_caching(); +} diff --git a/src/soc/intel/braswell/bootblock/timestamp.inc b/src/soc/intel/braswell/bootblock/timestamp.inc new file mode 100644 index 0000000..e504132 --- /dev/null +++ b/src/soc/intel/braswell/bootblock/timestamp.inc @@ -0,0 +1,21 @@ +/* + * Store the initial timestamp for booting in mmx registers. This works + * because the bootblock isn't being compiled with MMX support so mm0 and + * mm1 will be preserved into romstage. + */ + .code32 + +.global stash_timestamp +stash_timestamp: + + /* Save the BIST value */ + movl %eax, %ebp + + finit + rdtsc + movd %eax, %mm0 + movd %edx, %mm1 + + /* Restore the BIST value to %eax */ + movl %ebp, %eax + diff --git a/src/soc/intel/braswell/chip.c b/src/soc/intel/braswell/chip.c new file mode 100644 index 0000000..d363224 --- /dev/null +++ b/src/soc/intel/braswell/chip.c @@ -0,0 +1,116 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "chip.h" +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <fsp_util.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> + +static void pci_domain_set_resources(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + assign_resources(dev->link_list); +} + +static struct device_operations pci_domain_ops = { + .read_resources = pci_domain_read_resources, + .set_resources = pci_domain_set_resources, + .enable_resources = NULL, + .init = NULL, + .scan_bus = pci_domain_scan_bus, + .ops_pci_bus = pci_bus_default_ops, +}; + +static void cpu_bus_noop(device_t dev) { } + +static struct device_operations cpu_bus_ops = { + .read_resources = cpu_bus_noop, + .set_resources = cpu_bus_noop, + .enable_resources = cpu_bus_noop, + .init = braswell_init_cpus +}; + + +static void enable_dev(device_t dev) +{ + printk(BIOS_SPEW, "----------\n%s/%s ( %s ), type: %d\n", + __FILE__, __func__, + dev_name(dev), dev->path.type); + printk(BIOS_SPEW, "vendor: 0x%04x. device: 0x%04x\n", + pci_read_config16(dev, PCI_VENDOR_ID), + pci_read_config16(dev, PCI_DEVICE_ID)); + printk(BIOS_SPEW, "class: 0x%02x %s\n" + "subclass: 0x%02x %s\n" + "prog: 0x%02x\n" + "revision: 0x%02x\n", + pci_read_config16(dev, PCI_CLASS_DEVICE) >> 8, + get_pci_class_name(dev), + pci_read_config16(dev, PCI_CLASS_DEVICE) & 0xff, + get_pci_subclass_name(dev), + pci_read_config8(dev, PCI_CLASS_PROG), + pci_read_config8(dev, PCI_REVISION_ID)); + + /* Set the operations if it is a special bus type */ + if (dev->path.type == DEVICE_PATH_DOMAIN) { + dev->ops = &pci_domain_ops; + } else if (dev->path.type == DEVICE_PATH_CPU_CLUSTER) { + dev->ops = &cpu_bus_ops; + } else if (dev->path.type == DEVICE_PATH_PCI) { + /* Handle south cluster enablement. */ + if (PCI_SLOT(dev->path.pci.devfn) > GFX_DEV && + (dev->ops == NULL || dev->ops->enable == NULL)) { + southcluster_enable_dev(dev); + } + } +} + +/* Called at BS_DEV_INIT_CHIPS time -- very early. Just after BS_PRE_DEVICE. */ +static void soc_init(void *chip_info) +{ + printk(BIOS_SPEW, "%s/%s\n", __FILE__, __func__); + braswell_init_pre_device(chip_info); +} + +struct chip_operations soc_intel_braswell_ops = { + CHIP_NAME("Intel Braswell SoC") + .enable_dev = enable_dev, + .init = soc_init, +}; + +static void pci_set_subsystem(device_t dev, unsigned vendor, unsigned device) +{ + printk(BIOS_SPEW, "%s/%s ( %s, 0x%04x, 0x%04x )\n", + __FILE__, __func__, dev_name(dev), vendor, device); + if (!vendor || !device) { + pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID, + pci_read_config32(dev, PCI_VENDOR_ID)); + } else { + pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID, + ((device & 0xffff) << 16) | (vendor & 0xffff)); + } +} + +struct pci_operations soc_pci_ops = { + .set_subsystem = &pci_set_subsystem, +}; diff --git a/src/soc/intel/braswell/chip.h b/src/soc/intel/braswell/chip.h new file mode 100644 index 0000000..4356451 --- /dev/null +++ b/src/soc/intel/braswell/chip.h @@ -0,0 +1,114 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * The devicetree parser expects chip.h to reside directly in the path + * specified by the devicetree. + */ + +#ifndef _BRASWELL_CHIP_H_ +#define _BRASWELL_CHIP_H_ + +#include <stdint.h> + +struct soc_intel_braswell_config { + uint8_t enable_xdp_tap; + uint8_t sata_port_map; + uint8_t sata_ahci; + uint8_t ide_legacy_combined; + uint8_t clkreq_enable; + + /* + * Enable SATA features + * Bits 15-12: Reserved + * Bits 11-10: OROM UI Normal Delay in seconds: 00=2, 01=4, 10=6, 11=8 + * Bit 9: Smart Response Technology + * Bit 8: RRT only on eSATA + * Bit 7: LED Locate + * Bit 6: HDD unlock + * Bit 5: Option ROM UI and banner + * Bit 4: Rapid Recovery Technology (RRT) + * Bit 3: RAID 5 + * Bit 2: RAID 10 + * Bit 1: RAID 1 + * Bit 0: RAID 0 + */ + uint32_t sata_software_feature_mask; + + /* VR low power settings -- enable PS2 mode for gfx and core */ + int vnn_ps2_enable; + int vcc_ps2_enable; + + /* Disable SLP_X stretching after SUS power well loss. */ + int disable_slp_x_stretch_sus_fail; + + /* USB Port Disable mask */ + uint16_t usb2_port_disable_mask; + uint16_t usb3_port_disable_mask; + + /* USB routing */ + int usb_route_to_xhci; + + /* USB PHY settings specific to the board */ + uint32_t usb2_per_port_lane0; + uint32_t usb2_per_port_rcomp_hs_pullup0; + uint32_t usb2_per_port_lane1; + uint32_t usb2_per_port_rcomp_hs_pullup1; + uint32_t usb2_per_port_lane2; + uint32_t usb2_per_port_rcomp_hs_pullup2; + uint32_t usb2_per_port_lane3; + uint32_t usb2_per_port_rcomp_hs_pullup3; + + /* LPE Audio Clock configuration. */ + int lpe_codec_clk_freq; /* 19 or 25 are valid. */ + int lpe_codec_clk_num; /* Platform clock pins. [0:5] are valid. */ + + /* Native SD Card controller - override controller capabilities. */ + uint32_t sdcard_cap_low; + uint32_t sdcard_cap_high; + + /* Enable devices in ACPI mode */ + int lpss_acpi_mode; + int emmc_acpi_mode; + int sd_acpi_mode; + int lpe_acpi_mode; + + /* Allow PCIe devices to wake system from suspend. */ + int pcie_wake_enable; + + int gpu_pipea_port_select; /* Port select: 1=DP_B 2=DP_C */ + uint16_t gpu_pipea_power_on_delay; + uint16_t gpu_pipea_light_on_delay; + uint16_t gpu_pipea_power_off_delay; + uint16_t gpu_pipea_light_off_delay; + uint16_t gpu_pipea_power_cycle_delay; + int gpu_pipea_pwm_freq_hz; + + int gpu_pipeb_port_select; /* Port select: 1=DP_B 2=DP_C */ + uint16_t gpu_pipeb_power_on_delay; + uint16_t gpu_pipeb_light_on_delay; + uint16_t gpu_pipeb_power_off_delay; + uint16_t gpu_pipeb_light_off_delay; + uint16_t gpu_pipeb_power_cycle_delay; + int gpu_pipeb_pwm_freq_hz; +}; + +extern struct chip_operations soc_intel_braswell_ops; +#endif /* _BRASWELL_CHIP_H_ */ diff --git a/src/soc/intel/braswell/cpu.c b/src/soc/intel/braswell/cpu.c new file mode 100644 index 0000000..bee7c8c --- /dev/null +++ b/src/soc/intel/braswell/cpu.c @@ -0,0 +1,276 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <console/console.h> +#include <cpu/cpu.h> +#include <cpu/intel/microcode.h> +#include <cpu/x86/cache.h> +#include <cpu/x86/lapic.h> +#include <cpu/x86/mp.h> +#include <cpu/x86/msr.h> +#include <cpu/x86/mtrr.h> +#include <cpu/x86/smm.h> +#include <soc/intel/common/memmap.h> +#include <soc/msr.h> +#include <soc/pattrs.h> +#include <soc/ramstage.h> +#include <soc/smm.h> +#include <stdlib.h> + +static void smm_relocate(void *unused); +static void enable_smis(void *unused); +static void pre_smm_relocation(void *unused); + +static struct mp_flight_record mp_steps[] = { + MP_FR_BLOCK_APS(pre_smm_relocation, NULL, pre_smm_relocation, NULL), + MP_FR_BLOCK_APS(smm_relocate, NULL, smm_relocate, NULL), + MP_FR_BLOCK_APS(mp_initialize_cpu, NULL, mp_initialize_cpu, NULL), + /* Wait for APs to finish initialization before proceeding. */ + MP_FR_BLOCK_APS(NULL, NULL, enable_smis, NULL), +}; + +/* The APIC id space is sparse. Each id is separated by 2. */ +static int adjust_apic_id(int index, int apic_id) +{ + return 2 * index; +} + + +void braswell_init_cpus(device_t dev) +{ + struct bus *cpu_bus = dev->link_list; + const struct pattrs *pattrs = pattrs_get(); + struct mp_params mp_params; + void *default_smm_area; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Set up MTRRs based on physical address size. */ + x86_setup_fixed_mtrrs(); + x86_setup_var_mtrrs(pattrs->address_bits, 2); + x86_mtrr_check(); + + mp_params.num_cpus = pattrs->num_cpus, + mp_params.parallel_microcode_load = 1, + mp_params.adjust_apic_id = adjust_apic_id; + mp_params.flight_plan = &mp_steps[0]; + mp_params.num_records = ARRAY_SIZE(mp_steps); + mp_params.microcode_pointer = pattrs->microcode_patch; + + default_smm_area = backup_default_smm_area(); + + if (mp_init(cpu_bus, &mp_params)) + printk(BIOS_ERR, "MP initialization failure.\n"); + + restore_default_smm_area(default_smm_area); +} + + +static struct device_operations cpu_dev_ops = { + .init = NULL, +}; + +static struct cpu_device_id cpu_table[] = { + { X86_VENDOR_INTEL, 0x406C3 }, + { X86_VENDOR_INTEL, 0x406C2 }, + { 0, 0 }, +}; + +static const struct cpu_driver driver __cpu_driver = { + .ops = &cpu_dev_ops, + .id_table = cpu_table, +}; + + +/* + * SMM loading and initialization. + */ + +struct smm_relocation_attrs { + uint32_t smbase; + uint32_t smrr_base; + uint32_t smrr_mask; +}; + +static struct smm_relocation_attrs relo_attrs; + +static void adjust_apic_id_map(struct smm_loader_params *smm_params) +{ + int i; + struct smm_runtime *runtime = smm_params->runtime; + + for (i = 0; i < CONFIG_MAX_CPUS; i++) + runtime->apic_id_to_cpu[i] = mp_get_apic_id(i); +} + +static void asmlinkage cpu_smm_do_relocation(void *arg) +{ + msr_t smrr; + em64t100_smm_state_save_area_t *smm_state; + const struct smm_module_params *p; + const struct smm_runtime *runtime; + int cpu; + + p = arg; + runtime = p->runtime; + cpu = p->cpu; + + if (cpu >= CONFIG_MAX_CPUS) { + printk(BIOS_CRIT, + "Invalid CPU number assigned in SMM stub: %d\n", cpu); + return; + } + + /* Set up SMRR. */ + smrr.lo = relo_attrs.smrr_base; + smrr.hi = 0; + wrmsr(SMRRphysBase_MSR, smrr); + smrr.lo = relo_attrs.smrr_mask; + smrr.hi = 0; + wrmsr(SMRRphysMask_MSR, smrr); + + /* + * The relocated handler runs with all CPUs concurrently. Therefore + * stagger the entry points adjusting SMBASE downwards by save state + * size * CPU num. + */ + smm_state = (void *)(SMM_EM64T100_SAVE_STATE_OFFSET + runtime->smbase); + smm_state->smbase = relo_attrs.smbase - cpu * runtime->save_state_size; + printk(BIOS_DEBUG, "New SMBASE 0x%08x\n", smm_state->smbase); +} + +static int install_relocation_handler(int num_cpus) +{ + const int save_state_size = sizeof(em64t100_smm_state_save_area_t); + + struct smm_loader_params smm_params = { + .per_cpu_stack_size = save_state_size, + .num_concurrent_stacks = num_cpus, + .per_cpu_save_state_size = save_state_size, + .num_concurrent_save_states = 1, + .handler = (smm_handler_t)&cpu_smm_do_relocation, + }; + + if (smm_setup_relocation_handler(&smm_params)) + return -1; + + adjust_apic_id_map(&smm_params); + + return 0; +} + +static int install_permanent_handler(int num_cpus) +{ + /* + * There are num_cpus concurrent stacks and num_cpus concurrent save + * state areas. Lastly, set the stack size to the save state size. + */ + int save_state_size = sizeof(em64t100_smm_state_save_area_t); + struct smm_loader_params smm_params = { + .per_cpu_stack_size = save_state_size, + .num_concurrent_stacks = num_cpus, + .per_cpu_save_state_size = save_state_size, + .num_concurrent_save_states = num_cpus, + }; + void *smm_base; + size_t smm_size; + int tseg_size; + + printk(BIOS_DEBUG, "Installing SMM handler to 0x%08x\n", + relo_attrs.smbase); + + smm_region(&smm_base, &smm_size); + tseg_size = smm_size - CONFIG_SMM_RESERVED_SIZE; + if (smm_load_module((void *)relo_attrs.smbase, tseg_size, &smm_params)) + return -1; + + adjust_apic_id_map(&smm_params); + + return 0; +} + +static int smm_load_handlers(void) +{ + /* All range registers are aligned to 4KiB */ + const uint32_t rmask = ~((1 << 12) - 1); + const struct pattrs *pattrs = pattrs_get(); + void *smm_base; + size_t smm_size; + + /* Initialize global tracking state. */ + smm_region(&smm_base, &smm_size); + relo_attrs.smbase = (uint32_t)smm_base; + relo_attrs.smrr_base = relo_attrs.smbase | MTRR_TYPE_WRBACK; + relo_attrs.smrr_mask = ~(smm_size - 1) & rmask; + relo_attrs.smrr_mask |= MTRRphysMaskValid; + + /* Install handlers. */ + if (install_relocation_handler(pattrs->num_cpus) < 0) { + printk(BIOS_ERR, "Unable to install SMM relocation handler.\n"); + return -1; + } + + if (install_permanent_handler(pattrs->num_cpus) < 0) { + printk(BIOS_ERR, "Unable to install SMM permanent handler.\n"); + return -1; + } + + /* Ensure the SMM handlers hit DRAM before performing first SMI. */ + wbinvd(); + + return 0; +} + +static void pre_smm_relocation(void *unused) +{ + const struct pattrs *pattrs = pattrs_get(); + msr_t msr_value; + + /* Need to make sure that all cores have microcode loaded. */ + msr_value = rdmsr(MSR_IA32_BIOS_SIGN_ID); + if (msr_value.hi == 0) + intel_microcode_load_unlocked(pattrs->microcode_patch); +} + +static void smm_relocate(void *unused) +{ + const struct pattrs *pattrs = pattrs_get(); + + /* Load relocation and permanent handler. */ + if (boot_cpu()) { + if (smm_load_handlers() < 0) { + printk(BIOS_ERR, "Error loading SMM handlers.\n"); + return; + } + southcluster_smm_clear_state(); + } + + /* Relocate SMM space. */ + smm_initiate_relocation(); + + /* Load microcode after SMM relocation. */ + intel_microcode_load_unlocked(pattrs->microcode_patch); +} + +static void enable_smis(void *unused) +{ + southcluster_smm_enable_smi(); +} diff --git a/src/soc/intel/braswell/elog.c b/src/soc/intel/braswell/elog.c new file mode 100644 index 0000000..892d209 --- /dev/null +++ b/src/soc/intel/braswell/elog.c @@ -0,0 +1,111 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <arch/acpi.h> +#include <cbmem.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> +#include <elog.h> +#include <soc/iomap.h> +#include <soc/pm.h> +#include <stdint.h> + +static void log_power_and_resets(const struct chipset_power_state *ps) +{ + if (ps->gen_pmcon1 & PWR_FLR) { + elog_add_event(ELOG_TYPE_POWER_FAIL); + elog_add_event(ELOG_TYPE_PWROK_FAIL); + } + + if (ps->gen_pmcon1 & SUS_PWR_FLR) + elog_add_event(ELOG_TYPE_SUS_POWER_FAIL); + + if (ps->gen_pmcon1 & RPS) + elog_add_event(ELOG_TYPE_RTC_RESET); + + if (ps->tco_sts & SECOND_TO_STS) + elog_add_event(ELOG_TYPE_TCO_RESET); + + if (ps->pm1_sts & PRBTNOR_STS) + elog_add_event(ELOG_TYPE_POWER_BUTTON_OVERRIDE); + + if (ps->gen_pmcon1 & SRS) + elog_add_event(ELOG_TYPE_RESET_BUTTON); + + if (ps->gen_pmcon1 & GEN_RST_STS) + elog_add_event(ELOG_TYPE_SYSTEM_RESET); +} + +static void log_wake_events(const struct chipset_power_state *ps) +{ + const uint32_t pcie_wake_mask = PCI_EXP_STS | PCIE_WAKE3_STS | + PCIE_WAKE2_STS | PCIE_WAKE1_STS | + PCIE_WAKE0_STS; + uint32_t gpe0_sts; + uint32_t gpio_mask; + int i; + + /* Mask off disabled events. */ + gpe0_sts = ps->gpe0_sts & ps->gpe0_en; + + if (ps->pm1_sts & WAK_STS) + elog_add_event_byte(ELOG_TYPE_ACPI_WAKE, + acpi_slp_type == 3 ? 3 : 5); + + if (ps->pm1_sts & PWRBTN_STS) + elog_add_event_wake(ELOG_WAKE_SOURCE_PWRBTN, 0); + + if (ps->pm1_sts & RTC_STS) + elog_add_event_wake(ELOG_WAKE_SOURCE_RTC, 0); + + if (gpe0_sts & PME_B0_EN) + elog_add_event_wake(ELOG_WAKE_SOURCE_PME_INTERNAL, 0); + + if (gpe0_sts & pcie_wake_mask) + elog_add_event_wake(ELOG_WAKE_SOURCE_PCIE, 0); + + gpio_mask = SUS_GPIO_STS0; + i = 0; + while (gpio_mask) { + if (gpio_mask & gpe0_sts) + elog_add_event_wake(ELOG_WAKE_SOURCE_GPIO, i); + gpio_mask <<= 1; + i++; + } +} + +void southcluster_log_state(void) +{ + struct chipset_power_state *ps = cbmem_find(CBMEM_ID_POWER_STATE); + + if (ps == NULL) { + printk(BIOS_DEBUG, + "Not logging power state information. Power state not found in cbmem.\n"); + return; + } + + log_power_and_resets(ps); + log_wake_events(ps); +} diff --git a/src/soc/intel/braswell/emmc.c b/src/soc/intel/braswell/emmc.c new file mode 100644 index 0000000..016f82a --- /dev/null +++ b/src/soc/intel/braswell/emmc.c @@ -0,0 +1,66 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdint.h> +#include <arch/io.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> + +#include <soc/iosf.h> +#include <soc/nvs.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> +#include "chip.h" + +static const struct reg_script emmc_ops[] = { + REG_SCRIPT_END, +}; + +static void emmc_init(device_t dev) +{ + struct soc_intel_braswell_config *config = dev->chip_info; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + printk(BIOS_DEBUG, "eMMC init\n"); + reg_script_run_on_dev(dev, emmc_ops); + + if (config->emmc_acpi_mode) { + printk(BIOS_DEBUG, "Enabling ACPI mode\n"); + scc_enable_acpi_mode(dev, SCC_MMC_CTL, SCC_NVS_MMC); + } +} + +static struct device_operations emmc_device_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = emmc_init, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &emmc_device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = MMC_DEVID, +}; diff --git a/src/soc/intel/braswell/gfx.c b/src/soc/intel/braswell/gfx.c new file mode 100644 index 0000000..95462fd --- /dev/null +++ b/src/soc/intel/braswell/gfx.c @@ -0,0 +1,114 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "chip.h" +#include <arch/io.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> +#include <soc/gfx.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> + +static const struct reg_script gpu_pre_vbios_script[] = { + /* Make sure GFX is bus master with MMIO access */ + REG_PCI_OR32(PCI_COMMAND, PCI_COMMAND_MASTER|PCI_COMMAND_MEMORY), + REG_SCRIPT_END +}; + +static const struct reg_script gfx_post_vbios_script[] = { + /* Set Lock bits */ + REG_PCI_RMW32(GGC, 0xffffffff, GGC_GGCLCK), + REG_PCI_RMW32(GSM_BASE, 0xffffffff, GSM_BDSM_LOCK), + REG_PCI_RMW32(GTT_BASE, 0xffffffff, GTT_BGSM_LOCK), + REG_SCRIPT_END +}; + +static inline void gfx_run_script(device_t dev, const struct reg_script *ops) +{ + reg_script_run_on_dev(dev, ops); +} + +static void gfx_pre_vbios_init(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + printk(BIOS_INFO, "GFX: Pre VBIOS Init\n"); + gfx_run_script(dev, gpu_pre_vbios_script); +} + +static void gfx_post_vbios_init(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + printk(BIOS_INFO, "GFX: Post VBIOS Init\n"); + gfx_run_script(dev, gfx_post_vbios_script); +} + +static void gfx_init(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Pre VBIOS Init */ + gfx_pre_vbios_init(dev); + + /* Run VBIOS */ + pci_dev_init(dev); + + /* Post VBIOS Init */ + gfx_post_vbios_init(dev); +} + +static void gfx_read_resources(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + pci_dev_read_resources(dev); + +#if IS_ENABLED(CONFIG_MARK_GRAPHICS_MEM_WRCOMB) + struct resource *res; + + /* Set the graphics memory to write combining. */ + res = find_resource(dev, PCI_BASE_ADDRESS_2); + if (res == NULL) { + printk(BIOS_DEBUG, "GFX: memory resource not found.\n"); + return; + } + res->flags |= IORESOURCE_WRCOMB; +#endif +} + +static struct device_operations gfx_device_ops = { + .read_resources = gfx_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = gfx_init, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver gfx_driver __pci_driver = { + .ops = &gfx_device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = GFX_DEVID, +}; diff --git a/src/soc/intel/braswell/gpio.c b/src/soc/intel/braswell/gpio.c new file mode 100755 index 0000000..7790132 --- /dev/null +++ b/src/soc/intel/braswell/gpio.c @@ -0,0 +1,320 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include <console/console.h> +#include <device/pci.h> +#include <soc/gpio.h> +#include <soc/pm.h> +#include <soc/smm.h> + + +#define GPIO_DEBUG + +/* gpio map to pad number LUTs */ + +static const u8 gpncommunity_gpio_to_pad[GP_NORTH_COUNT] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72 }; + +static const u8 gpsecommunity_gpio_to_pad[GP_SOUTHEAST_COUNT] = { + 0, 1, 2, 3, 4, 5, 6, 7, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 30, 31, 32, 33, 34, 35, 45, 46, 47, 48, + 49, 50, 51, 52, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85 }; + + +static const u8 gpswcommunity_gpio_to_pad[GP_SOUTHWEST_COUNT] = { + 0, 1, 2, 3, 4, 5, 6, 7, 15, 16, + 17, 18, 19, 20, 21, 22, 30, 31, 32, 33, + 34, 35, 36, 37, 45, 46, 47, 48, 49, 50, + 51, 52, 60, 61, 62, 63, 64, 65, 66, 67, + 75, 76, 77, 78, 79, 80, 81, 82, 90, 91, + 92, 93, 94, 95, 96, 97 }; + +static const u8 gpecommunity_gpio_to_pad[GP_EAST_COUNT] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26 }; + +/* GPIO Community descriptions */ +static const struct gpio_bank gpnorth_community = { + .gpio_count = GP_NORTH_COUNT, + .gpio_to_pad = gpncommunity_gpio_to_pad , + .pad_base = COMMUNITY_GPNORTH_BASE , + .has_gpe_en = GPE_CAPABLE , + .has_wake_en = 1, +}; + +static const struct gpio_bank gpsoutheast_community = { + .gpio_count = GP_SOUTHEAST_COUNT, + .gpio_to_pad = gpsecommunity_gpio_to_pad, + .pad_base = COMMUNITY_GPSOUTHEAST_BASE, + .has_gpe_en = GPE_CAPABLE_NONE, + .has_wake_en = 1, +}; + +static const struct gpio_bank gpsouthwest_community = { + .gpio_count = GP_SOUTHWEST_COUNT, + .gpio_to_pad = gpswcommunity_gpio_to_pad, + .pad_base = COMMUNITY_GPSOUTHWEST_BASE, + .has_gpe_en = GPE_CAPABLE, + .has_wake_en = 1, +}; + +static const struct gpio_bank gpeast_community = { + .gpio_count = GP_EAST_COUNT, + .gpio_to_pad = gpecommunity_gpio_to_pad, + .pad_base = COMMUNITY_GPEAST_BASE, + .has_gpe_en = GPE_CAPABLE_NONE, + .has_wake_en = 1, +}; + +static void setup_gpio_route(const struct soc_gpio_map *sw_gpios, + const struct soc_gpio_map *n_gpios) +{ + const struct soc_gpio_map *n_config; + const struct soc_gpio_map *sw_config; + uint32_t route_reg = 0; + uint32_t int_selection = 0; + uint32_t alt_gpio_smi = 0; + uint32_t gpe0a_en = 0; + int gpio = 0; + int north_done = 0; + int south_done = 0; + + for (sw_config = sw_gpios, n_config = n_gpios; + (!north_done || !south_done); sw_config++, n_config++, gpio++) { + + /* when north config is done */ + if ((gpio > GP_NORTH_COUNT) || + (n_config->pad_conf0 == GPIO_LIST_END)) + north_done = 1; + + /* when sw is done */ + if ((gpio > GP_SOUTHWEST_COUNT) || + (sw_config->pad_conf0 == GPIO_LIST_END)) + south_done = 1; + + /* route north gpios */ + if (!north_done) { + /* Int select from 8 to 15 */ + int_selection = ((n_config->pad_conf0 >> 28) & 0xf); + if (n_config->gpe == SMI) { + /* + * Set the corresponding bits (01) as + * per the interrupt line + */ + route_reg |= (1 << ((int_selection - 8) * 2)); + /* reset the higher bit */ + route_reg &= + ~(1 << ((int_selection - 8) * 2 + 1)); + alt_gpio_smi |= (1 << (int_selection + 8)); + } else if (n_config->gpe == SCI) { + /* + * Set the corresponding bits as per the + * interrupt line + */ + route_reg |= + (1 << (((int_selection - 8) * 2) + 1)); + /* reset the bit */ + route_reg &= ~(1 << ((int_selection - 8) * 2)); + gpe0a_en |= (1 << (int_selection + 8)); + } + } + + /* route southwest gpios */ + if (!south_done) { + /* Int select from 8 to 15 */ + int_selection = ((sw_config->pad_conf0 >> 28) & 0xf); + if (sw_config->gpe == SMI) { + /* + * Set the corresponding bits (10) as + * per the interrupt line + */ + route_reg |= (1 << (int_selection * 2)); + route_reg &= ~(1 << (int_selection * 2 + 1)); + alt_gpio_smi |= (1 << (int_selection + 16)); + } else if (sw_config->gpe == SCI) { + /* + * Set the corresponding bits as + * per the interrupt line + */ + route_reg |= (1 << ((int_selection * 2) + 1)); + /* reset the bit */ + route_reg &= ~(1 << (int_selection * 2)); + gpe0a_en |= (1 << (int_selection + 16)); + } + } + } + + /* enable gpe bits in GPE0A_EN_REG */ + outl(gpe0a_en, ACPI_BASE_ADDRESS + GPE0A_EN_REG); + + /* enable sci bit (bit 0) in PM1_CNT */ + outl(inl(ACPI_BASE_ADDRESS + PM1_CNT) | 0x1, + ACPI_BASE_ADDRESS + PM1_CNT); + +#ifdef GPIO_DEBUG + printk(BIOS_DEBUG, "gpio_rout = %x alt_gpio_smi = %x gpe0a_en = %x\n", + route_reg, alt_gpio_smi, gpe0a_en); +#endif + /* Save as an smm param */ + southcluster_smm_save_param(SMM_SAVE_PARAM_GPIO_ROUTE, route_reg); +} + + +static void setup_gpios(const struct soc_gpio_map *gpios, + const struct gpio_bank *community) +{ + const struct soc_gpio_map *config; + int gpio = 0; + u32 reg, family, internal_pad_num; + u32 mmio_addr, int_selection; + u32 gpio_wake0 = 0; + u32 gpio_wake1 = 0; + u32 gpio_int_mask = 0; + + if (!gpios) + return; + for (config = gpios; config->pad_conf0 != GPIO_LIST_END; + config++, gpio++) { + if (gpio > community->gpio_count) + break; + + /* Pad configuration registers */ + family = community->gpio_to_pad[gpio] / MAX_FAMILY_PAD_GPIO_NO; + internal_pad_num = community->gpio_to_pad[gpio] % + MAX_FAMILY_PAD_GPIO_NO; + + /* + * Calculate the MMIO Address for specific GPIO pin + * control register pointed by index. + * REG = (IOBASE + COMMUNITY_BASE + (0X04400)) + + * (0X400*FAMILY_NUM) + (8 * PAD_NUM) + */ + mmio_addr = FAMILY_PAD_REGS_OFF + + (FAMILY_PAD_REGS_SIZE * family) + + (GPIO_REGS_SIZE * internal_pad_num); + + reg = community->pad_base + mmio_addr; + + /* get int selection value */ + int_selection = ((config->pad_conf0 >> 28) & 0xf); + + /* get int mask register value */ + gpio_int_mask |= (config->int_mask << int_selection); + + /* + * wake capable programming + * some communities have 2 wake regs + */ + if (gpio > 31) + gpio_wake1 |= config->wake_mask << (gpio % 32); + else + gpio_wake0 |= config->wake_mask << gpio; + + if (!config->skip_config) { +#ifdef GPIO_DEBUG + printk(BIOS_DEBUG, + "Write Pad: Base(%x) - conf0 = %x conf1= %x gpio #- %d pad # = %d\n", + reg, config->pad_conf0, config->pad_conf1, + community->gpio_to_pad[gpio], gpio); +#endif + /* + * write pad configurations to conf0 and conf1 register + */ + write32((void *)(reg + PAD_CONF0_REG), + config->pad_conf0); + write32((void *)(reg + PAD_CONF1_REG), + config->pad_conf1); + } + } + +#ifdef GPIO_DEBUG + printk(BIOS_DEBUG, + "gpio_wake_mask0 = %x gpio_wake_mask1 = %x gpio_int_mask = %x\n", + gpio_wake0, gpio_wake1, gpio_int_mask); +#endif + + /* Wake */ + write32((void *)(community->pad_base + GPIO_WAKE_MASK_REG0), + gpio_wake0); + + /* wake mask config for communities with 2 regs */ + if (community->gpio_count > 32) + write32((void *)(community->pad_base + GPIO_WAKE_MASK_REG1), + gpio_wake1); + + /* Interrupt */ + write32((void *)(community->pad_base + GPIO_INTERRUPT_MASK), + gpio_int_mask); + +} + + +void setup_soc_gpios(struct soc_gpio_config *config, u8 enable_xdp_tap) +{ + + if (config) { + + /* + * Write the default value 0xffffff to the SW + * write_access_policy_interrupt_reg to allow the SW interrupt + * mask register to be set + */ + write32((void *)(COMMUNITY_GPSOUTHWEST_BASE + 0x108), + 0xffffffff); + + printk(BIOS_DEBUG, "north\n"); + setup_gpios(config->north, &gpnorth_community); + + printk(BIOS_DEBUG, "southwest\n"); + setup_gpios(config->southwest, &gpsouthwest_community); + + printk(BIOS_DEBUG, "southeast\n"); + setup_gpios(config->southeast, &gpsoutheast_community); + + printk(BIOS_DEBUG, "east\n"); + setup_gpios(config->east, &gpeast_community); + + printk(BIOS_DEBUG, "Routing SW and N gpios\n"); + setup_gpio_route(config->southwest, config->north); + } + + /* + * Set on die termination feature with pull up value and + * drive the pad high for TAP_TDO and TAP_TMS + */ + if (!enable_xdp_tap) + printk(BIOS_DEBUG, "Tri-state TDO and TMS\n"); +} + +__attribute__((weak)) struct soc_gpio_config *mainboard_get_gpios(void) +{ + printk(BIOS_DEBUG, "Default/empty GPIO config\n"); + return NULL; +} diff --git a/src/soc/intel/braswell/gpio_support.c b/src/soc/intel/braswell/gpio_support.c new file mode 100644 index 0000000..a0311af --- /dev/null +++ b/src/soc/intel/braswell/gpio_support.c @@ -0,0 +1,87 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <console/console.h> +#include <soc/gpio.h> + +/* + * Return family number and internal pad number in that community by pad number + * and which community it is in. + */ +uint16_t gpio_family_number(uint8_t community, uint8_t pad) +{ + /* + * Refer to BSW BIOS Writers Guide, Table "Family Number". + * BSW has 4 GPIO communities. Each community has up to 7 families and + * each family contains a range of Pad numbers. The number in the array + * is the maximum no. of that range. + * For example: East community, family 0, Pad 0~11. + */ + static const uint8_t community_base[GPIO_COMMUNITY_COUNT] + [GPIO_FAMILIES_MAX_PER_COMM + 1] = { + {0, 8, 16, 24, 32, 40, 48, 56}, /* Southwest */ + {0, 9, 22, 34, 46, 59, 59, 59}, /* North */ + {0, 12, 24, 24, 24, 24, 24, 24}, /* East */ + {0, 8, 20, 26, 34, 44, 55, 55} /* Southeast */ + }; + const uint8_t *base; + uint8_t i; + + /* Validate the pad number */ + if (pad > community_base[community][7]) + die("Pad number is out of range!"); + + /* Locate the family number for the pad */ + base = &community_base[community][0]; + for (i = 0; i < 7; i++) { + if ((pad >= base[0]) && (pad < base[1])) + break; + base++; + } + + /* Family number in high byte and inner pad number in lowest byte */ + return (i << 8) + pad - *base; +} + +/* + * Return pad configuration register offset by pad number and which community + * it is in. + */ +uint32_t *gpio_pad_config_reg(uint8_t community, uint8_t pad) +{ + uint16_t fpad; + uint32_t *pad_config_reg; + + /* Get the GPIO family number */ + fpad = gpio_family_number(community, pad); + + /* + * Refer to BSW BIOS Writers Guide, Table "Per Pad Memory Space + * Registers Addresses" for the Pad configuration register calculation. + */ + pad_config_reg = (uint32_t *)(COMMUNITY_BASE(community) + 0x4400 + + (0x400 * (fpad >> 8)) + (8 * (fpad & 0xff))); + + return pad_config_reg; +} + +int get_gpio(int community_base, int pad0_offset) +{ + return (read32((void *)(community_base + pad0_offset))) & PAD_RX_BIT; +} diff --git a/src/soc/intel/braswell/hda.c b/src/soc/intel/braswell/hda.c new file mode 100644 index 0000000..381b3e8 --- /dev/null +++ b/src/soc/intel/braswell/hda.c @@ -0,0 +1,47 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include <arch/io.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_def.h> +#include <device/pci_ids.h> +#include <reg_script.h> + +#include <soc/hda.h> +#include <soc/iomap.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> + +static const struct device_operations device_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = NULL, + .enable = NULL, + .scan_bus = NULL, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = HDA_DEVID, +}; diff --git a/src/soc/intel/braswell/include/chipset_fsp_util.h b/src/soc/intel/braswell/include/chipset_fsp_util.h new file mode 100644 index 0000000..7a76102 --- /dev/null +++ b/src/soc/intel/braswell/include/chipset_fsp_util.h @@ -0,0 +1,42 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef CHIPSET_FSP_UTIL_H + +#define CHIPSET_FSP_UTIL_H + +/* + * Include the FSP binary interface files + * + * These files include the necessary UEFI constants and data structures + * that are used to interface to the FSP binary. + */ + +#include <uefi_types.h> /* UEFI data types */ +#include <IntelFspPkg/Include/FspApi.h> /* FSP API definitions */ +#include <IntelFspPkg/Include/FspInfoHeader.h> /* FSP binary layout */ +#include <MdePkg/Include/Pi/PiBootMode.h> /* UEFI boot mode definitions */ +#include <MdePkg/Include/Pi/PiFirmwareFile.h> /* UEFI file definitions */ +#include <MdePkg/Include/Pi/PiFirmwareVolume.h> /* UEFI file system defs */ +#include <MdePkg/Include/Uefi/UefiMultiPhase.h> /* UEFI memory types */ +#include <MdePkg/Include/Pi/PiHob.h> /* Hand off block definitions */ +#include <MdePkg/Include/Library/HobLib.h> /* HOB routine declarations */ +#include <VpdHeader.h> /* Vital/updatable product data definitions */ + +#endif /* CHIPSET_FSP_UTIL_H */ diff --git a/src/soc/intel/braswell/include/soc/acpi.h b/src/soc/intel/braswell/include/soc/acpi.h new file mode 100644 index 0000000..9590e93 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/acpi.h @@ -0,0 +1,38 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_ACPI_H_ +#define _BRASWELL_ACPI_H_ + +#include <arch/acpi.h> +#include <soc/nvs.h> + +#if CONFIG_GOP_SUPPORT +#include <soc/intel/common/gma.h> +int init_igd_opregion(igd_opregion_t *igd_opregion); +#endif + +void acpi_create_intel_hpet(acpi_hpet_t *hpet); +void acpi_fill_in_fadt(acpi_fadt_t *fadt); +unsigned long acpi_madt_irq_overrides(unsigned long current); +void acpi_init_gnvs(global_nvs_t *gnvs); + +#endif /* _BRASWELL_ACPI_H_ */ + diff --git a/src/soc/intel/braswell/include/soc/device_nvs.h b/src/soc/intel/braswell/include/soc/device_nvs.h new file mode 100644 index 0000000..e7bc17d --- /dev/null +++ b/src/soc/intel/braswell/include/soc/device_nvs.h @@ -0,0 +1,68 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_DEVICE_NVS_H_ +#define _BRASWELL_DEVICE_NVS_H_ + +#include <stdint.h> + +/* Offset in Global NVS where this structure lives */ +#define DEVICE_NVS_OFFSET 0x1000 + +#define LPSS_NVS_SIO_DMA1 0 +#define LPSS_NVS_I2C1 1 +#define LPSS_NVS_I2C2 2 +#define LPSS_NVS_I2C3 3 +#define LPSS_NVS_I2C4 4 +#define LPSS_NVS_I2C5 5 +#define LPSS_NVS_I2C6 6 +#define LPSS_NVS_I2C7 7 +#define LPSS_NVS_SIO_DMA2 8 +#define LPSS_NVS_SPI 9 +#define LPSS_NVS_PWM1 10 +#define LPSS_NVS_PWM2 11 +#define LPSS_NVS_HSUART1 12 +#define LPSS_NVS_HSUART2 13 + +#define SCC_NVS_MMC 0 +#define SCC_NVS_SDIO 1 +#define SCC_NVS_SD 2 + +typedef struct { + /* Device Enabled in ACPI Mode */ + u8 lpss_en[14]; + u8 scc_en[3]; + u8 lpe_en; + + /* BAR 0 */ + u32 lpss_bar0[14]; + u32 scc_bar0[3]; + u32 lpe_bar0; + + /* BAR 0 */ + u32 lpss_bar1[14]; + u32 scc_bar1[3]; + u32 lpe_bar1; + + /* Extra */ + u32 lpe_fw; /* LPE Firmware */ +} __attribute__((packed)) device_nvs_t; + +#endif /* _BRASWELL_DEVICE_NVS_H_ */ diff --git a/src/soc/intel/braswell/include/soc/ehci.h b/src/soc/intel/braswell/include/soc/ehci.h new file mode 100644 index 0000000..c3abe9c --- /dev/null +++ b/src/soc/intel/braswell/include/soc/ehci.h @@ -0,0 +1,28 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_EHCI_H_ +#define _BRASWELL_EHCI_H_ + +/* EHCI PCI Registers */ +#define EHCI_CMD_STS 0x04 +# define INTRDIS (1 << 10) + +#endif /* _BRASWELL_EHCI_H_ */ diff --git a/src/soc/intel/braswell/include/soc/gfx.h b/src/soc/intel/braswell/include/soc/gfx.h new file mode 100644 index 0000000..4692d23 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/gfx.h @@ -0,0 +1,98 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_GFX_H_ +#define _BRASWELL_GFX_H_ + +/* + * PCI config registers. + */ + +#define GGC 0x50 +# define GGC_VAMEN (1 << 14) /* Enable acceleration mode */ +# define GGC_GTT_SIZE_MASK (3 << 8) /* GTT graphics memory size */ +# define GGC_GTT_SIZE_0MB (0 << 8) +# define GGC_GTT_SIZE_2MB (1 << 8) +# define GGC_GTT_SIZE_4MB (2 << 8) +# define GGC_GTT_SIZE_8MB (3 << 8) +# define GGC_GSM_SIZE_MASK (0x1f << 3) /* Main memory use */ +# define GGC_GSM_SIZE_0MB (0 << 3) +# define GGC_GSM_SIZE_32MB (1 << 3) +# define GGC_GSM_SIZE_64MB (2 << 3) +# define GCC_GSM_SIZE_96MB (3 << 3) +# define GGC_GSM_SIZE_128MB (4 << 3) +# define GGC_GSM_SIZE_160MB (5 << 3) +# define GGC_GSM_SIZE_192MB (6 << 3) +# define GGC_GSM_SIZE_224MB (7 << 3) +# define GGC_GSM_SIZE_256MB (8 << 3) +# define GGC_GSM_SIZE_288MB (9 << 3) +# define GGC_GSM_SIZE_320MB (0x0a << 3) +# define GGC_GSM_SIZE_352MB (0x0b << 3) +# define GGC_GSM_SIZE_384MB (0x0c << 3) +# define GGC_GSM_SIZE_416MB (0x0d << 3) +# define GGC_GSM_SIZE_448MB (0x0e << 3) +# define GGC_GSM_SIZE_480MB (0x0f << 3) +# define GGC_GSM_SIZE_512MB (0x10 << 3) +# define GGC_VGA_DISABLE (1 << 1) /* VGA Disable */ +# define GGC_GGCLCK (1 << 0) /* Prevent register writes */ + +#define GSM_BASE 0x5c +# define GSM_BDSM 0xfff00000 /* Base of stolen memory */ +# define GSM_BDSM_LOCK (1 << 0) /* Prevent register writes */ + +#define GTT_BASE 0x70 +# define GTT_BGSM 0xfff00000 /* Base of stolen memory */ +# define GTT_BGSM_LOCK (1 << 0) /* Prevent register writes */ + +#define MSAC 0x62 +#define APERTURE_SIZE_MASK (3 << 1) +#define APERTURE_SIZE_128MB (0 << 1) +#define APERTURE_SIZE_256MB (1 << 1) +#define APERTURE_SIZE_512MB (3 << 1) + +#define SWSCI 0xe8 /* SWSCI enable */ +#define ASLS 0xfc /* OpRegion Base */ + +/* Panel control registers */ +#define HOTPLUG_CTRL 0x61110 +#define PP_CONTROL 0x61204 +# define PP_CONTROL_WRITE_PROTECT_KEY 0xffff0000 /* Enable display port VDD */ +# define PP_CONTROL_UNLOCK 0xabcd0000 +# define PP_CONTROL_EDP_FORCE_VDD (1 << 3) /* Enable display port VDD */ +# define PP_CONTROL_BACKLIGHT_ENABLE (1 << 2) +# define PP_CONTROL_POWER_DOWN_ON_RESET (1 << 1) +# define PP_CONTROL_POWER_STATE_TARGET (1 << 0) /* Power up/down (1/0) */ + +#define PP_ON_DELAYS 0x61208 +#define PP_OFF_DELAYS 0x6120c +#define PP_DIVISOR 0x61210 +#define BACKLIGHT_CTL2 0x61250 +# define BACKLIGHT_PWM_ENABLE (1 << 31) +# define BACKLIGHT_POLARITY (1 << 28) /* Active low/high (1/0) */ +# define BACKLIGHT_PHASE_IN_INT_STATUS (1 << 26) +# define BACKLIGHT_PHASE_IN_ENABLE (1 << 25) +# define BACKLIGHT_PHASE_IN_INT_ENABLE (1 << 24) +# define BACKLIGHT_PHASE_IN_TIME_BASE 0x00ff0000 +# define BACKLIGHT_PHASE_IN_COUNT 0x0000ff00 +# define BACKLIGHT_PHASE_IN_INCREMENT 0x000000ff + +#define BACKLIGHT_CTL 0x61254 + +#endif /* _BRASWELL_GFX_H_ */ diff --git a/src/soc/intel/braswell/include/soc/gpio.h b/src/soc/intel/braswell/include/soc/gpio.h new file mode 100644 index 0000000..8692d6a --- /dev/null +++ b/src/soc/intel/braswell/include/soc/gpio.h @@ -0,0 +1,543 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_GPIO_H_ +#define _BRASWELL_GPIO_H_ + +#include <stdint.h> +#include <arch/io.h> +#include <soc/iomap.h> + +#define COMMUNITY_SIZE 0x20000 + +#define COMMUNITY_GPSOUTHWEST_BASE \ +(IO_BASE_ADDRESS + COMMUNITY_OFFSET_GPSOUTHWEST) + +#define COMMUNITY_GPNORTH_BASE \ +(IO_BASE_ADDRESS + COMMUNITY_OFFSET_GPNORTH) + +#define COMMUNITY_GPEAST_BASE \ +(IO_BASE_ADDRESS + COMMUNITY_OFFSET_GPEAST) + +#define COMMUNITY_GPSOUTHEAST_BASE \ +(IO_BASE_ADDRESS + COMMUNITY_OFFSET_GPSOUTHEAST) + +#define GPIO_COMMUNITY_COUNT 4 +#define GPIO_FAMILIES_MAX_PER_COMM 7 +#define GP_SOUTHWEST 0 +#define GP_NORTH 1 +#define GP_EAST 2 +#define GP_SOUTHEAST 3 + +#define COMMUNITY_BASE(community) \ +(IO_BASE_ADDRESS + community * 0x8000) + +#define GP_READ_ACCESS_POLICY_BASE(community) \ +(COMMUNITY_BASE(community) + 0x000) + +#define GP_WRITE_ACCESS_POLICY_BASE(community) \ +(COMMUNITY_BASE(community) + 0x100) + +#define GP_WAKE_STATUS_REG_BASE(community) \ +(COMMUNITY_BASE(community) + 0x200) + +#define GP_WAKE_MASK_REG_BASE(community) \ +(COMMUNITY_BASE(community) + 0x280) + +#define GP_INT_STATUS_REG_BASE(community) \ +(COMMUNITY_BASE(community) + 0x300) + +#define GP_INT_MASK_REG_BASE(community) \ +(COMMUNITY_BASE(community) + 0x380) + +#define GP_FAMILY_RCOMP_CTRL(community, family) \ +(COMMUNITY_BASE(community) + 0x1080 + 0x80 * family) + +#define GP_FAMILY_RCOMP_OFFSET(community, family) \ +(COMMUNITY_BASE(community) + 0x1084 + 0x80 * family) + +#define GP_FAMILY_RCOMP_OVERRIDE(community, family) \ +(COMMUNITY_BASE(community) + 0x1088 + 0x80 * family) + +#define GP_FAMILY_RCOMP_VALUE(community, family) \ +(COMMUNITY_BASE(community) + 0x108C + 0x80 * family) + +#define GP_FAMILY_CONF_COMP(community, family) \ +(COMMUNITY_BASE(community) + 0x1090 + 0x80 * family) + +#define GP_FAMILY_CONF_REG(community, family) \ +(COMMUNITY_BASE(community) + 0x1094 + 0x80 * family) + +/* GPIO Security registers offset */ +#define GPIO_READ_ACCESS_POLICY_REG 0x0000 +#define GPIO_WRITE_ACCESS_POLICY_REG 0x0100 +#define GPIO_WAKE_STATUS_REG 0x0200 +#define GPIO_WAKE_MASK_REG0 0x0280 +#define GPIO_WAKE_MASK_REG1 0x0284 +#define GPIO_INTERRUPT_STATUS 0x0300 +#define GPIO_INTERRUPT_MASK 0x0380 +#define GPE0A_STS_REG 0x20 +#define GPE0A_EN_REG 0x28 +#define ALT_GPIO_SMI_REG 0x38 +#define GPIO_ROUT_REG 0x58 + +/* Pad register offset */ +#define PAD_CONF0_REG 0x0 +#define PAD_CONF1_REG 0x4 +#define PAD_VAL_REG 0x8 + +/* Some banks have no legacy GPIO interface */ +#define GP_LEGACY_BASE_NONE 0xFFFF + +/* Number of GPIOs in each bank */ +#define GPNCORE_COUNT 27 +#define GPSCORE_COUNT 102 +#define GPSSUS_COUNT 44 + +#define GP_SOUTHWEST_COUNT 56 +#define GP_NORTH_COUNT 59 +#define GP_EAST_COUNT 24 +#define GP_SOUTHEAST_COUNT 55 + +/* General */ +#define GPIO_REGS_SIZE 8 +#define NA 0 +#define LOW 0 +#define HIGH 1 +#define MASK_WAKE 0 +#define UNMASK_WAKE 1 +#define GPE_CAPABLE 1 +#define GPE_CAPABLE_NONE 0 + +#define MAX_FAMILY_PAD_GPIO_NO 15 +#define FAMILY_PAD_REGS_OFF 0x4400 +#define FAMILY_PAD_REGS_SIZE 0x400 + +/* config0[31:28] - Interrupt Selection Interrupt Select */ +#define PAD_INT_SEL(int_s) (int_s << 28) + +/* config0[27:26] - Glitch Filter Config */ +#define PAD_GFCFG(glitch_cfg) (glitch_cfg << 26) +#define PAD_GFCFG_DISABLE (0 << 26) +#define PAD_ENABLE_EDGE_DETECTION (1 << 26) /* EDGE DETECTION ONLY */ +#define PAD_ENABLE_RX_DETECTION (2 << 26) /* RX DETECTION ONLY */ +#define PAD_ENABLE_EDGE_RX_DETECTION (3 << 26) /* RX & EDGE DETECTION */ + +/* config0[25:24] - RX/TX Enable Config */ +#define PAD_FUNC_CTRL(tx_rx_enable) (tx_rx_enable << 24) +#define PAD_FUNC_CTRL_RX_TX_ENABLE (0 << 24) +#define PAD_FUNC_CTRL_TX_ENABLE_RX_DISABLE (1 << 24) +#define PAD_FUNC_CTRL_TX_ENABLE_RX_ENABLE (2 << 24) +#define PAD_TX_RX_ENABLE (3 << 24) + +/* config0[23:20] - Termination */ +#define PAD_PULL(TERM) (TERM << 20) +#define PAD_PULL_DISABLE (0 << 20) +#define PAD_PULL_DOWN_20K (1 << 20) +#define PAD_PULL_DOWN_5K (2 << 20) +#define PAD_PULL_DOWN_1K (4 << 20) +#define PAD_PULL_UP_20K (9 << 20) +#define PAD_PULL_UP_5K (10 << 20) +#define PAD_PULL_UP_1K (12 << 20) + +/* config0[19:16] - PAD Mode */ +#define PAD_MODE_SELECTION(MODE_SEL) (MODE_SEL<<16) + +#define SET_PAD_MODE_SELECTION(pad_config, mode) \ + ((pad_config & 0xfff0ffff) | PAD_MODE_SELECTION(mode)) + +/* config0[15] - GPIO Enable */ +#define PAD_GPIO_DISABLE (0 << 15) +#define PAD_GPIO_ENABLE (1 << 15) + +/* config0[14:11] - Reserver2 */ + +/* config0[10:8] - GPIO Config */ +#define PAD_GPIO_CFG(gpio_cfg) (gpio_cfg << 8) +#define PAD_GPIOFG_GPIO (0 << 8) +#define PAD_GPIOFG_GPO (1 << 8) +#define PAD_GPIOFG_GPI (2 << 8) +#define PAD_GPIOFG_HI_Z (3 << 8) + +/* config0[7] - Gpio Light Mode Bar */ +/* config0[6:2] - Reserved1 */ +/* config0[1] - GPIO TX State */ +#define PAD_DEFAULT_TX(STATE) (STATE<<1) +/* config0[0] - GPIO RX State */ +#define PAD_RX_BIT 1 + +/* Pad Control Register 1 configuration */ +#define PAD_DISABLE_INT (0 << 0) +#define PAD_TRIG_EDGE_LOW (1 << 0) +#define PAD_TRIG_EDGE_HIGH (2 << 0) +#define PAD_TRIG_EDGE_BOTH (3 << 0) +#define PAD_TRIG_EDGE_LEVEL (4 << 0) + +/* Pad config0 power-on values */ +#define PAD_CONFIG0_DEFAULT 0x00010300 +#define PAD_CONFIG0_DEFAULT0 0x00910300 +#define PAD_CONFIG0_DEFAULT1 0x00110300 +#define PAD_CONFIG0_GPI_DEFAULT 0x00010200 + +/* Pad config1 reg power-on values */ +#define PAD_CONFIG1_DEFAULT0 0x05C00000 +#define PAD_CONFIG1_CSEN 0x0DC00000 +#define PAD_CONFIG1_DEFAULT1 0x05C00020 + +#define GPIO_INPUT_NO_PULL \ + { .pad_conf0 = PAD_PULL_DISABLE | PAD_GPIO_ENABLE \ + | PAD_CONFIG0_GPI_DEFAULT, \ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +#define GPIO_INPUT_PU_20K \ + { .pad_conf0 = PAD_PULL_UP_20K | PAD_GPIO_ENABLE \ + | PAD_CONFIG0_GPI_DEFAULT, \ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +#define GPI(int_type, int_sel, term, int_msk, glitch_cfg, wake_msk, gpe_val) { \ + .pad_conf0 = PAD_INT_SEL(int_sel) | PAD_GFCFG(glitch_cfg) \ + | PAD_PULL(term) | PAD_GPIO_ENABLE | PAD_GPIOFG_GPI, \ + .pad_conf1 = int_type << 0 | PAD_CONFIG1_DEFAULT0, \ + .wake_mask = wake_msk, \ + .int_mask = int_msk, \ + .gpe = gpe_val } + +#define GPO_FUNC(term, tx_state) {\ + .pad_conf0 = PAD_GPIO_ENABLE | PAD_GPIOFG_GPO | PAD_PULL(term) \ + | tx_state << 1, \ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +#define NATIVE_FUNC(mode, term, inv_rx_tx) {\ + .pad_conf0 = PAD_GPIO_DISABLE | PAD_GPIOFG_HI_Z \ + | PAD_MODE_SELECTION(mode) | PAD_PULL(term),\ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 | inv_rx_tx << 4 } + +#define NATIVE_FUNC_TX_RX(tx_rx_enable, mode, term, inv_rx_tx) {\ + .pad_conf0 = PAD_FUNC_CTRL(tx_rx_enable) | PAD_GPIO_DISABLE \ + | PAD_GPIOFG_GPIO | PAD_MODE_SELECTION(mode) \ + | PAD_PULL(term),\ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 | inv_rx_tx << 4 } + +#define NATIVE_FUNC_CSEN(mode, term, inv_rx_tx) {\ + .pad_conf0 = PAD_GPIO_DISABLE | PAD_GPIOFG_HI_Z \ + | PAD_MODE_SELECTION(mode) | PAD_PULL(term),\ + .pad_conf1 = PAD_CONFIG1_CSEN | inv_rx_tx << 4 } + +#define NATIVE_INT(mode, int_sel) {\ + .pad_conf0 = PAD_INT_SEL(int_sel) | PAD_GPIO_DISABLE \ + | PAD_GPIOFG_HI_Z | PAD_MODE_SELECTION(mode),\ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +#define SPEAKER \ +{ .pad_conf0 = PAD_CONFIG0_DEFAULT0, \ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +#define SPARE_PIN\ + { .pad_conf0 = 0x00110300,\ + .pad_conf1 = PAD_CONFIG1_DEFAULT0 } + +/* SCI , SMI, Wake */ +#define GPIO_SCI(int_sel) \ + { .pad_conf0 = PAD_PULL_DISABLE | PAD_ENABLE_EDGE_RX_DETECTION\ + | PAD_GPIO_ENABLE | PAD_GPIOFG_GPI \ + | PAD_INT_SEL(int_sel), \ + .pad_conf1 = PAD_TRIG_EDGE_LOW | PAD_CONFIG1_DEFAULT0, \ + .gpe = SCI, \ + .int_mask = 1 } + +#define GPIO_WAKE(int_sel) \ + { .pad_conf0 = PAD_PULL_DISABLE | PAD_ENABLE_EDGE_RX_DETECTION\ + | PAD_GPIO_ENABLE | PAD_GPIOFG_GPI \ + | PAD_INT_SEL(int_sel), \ + .pad_conf1 = PAD_TRIG_EDGE_LOW | PAD_CONFIG1_DEFAULT0, \ + .int_mask = 1 ,\ + .wake_mask = 1 } + +#define GPIO_SMI(int_sel) \ + { .pad_conf0 = PAD_PULL_DISABLE | PAD_ENABLE_EDGE_RX_DETECTION\ + | PAD_GPIO_ENABLE | PAD_GPIOFG_GPI \ + | PAD_INT_SEL(int_sel), \ + .pad_conf1 = PAD_TRIG_EDGE_LOW | PAD_CONFIG1_DEFAULT0, \ + .int_mask = 1,\ + .gpe = SMI } + +#define GPIO_SKIP { .skip_config = 1 } + +/* Common GPIO settings */ +#define NATIVE_DEFAULT(mode) NATIVE_FUNC(mode, 0, 0) /* no pull */ +#define NATIVE_PU20K(mode) NATIVE_FUNC(mode, 9, 0) /* PH 20k */ +#define NATIVE_PU5K(mode) NATIVE_FUNC(mode, 10, 0) /* PH 5k */ +#define NATIVE_PU5K_INVTX(mode) NATIVE_FUNC(mode, 10, inv_tx_enable) /* PH 5k */ +#define NATIVE_PU1K(mode) NATIVE_FUNC(mode, 12, 0) /* PH 1k */ +#define NATIVE_PU1K_CSEN_INVTX(mode) \ + NATIVE_FUNC_CSEN(mode, 12, inv_tx_enable) /* PH 1k */ +#define NATIVE_PU1K_INVTX(mode) NATIVE_FUNC(mode, 12, inv_tx_enable) /* PH 1k */ +#define NATIVE_PD20K(mode) NATIVE_FUNC(mode, 1, 0) /* PD 20k */ +#define NATIVE_PD5K(mode) NATIVE_FUNC(mode, 2, 0) /* PD 5k */ +#define NATIVE_PD1K(mode) NATIVE_FUNC(mode, 4, 0) /* PD 1k */ +#define NATIVE_PD1K_CSEN_INVTX(mode) NATIVE_FUNC_CSEN(mode, 4, inv_tx_enable) + /* no pull */ +#define NATIVE_TX_RX_EN NATIVE_FUNC_TX_RX(3, 1, 0, inv_tx_enable) +#define NATIVE_TX_RX_M1 NATIVE_FUNC_TX_RX(0, 1, 0, 0) /* no pull */ +#define NATIVE_TX_RX_M3 NATIVE_FUNC_TX_RX(0, 3, 0, 0) /* no pull */ +#define NATIVE_PU1K_M1 NATIVE_PU1K(1) /* PU1k M1 */ + +/* Default native functions */ +#define Native_M0 NATIVE_DEFAULT(0) +#define Native_M1 NATIVE_DEFAULT(1) +#define Native_M2 NATIVE_DEFAULT(2) +#define Native_M3 NATIVE_DEFAULT(3) +#define Native_M4 NATIVE_DEFAULT(4) +#define Native_M5 NATIVE_DEFAULT(5) +#define Native_M6 NATIVE_DEFAULT(6) +#define Native_M7 NATIVE_DEFAULT(7) +#define Native_M8 NATIVE_DEFAULT(8) + +#define GPIO_OUT_LOW GPO_FUNC(0, 0) /* gpo low */ +#define GPIO_OUT_HIGH GPO_FUNC(0, 1) /* gpo high */ +#define GPIO_NC GPIO_INPUT_PU_20K /* not connect */ + +/* End marker */ +#define GPIO_LIST_END 0xffffffff + +#define GPIO_END \ + { .pad_conf0 = GPIO_LIST_END } + +/* 16 DirectIRQs per supported bank */ +#define GPIO_MAX_DIRQS 16 + +#define GPIO_NONE 255 + +/* Functions / defines for changing GPIOs in romstage */ +/* SCORE Pad definitions. */ +#define UART_RXD_PAD 82 +#define UART_TXD_PAD 83 +#define PCU_SMB_CLK_PAD 88 +#define PCU_SMB_DATA_PAD 90 +#define SOC_DDI1_VDDEN_PAD 16 +#define UART1_RXD_PAD 9 +#define UART1_TXD_PAD 13 +#define DDI2_DDC_SCL 48 +#define DDI2_DDC_SDA 53 + +struct soc_gpio_map { + u32 pad_conf0; + u32 pad_conf1; + u32 pad_val; + u32 gpe; + u32 int_mask:1; + u32 wake_mask:1; + u32 is_gpio:1; + u32 skip_config:1; +} __attribute__ ((packed)); + +struct soc_gpio_config { + const struct soc_gpio_map *north; + const struct soc_gpio_map *southeast; + const struct soc_gpio_map *southwest; + const struct soc_gpio_map *east; +}; + +/* Description of a GPIO 'community' */ +struct gpio_bank { + const int gpio_count; + const u8 *gpio_to_pad; + const int legacy_base; + const unsigned long pad_base; + const u8 has_gpe_en:1; + const u8 has_wake_en:1; +}; + +typedef enum { + NATIVE = 0xff, + GPIO = 0, /* Native, no need to set PAD_VALUE */ + GPO = 1, /* GPI, input only in PAD_VALUE */ + GPI = 2, /* GPO, output only in PAD_VALUE */ + HI_Z = 3, + NA_GPO = 0, +} gpio_en_t; + +typedef enum { + LO = 0, + HI = 1, +} gpo_d4_t; + +typedef enum { + F0 = 0, + F1 = 1, + F2 = 2, + F3 = 3 +} gpio_func_num_t; + +typedef enum { + _CAP = 1, + _NOT_CAP = 0 +} int_capable_t; + +typedef enum { + P_NONE = 0, /* Pull None */ + P_20K_L = 1, /* Pull Down 20K */ + P_5K_L = 2, /* Pull Down 5K */ + P_1K_L = 4, /* Pull Down 1K */ + P_20K_H = 9, /* Pull Up 20K */ + P_5K_H = 10, /* Pull Up 5K */ + P_1K_H = 12 /* Pull Up 1K */ +} pull_type_t; + +typedef enum { + DISABLE = 0, /* Disable */ + ENABLE = 1, /* Enable */ +} park_mode_enb_t; + +typedef enum { + VOLT_3_3 = 0, /* Working on 3.3 Volts */ + VOLT_1_8 = 1, /* Working on 1.8 Volts */ +} voltage_t; + +typedef enum { + DISABLE_HS = 0, /* Disable high speed mode */ + ENABLE_HS = 1, /* Enable high speed mode */ +} hs_mode_t; + +typedef enum { + PULL_UP = 0, /* On Die Termination Up */ + PULL_DOWN = 1, /* On Die Termination Down */ +} odt_up_dn_t; + +typedef enum { + DISABLE_OD = 0, /* On Die Termination Disable */ + ENABLE_OD = 1, /* On Die Termination Enable */ +} odt_en_t; + +typedef enum { + ONE_BIT = 1, + TWO_BIT = 3, + THREE_BIT = 7, + FOUR_BIT = 15, + FIVE_BIT = 31, + SIX_BIT = 63, + SEVEN_BIT = 127, + EIGHT_BIT = 255 +} bit_t; + +typedef enum { + M0 = 0, + M1, + M2, + M3, + M4, + M5, + M6, + M7, + M8, + M9, + M10, + M11, + M12, + M13, +} mode_list_t; + +typedef enum { + L0 = 0, + L1 = 1, + L2 = 2, + L3 = 3, + L4 = 4, + L5 = 5, + L6 = 6, + L7 = 7, + L8 = 8, + L9 = 9, + L10 = 10, + L11 = 11, + L12 = 12, + L13 = 13, + L14 = 14, + L15 = 15, +} int_select_t; + +typedef enum { + INT_DIS = 0, + trig_edge_low = 1, + trig_edge_high = 2, + trig_edge_both = 3, + trig_level = 4, +} int_type_t; + +typedef enum { + glitch_disable = 0, + en_edge_detect, + en_rx_data, + en_edge_rx_data, +} glitch_cfg; + +typedef enum { + maskable = 0, + non_maskable, +} mask_t; + +typedef enum { + GPE = 0, + SMI, + SCI, +} gpe_config_t; + +/* + * InvertRxTx 7:4 + * 0 - No Inversion + * 1 - Inversion + * [0] RX Enable + * [1] TX Enable + * [2] RX Data + * [3] TX Data + */ +typedef enum { + no_inversion = 0, + inv_rx_enable = 0x1, + inv_tx_enable = 0x2, + inv_rx_tx_enable = 0x3, + inv_rx_data = 0x4, + inv_tx_data = 0x8, +} invert_rx_tx_t; + +void setup_soc_gpios(struct soc_gpio_config *config, u8 enable_xdp_tap); +struct soc_gpio_config *mainboard_get_gpios(void); + +static inline void ncore_select_func(int pad, int func) +{ + +} + +/* These functions require that the input pad be configured as an input GPIO */ + +static inline int ssus_get_gpio(int pad) +{ + return 0; +} + +static inline void ssus_disable_internal_pull(int pad) +{ +} + +int get_gpio(int community_base, int pad0_offset); +uint16_t gpio_family_number(uint8_t community, uint8_t pad); +uint32_t *gpio_pad_config_reg(uint8_t community, uint8_t pad); + +#endif /* _BRASWELL_GPIO_H_ */ diff --git a/src/soc/intel/braswell/include/soc/hda.h b/src/soc/intel/braswell/include/soc/hda.h new file mode 100644 index 0000000..8443ffa --- /dev/null +++ b/src/soc/intel/braswell/include/soc/hda.h @@ -0,0 +1,45 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_HDA_H_ +#define _BRASWELL_HDA_H_ + +/* + * PCI config registers. + */ + +#define HDA_DCKSTS 0x4d +# define HDA_DCKSTS_DS (1 << 7) +# define HDA_DCKSTS_DM (1 << 0) + +#define HDA_DEVC 0x78 +# define HDA_DEVC_MRRS 0x7000 +# define HDA_DEVC_NSNPEN (1 << 11) +# define HDA_DEVC_AUXPEN (1 << 10) +# define HDA_DEVC_PEEN (1 << 9) +# define HDA_DEVC_ETEN (1 << 8) +# define HDA_DEVC_MAXPAY 0x00e0 +# define HDA_DEVC_ROEN (1 << 4) +# define HDA_DEVC_URREN (1 << 3) +# define HDA_DEVC_FEREN (1 << 2) +# define HDA_DEVC_NFEREN (1 << 1) +# define HDA_DEVC_CEREN (1 << 0) + +#endif /* _BRASWELL_HDA_H_ */ diff --git a/src/soc/intel/braswell/include/soc/iomap.h b/src/soc/intel/braswell/include/soc/iomap.h new file mode 100644 index 0000000..d6dde43 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/iomap.h @@ -0,0 +1,92 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_IOMAP_H_ +#define _BRASWELL_IOMAP_H_ + + +/* + * Memory Mapped IO bases. + */ + +/* PCI Configuration Space */ +#define MCFG_BASE_ADDRESS CONFIG_MMCONF_BASE_ADDRESS +#define MCFG_BASE_SIZE 0x10000000 + +/* Transactions in this range will abort */ +#define ABORT_BASE_ADDRESS 0xfeb00000 +#define ABORT_BASE_SIZE 0x00100000 + +/* Power Management Controller */ +#define PMC_BASE_ADDRESS 0xfed03000 +#define PMC_BASE_SIZE 0x400 + +/* IO Memory */ +#define IO_BASE_ADDRESS 0xfed80000 +#define IO_BASE_SIZE 0x4000 +#define COMMUNITY_OFFSET_GPSOUTHWEST 0x00000 +#define COMMUNITY_OFFSET_GPNORTH 0x08000 +#define COMMUNITY_OFFSET_GPEAST 0x10000 +#define COMMUNITY_OFFSET_GPSOUTHEAST 0x18000 + +/* Intel Legacy Block */ +#define ILB_BASE_ADDRESS 0xfed08000 +#define ILB_BASE_SIZE 0x400 + +/* SPI Bus */ +#define SPI_BASE_ADDRESS 0xfed01000 +#define SPI_BASE_SIZE 0x400 + +/* MODPHY */ +#define MPHY_BASE_ADDRESS 0xfea00000 +#define MPHY_BASE_SIZE 0x100000 + +/* Power Management Unit */ +#define PUNIT_BASE_ADDRESS 0xfed06000 +#define PUNIT_BASE_SIZE 0x800 + +/* Root Complex Base Address */ +#define RCBA_BASE_ADDRESS 0xfed1c000 +#define RCBA_BASE_SIZE 0x400 + +/* High Performance Event Timer */ +#define HPET_BASE_ADDRESS 0xfed00000 +#define HPET_BASE_SIZE 0x400 + +/* Temporary Base Address */ +#define TEMP_BASE_ADDRESS 0xfd000000 + +/* + * IO Port bases. + */ +#define ACPI_BASE_ADDRESS 0x0400 +#define ACPI_BASE_SIZE 0x80 + +#define GPIO_BASE_ADDRESS 0x0500 +#define GPIO_BASE_SIZE 0x100 + +#define SMBUS_BASE_ADDRESS 0xefa0 + +#ifndef __ACPI__ +/* Read Top of Low Memory (BMBOUND) */ +uint32_t nc_read_top_of_low_memory(void); +#endif + +#endif /* _BRASWELL_IOMAP_H_ */ diff --git a/src/soc/intel/braswell/include/soc/iosf.h b/src/soc/intel/braswell/include/soc/iosf.h new file mode 100644 index 0000000..ccb7e50 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/iosf.h @@ -0,0 +1,229 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_IOSF_H_ +#define _BRASWELL_IOSF_H_ + +#include <stdint.h> +#ifndef __PRE_RAM__ +#include <device/device.h> +#include <reg_script.h> +#endif /* __PRE_RAM */ +#include <soc/pci_devs.h> + +/* + * The SoC has a message network called IOSF Sideband. The access + * routines are through 3 registers in PCI config space of 00:00.0: + * MCR - control register + * MDR - data register + * MCRX - control register extension + * The extension register is only used for addresses that don't fit + * into the 8 bit register address. + */ + +#ifndef PCI_DEV +#define PCI_DEV(SEGBUS, DEV, FN) ( \ + (((SEGBUS) & 0xFFF) << 20) | \ + (((DEV) & 0x1F) << 15) | \ + (((FN) & 0x07) << 12)) +#endif +#define IOSF_PCI_DEV PCI_DEV(0, SOC_DEV, SOC_FUNC) + +#define MCR_REG 0xd0 +#define IOSF_OPCODE(x) ((x) << 24) +#define IOSF_PORT(x) ((0xff & (x)) << 16) +#define IOSF_REG(x) ((0xff & (x)) << 8) +#define IOSF_REG_UPPER(x) (((~0xff) & (x))) +#define IOSF_BYTE_EN_0 0x10 +#define IOSF_BYTE_EN_1 0x20 +#define IOSF_BYTE_EN_2 0x40 +#define IOSF_BYTE_EN_3 0x80 +#define IOSF_BYTE_EN \ + (IOSF_BYTE_EN_0 | IOSF_BYTE_EN_1 | IOSF_BYTE_EN_2 | IOSF_BYTE_EN_3) +#define MDR_REG 0xd4 +#define MCRX_REG 0xd8 + +uint32_t iosf_bunit_read(int reg); +void iosf_bunit_write(int reg, uint32_t val); +uint32_t iosf_punit_read(int reg); +void iosf_punit_write(int reg, uint32_t val); +uint32_t iosf_score_read(int reg); +void iosf_score_write(int reg, uint32_t val); +uint32_t iosf_lpss_read(int reg); +void iosf_lpss_write(int reg, uint32_t val); +uint32_t iosf_port58_read(int reg); +void iosf_port58_write(int reg, uint32_t val); +uint32_t iosf_scc_read(int reg); +void iosf_scc_write(int reg, uint32_t val); + +#ifndef __PRE_RAM__ +uint64_t reg_script_read_iosf(struct reg_script_context *ctx); +void reg_script_write_iosf(struct reg_script_context *ctx); +#endif /* __PRE_RAM */ + +/* IOSF ports. */ +#define IOSF_PORT_AUNIT 0x00 /* IO Arbiter unit */ +#define IOSF_PORT_CPU_BUS 0x02 /* CPU Bus Interface Controller */ +#define IOSF_PORT_BUNIT 0x03 /* System Memory Arbiter/Bunit */ +#define IOSF_PORT_PMC 0x04 /* Power Management Controller */ +#define IOSF_PORT_SEC 0x44 /* SEC */ +#define IOSF_PORT_0x45 0x45 +#define IOSF_PORT_0x46 0x46 +#define IOSF_PORT_0x47 0x47 +#define IOSF_PORT_SCORE 0x48 /* SCORE */ +#define IOSF_PORT_0x55 0x55 +#define IOSF_PORT_0x58 0x58 +#define IOSF_PORT_0x59 0x59 +#define IOSF_PORT_0x5a 0x5a +#define IOSF_PORT_USHPHY 0x61 /* USB XHCI PHY */ +#define IOSF_PORT_SCC 0x63 /* Storage Control Cluster */ +#define IOSF_PORT_LPSS 0xa0 /* LPSS - Low Power Subsystem */ +#define IOSF_PORT_0xa2 0xa2 +#define IOSF_PORT_SSUS 0xa8 /* SUS */ +#define IOSF_PORT_CCU 0xa9 /* Clock control unit. */ + +/* Read and write opcodes differ per port. */ +#define IOSF_OP_READ_BUNIT 0x10 +#define IOSF_OP_WRITE_BUNIT (IOSF_OP_READ_BUNIT | 1) +#define IOSF_OP_READ_PMC 0x06 +#define IOSF_OP_WRITE_PMC (IOSF_OP_READ_PMC | 1) +#define IOSF_OP_READ_SCORE 0x06 +#define IOSF_OP_WRITE_SCORE (IOSF_OP_READ_SCORE | 1) +#define IOSF_OP_READ_LPSS 0x06 +#define IOSF_OP_WRITE_LPSS (IOSF_OP_READ_LPSS | 1) +#define IOSF_OP_READ_0x58 0x06 +#define IOSF_OP_WRITE_0x58 (IOSF_OP_READ_0x58 | 1) +#define IOSF_OP_READ_SCC 0x06 +#define IOSF_OP_WRITE_SCC (IOSF_OP_READ_SCC | 1) + +/* + * BUNIT Registers. + */ + +/* BMBOUND has a 128MiB granularity. Highest address is 0xf8000000. */ +#define BUNIT_BMBOUND 0x25 +/* + * BMBOUND_HI describes the available ram above 4GiB. It has a + * 256MiB granularity. Physical address bits 35:28 are compared with 31:24 + * bits in the BMBOUND_HI register. Also note that since BMBOUND has 128MiB + * granularity care needs to be taken with the e820 map to account for a hole + * in the ram. + */ +#define BUNIT_BMBOUND_HI 0x26 +#define BUNIT_MMCONF_REG 0x27 +#define BUNIT_BMISC 0x28 +/* The SMMRR registers define the SMM region in MiB granularity. */ +#define BUNIT_SMRRL 0x2e +#define BUNIT_SMRRH 0x2f + +/* + * PUNIT Registers + */ +#define SB_BIOS_CONFIG 0x06 +# define SB_BIOS_CONFIG_ECC_EN (1 << 31) +# define SB_BIOS_CONFIG_DUAL_CH_DIS (1 << 30) +# define SB_BIOS_CONFIG_EFF_ECC (1 << 29) +# define SB_BIOS_CONFIG_EFF_DUAL_CH_DIS (1 << 28) +# define SB_BIOS_CONFIG_PERF_MODE (1 << 17) +# define SB_BIOS_CONFIG_PDM_MODE (1 << 16) +# define SB_BIOS_CONFIG_DDRIO_PWRGATE (1 << 8) +# define SB_BIOS_CONFIG_GFX_TURBO_DIS (1 << 7) +# define SB_BIOS_CONFIG_PS2_EN_VNN (1 << 3) +# define SB_BIOS_CONFIG_PS2_EN_VCC (1 << 2) +# define SB_BIOS_CONFIG_PCIE_PLLOFFOK (1 << 1) +# define SB_BIOS_CONFIG_USB_CACHING_EN (1 << 0) +#define BIOS_RESET_CPL 0x05 +# define BIOS_RESET_CPL_ALL_DONE (1 << 1) +# define BIOS_RESET_CPL_RESET_DONE (1 << 0) + +/* + * LPSS Registers + */ +#define LPSS_SIO_DMA1_CTL 0x280 +#define LPSS_I2C1_CTL 0x288 +#define LPSS_I2C2_CTL 0x290 +#define LPSS_I2C3_CTL 0x298 +#define LPSS_I2C4_CTL 0x2a0 +#define LPSS_I2C5_CTL 0x2a8 +#define LPSS_I2C6_CTL 0x2b0 +#define LPSS_I2C7_CTL 0x2b8 +#define LPSS_SIO_DMA2_CTL 0x240 +#define LPSS_PWM1_CTL 0x248 +#define LPSS_PWM2_CTL 0x250 +#define LPSS_HSUART1_CTL 0x258 +#define LPSS_HSUART2_CTL 0x260 +#define LPSS_SPI_CTL 0x268 +# define LPSS_CTL_ACPI_INT_EN (1 << 21) +# define LPSS_CTL_PCI_CFG_DIS (1 << 20) +# define LPSS_CTL_SNOOP (1 << 18) +# define LPSS_CTL_NOSNOOP (1 << 19) +# define LPSS_CTL_PM_CAP_PRSNT (1 << 1) + +/* + * SCC Registers + */ +#define SCC_SD_CTL 0x504 +#define SCC_SDIO_CTL 0x508 +#define SCC_MMC_CTL 0x500 +# define SCC_CTL_PCI_CFG_DIS (1 << 0) +# define SCC_CTL_ACPI_INT_EN (1 << 1) + +/* + * USHPHY Registers + */ +#define USHPHY_CDN_PLL_CONTROL 0x03c0 +#define USHPHY_CDN_VCO_START_CAL_POINT 0x0054 +#define USHPHY_CCDRLF 0x8040 +#define USHPHY_PEAKING_AMP_CONFIG_DIAG 0x80a8 +#define USHPHY_OFFSET_COR_CONFIG_DIAG 0x80b0 +#define USHPHY_VGA_GAIN_CONFIG_DIAG 0x8080 +#define USHPHY_REE_DAC_CONTROL 0x80b8 +#define USHPHY_CDN_U1_POWER_STATE_DEF 0x0000 + +/* + * LPE Registers + */ +#define LPE_PCICFGCTR1 0x0500 +# define LPE_PCICFGCTR1_PCI_CFG_DIS (1 << 0) +# define LPE_PCICFGCTR1_ACPI_INT_EN (1 << 1) + +/* + * IO Sideband Function + */ + +#ifndef __PRE_RAM__ +#define REG_SCRIPT_IOSF(cmd_, unit_, reg_, mask_, value_, timeout_) \ + _REG_SCRIPT_ENCODE_RAW(REG_SCRIPT_COMMAND_##cmd_, \ + REG_SCRIPT_TYPE_IOSF, \ + REG_SCRIPT_SIZE_32, \ + reg_, mask_, value_, timeout_, unit_) +#define REG_IOSF_READ(unit_, reg_) \ + REG_SCRIPT_IOSF(READ, unit_, reg_, 0, 0, 0) +#define REG_IOSF_WRITE(unit_, reg_, value_) \ + REG_SCRIPT_IOSF(WRITE, unit_, reg_, 0, value_, 0) +#define REG_IOSF_RMW(unit_, reg_, mask_, value_) \ + REG_SCRIPT_IOSF(RMW, unit_, reg_, mask_, value_, 0) +#define REG_IOSF_OR(unit_, reg_, value_) \ + REG_IOSF_RMW(unit_, reg_, 0xffffffff, value_) +#define REG_IOSF_POLL(unit_, reg_, mask_, value_, timeout_) \ + REG_SCRIPT_IOSF(POLL, unit_, reg_, mask_, value_, timeout_) +#endif /* __PRE_RAM */ + +#endif /* _BRASWELL_IOSF_H_ */ diff --git a/src/soc/intel/braswell/include/soc/irq.h b/src/soc/intel/braswell/include/soc/irq.h new file mode 100644 index 0000000..5a781ac --- /dev/null +++ b/src/soc/intel/braswell/include/soc/irq.h @@ -0,0 +1,220 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_IRQ_H_ +#define _BRASWELL_IRQ_H_ + +#define PIRQA_APIC_IRQ 16 +#define PIRQB_APIC_IRQ 17 +#define PIRQC_APIC_IRQ 18 +#define PIRQD_APIC_IRQ 19 +#define PIRQE_APIC_IRQ 20 +#define PIRQF_APIC_IRQ 21 +#define PIRQG_APIC_IRQ 22 +#define PIRQH_APIC_IRQ 23 + +/* The below IRQs are for when devices are in ACPI mode. Active low. */ +#define LPE_DMA0_IRQ 24 +#define LPE_DMA1_IRQ 25 +#define LPE_SSP0_IRQ 26 +#define LPE_SSP1_IRQ 27 +#define LPE_SSP2_IRQ 28 +#define LPE_IPC2HOST_IRQ 29 +#define LPSS_I2C1_IRQ 32 +#define LPSS_I2C2_IRQ 33 +#define LPSS_I2C3_IRQ 34 +#define LPSS_I2C4_IRQ 35 +#define LPSS_I2C5_IRQ 36 +#define LPSS_I2C6_IRQ 37 +#define LPSS_I2C7_IRQ 38 +#define LPSS_HSUART1_IRQ 39 +#define LPSS_HSUART2_IRQ 40 +#define LPSS_SPI_IRQ 41 +#define LPSS_DMA1_IRQ 42 +#define LPSS_DMA2_IRQ 43 +#define SCC_EMMC_IRQ 45 +#define SCC_SDIO_IRQ 46 +#define SCC_SD_IRQ 47 + +#define GPIO_N_IRQ 48 +#define GPIO_SW_IRQ 49 +#define GPIO_E_IRQ 50 + +/* GPIO direct / dedicated IRQs. */ + +/* NORTH COMMUNITY */ +#define GPIO_N_DED_IRQ_0 51 +#define GPIO_N_DED_IRQ_1 52 +#define GPIO_N_DED_IRQ_2 53 +#define GPIO_N_DED_IRQ_3 54 +#define GPIO_N_DED_IRQ_4 55 +#define GPIO_N_DED_IRQ_5 56 +#define GPIO_N_DED_IRQ_6 57 +#define GPIO_N_DED_IRQ_7 58 + +/* SOUTH WEST COMMUNITY */ +#define GPIO_SW_DED_IRQ_0 59 +#define GPIO_SW_DED_IRQ_1 60 +#define GPIO_SW_DED_IRQ_2 61 +#define GPIO_SW_DED_IRQ_3 62 +#define GPIO_SW_DED_IRQ_4 63 +#define GPIO_SW_DED_IRQ_5 64 +#define GPIO_SW_DED_IRQ_6 65 +#define GPIO_SW_DED_IRQ_7 66 + +/* EAST COMMUNITY */ +#define GPIO_E_DED_IRQ_0 67 +#define GPIO_E_DED_IRQ_1 68 +#define GPIO_E_DED_IRQ_2 69 +#define GPIO_E_DED_IRQ_3 70 +#define GPIO_E_DED_IRQ_4 71 +#define GPIO_E_DED_IRQ_5 72 +#define GPIO_E_DED_IRQ_6 73 +#define GPIO_E_DED_IRQ_7 74 +#define GPIO_E_DED_IRQ_8 75 +#define GPIO_E_DED_IRQ_9 76 +#define GPIO_E_DED_IRQ_10 77 +#define GPIO_E_DED_IRQ_11 78 +#define GPIO_E_DED_IRQ_12 79 +#define GPIO_E_DED_IRQ_13 80 +#define GPIO_E_DED_IRQ_14 81 +#define GPIO_E_DED_IRQ_15 82 + +/* More IRQ */ +#define LPSS_SPI2_IRQ 89 +#define LPSS_SPI3_IRQ 90 +#define GPIO_SE_IRQ 91 + +/* GPIO direct / dedicated IRQs. */ +/* SOUTH EAST COMMUNITY */ +#define GPIO_SE_DED_IRQ_0 92 +#define GPIO_SE_DED_IRQ_1 93 +#define GPIO_SE_DED_IRQ_2 94 +#define GPIO_SE_DED_IRQ_3 95 +#define GPIO_SE_DED_IRQ_4 96 +#define GPIO_SE_DED_IRQ_5 97 +#define GPIO_SE_DED_IRQ_6 98 +#define GPIO_SE_DED_IRQ_7 99 +#define GPIO_SE_DED_IRQ_8 100 +#define GPIO_SE_DED_IRQ_9 101 +#define GPIO_SE_DED_IRQ_10 102 +#define GPIO_SE_DED_IRQ_11 103 +#define GPIO_SE_DED_IRQ_12 104 +#define GPIO_SE_DED_IRQ_13 105 +#define GPIO_SE_DED_IRQ_14 106 +#define GPIO_SE_DED_IRQ_15 107 + +/* OTHER IRQs */ +#define GPIO_VIRTUAL 108 +#define LPE_DMA2 109 +#define LPE_SSP3 110 +#define LPE_SSP4 111 +#define LPE_SSP5 112 + +/* DIRQs - Two levels of expansion to evaluate to numeric constants for ASL. */ +#define _GPIO_N_DED_IRQ(slot) GPIO_N_DED_IRQ_##slot +#define _GPIO_SW_DED_IRQ(slot) GPIO_SW_DED_IRQ_##slot +#define _GPIO_E_DED_IRQ(slot) GPIO_E_DED_IRQ_##slot +#define _GPIO_SE_DED_IRQ(slot) GPIO_SE_DED_IRQ_##slot +#define GPIO_N_DED_IRQ(slot) _GPIO_N_DED_IRQ(slot) +#define GPIO_SW_DED_IRQ(slot) _GPIO_SW_DED_IRQ(slot) +#define GPIO_E_DED_IRQ(slot) _GPIO_E_DED_IRQ(slot) +#define GPIO_SE_DED_IRQ(slot) _GPIO_SE_DED_IRQ(slot) + +/* TODO NEED TO UPDATE THESE IN onboard.h */ +#define _GPIO_S0_DED_IRQ(slot) GPIO_N_DED_IRQ_##slot +#define _GPIO_S5_DED_IRQ(slot) GPIO_SE_DED_IRQ_##slot +#define GPIO_S0_DED_IRQ(slot) _GPIO_N_DED_IRQ(slot) +#define GPIO_S5_DED_IRQ(slot) _GPIO_E_DED_IRQ(slot) + + +/* PIC IRQ settings. */ +#define PIRQ_PIC_IRQDISABLE 0x0 +#define PIRQ_PIC_IRQ3 0x3 +#define PIRQ_PIC_IRQ4 0x4 +#define PIRQ_PIC_IRQ5 0x5 +#define PIRQ_PIC_IRQ6 0x6 +#define PIRQ_PIC_IRQ7 0x7 +#define PIRQ_PIC_IRQ9 0x9 +#define PIRQ_PIC_IRQ10 0xa +#define PIRQ_PIC_IRQ11 0xb +#define PIRQ_PIC_IRQ12 0xc +#define PIRQ_PIC_IRQ14 0xe +#define PIRQ_PIC_IRQ15 0xf + +/* Overloaded term, but these values determine the per device route. */ +#define PIRQA 0 +#define PIRQB 1 +#define PIRQC 2 +#define PIRQD 3 +#define PIRQE 4 +#define PIRQF 5 +#define PIRQG 6 +#define PIRQH 7 + +/* These registers live behind the ILB_BASE_ADDRESS */ +#define ACTL 0x00 +# define SCIS_MASK 0x07 +# define SCIS_IRQ9 0x00 +# define SCIS_IRQ10 0x01 +# define SCIS_IRQ11 0x02 +# define SCIS_IRQ20 0x04 +# define SCIS_IRQ21 0x05 +# define SCIS_IRQ22 0x06 +# define SCIS_IRQ23 0x07 + +/* + * In each mainbaord directory there should exist a header file irqroute.h that + * defines the PCI_DEV_PIRQ_ROUTES and PIRQ_PIC_ROUTES macros which + * consist of PCI_DEV_PIRQ_ROUTE and PIRQ_PIC entries. + */ + +#if !defined(__ASSEMBLER__) && !defined(__ACPI__) +#include <stdint.h> + +#define NUM_IR_DEVS 32 +#define NUM_PIRQS 8 + +struct braswell_irq_route { + /* Per device configuration. */ + uint16_t pcidev[NUM_IR_DEVS]; + /* Route path for each internal PIRQx in PIC mode. */ + uint8_t pic[NUM_PIRQS]; +}; + +extern const struct braswell_irq_route global_braswell_irq_route; + +#define DEFINE_IRQ_ROUTES \ + const struct braswell_irq_route global_braswell_irq_route = { \ + .pcidev = { PCI_DEV_PIRQ_ROUTES, }, \ + .pic = { PIRQ_PIC_ROUTES, }, \ + } + +/* The following macros are used for ACPI by the ASL compiler */ +#define PCI_DEV_PIRQ_ROUTE(dev_, a_, b_, c_, d_) \ + [dev_] = (((PIRQ ## d_) << 12) | ((PIRQ ## c_) << 8) | \ + ((PIRQ ## b_) << 4) | ((PIRQ ## a_) << 0)) + +#define PIRQ_PIC(pirq_, pic_irq_) \ + [PIRQ ## pirq_] = PIRQ_PIC_IRQ ## pic_irq_ + +#endif /* !defined(__ASSEMBLER__) && !defined(__ACPI__) */ + +#endif /* _BRASWELL_IRQ_H_ */ diff --git a/src/soc/intel/braswell/include/soc/lpc.h b/src/soc/intel/braswell/include/soc/lpc.h new file mode 100644 index 0000000..c319804 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/lpc.h @@ -0,0 +1,55 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_LPC_H_ +#define _BRASWELL_LPC_H_ + +/* PCI config registers in LPC bridge. */ +#define REVID 0x08 +#define ABASE 0x40 +#define PBASE 0x44 +#define GBASE 0x48 +#define IOBASE 0x4c +#define IBASE 0x50 +#define SBASE 0x54 +#define MPBASE 0x58 +#define PUBASE 0x5c +#define UART_CONT 0x80 +#define RCBA 0xf0 + + +#define RID_A_STEPPING_START 1 +#define RID_B_STEPPING_START 5 +#define RID_C_STEPPING_START 0xe +enum braswell_stepping { + STEP_A0, + STEP_A1, + STEP_B0, + STEP_B1, + STEP_B2, + STEP_B3, + STEP_C0, +}; + +/* Registers behind the RCBA_BASE_ADDRESS bar. */ +#define GCS 0x00 +# define BILD (1 << 0) + +#endif /* _BRASWELL_LPC_H_ */ diff --git a/src/soc/intel/braswell/include/soc/msr.h b/src/soc/intel/braswell/include/soc/msr.h new file mode 100644 index 0000000..97692fb --- /dev/null +++ b/src/soc/intel/braswell/include/soc/msr.h @@ -0,0 +1,52 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_MSR_H_ +#define _BRASWELL_MSR_H_ + +#define MSR_IA32_PLATFORM_ID 0x17 +#define MSR_IA32_BIOS_SIGN_ID 0x8B +#define MSR_BSEL_CR_OVERCLOCK_CONTROL 0xcd +#define MSR_PLATFORM_INFO 0xce +#define MSR_PMG_CST_CONFIG_CONTROL 0xe2 +#define SINGLE_PCTL (1 << 11) +#define MSR_POWER_MISC 0x120 +#define ENABLE_ULFM_AUTOCM_MASK (1 << 2) +#define ENABLE_INDP_AUTOCM_MASK (1 << 3) +#define MSR_IA32_PERF_CTL 0x199 +#define MSR_IA32_MISC_ENABLES 0x1a0 +#define MSR_POWER_CTL 0x1fc +#define MSR_PKG_POWER_SKU_UNIT 0x606 +#define MSR_PKG_POWER_LIMIT 0x610 +#define MSR_PP1_POWER_LIMIT 0x638 +#define MSR_IACORE_RATIOS 0x66a +#define MSR_IACORE_TURBO_RATIOS 0x66c +#define MSR_IACORE_VIDS 0x66b +#define MSR_IACORE_TURBO_VIDS 0x66d +#define MSR_PKG_TURBO_CFG1 0x670 +#define MSR_CPU_TURBO_WKLD_CFG1 0x671 +#define MSR_CPU_TURBO_WKLD_CFG2 0x672 +#define MSR_CPU_THERM_CFG1 0x673 +#define MSR_CPU_THERM_CFG2 0x674 +#define MSR_CPU_THERM_SENS_CFG 0x675 + +#define BUS_FREQ_KHZ 100000 /* 100 MHz */ + +#endif /* _BRASWELL_MSR_H_ */ diff --git a/src/soc/intel/braswell/include/soc/nvs.h b/src/soc/intel/braswell/include/soc/nvs.h new file mode 100644 index 0000000..861fd53 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/nvs.h @@ -0,0 +1,79 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008-2009 coresystems GmbH + * Copyright (C) 2011 Google Inc + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_NVS_H_ +#define _BRASWELL_NVS_H_ + +#include <vendorcode/google/chromeos/gnvs.h> +#include <soc/device_nvs.h> + +typedef struct { + /* Miscellaneous */ + u16 osys; /* 0x00 - Operating System */ + u8 smif; /* 0x02 - SMI function call ("TRAP") */ + u8 prm0; /* 0x03 - SMI function call parameter */ + u8 prm1; /* 0x04 - SMI function call parameter */ + u8 scif; /* 0x05 - SCI function call (via _L00) */ + u8 prm2; /* 0x06 - SCI function call parameter */ + u8 prm3; /* 0x07 - SCI function call parameter */ + u8 lckf; /* 0x08 - Global Lock function for EC */ + u8 prm4; /* 0x09 - Lock function parameter */ + u8 prm5; /* 0x0a - Lock function parameter */ + u32 p80d; /* 0x0b - Debug port (IO 0x80) value */ + u8 lids; /* 0x0f - LID state (open = 1) */ + u8 pwrs; /* 0x10 - Power state (AC = 1) */ + u8 pcnt; /* 0x11 - Processor Count */ + u8 tpmp; /* 0x12 - TPM Present and Enabled */ + u8 tlvl; /* 0x13 - Throttle Level */ + u8 ppcm; /* 0x14 - Maximum P-state usable by OS */ + u32 pm1i; /* 0x15 - System Wake Source - PM1 Index */ + u8 rsvd1[7]; + + /* Device Config */ + u8 s5u0; /* 0x20 - Enable USB0 in S5 */ + u8 s5u1; /* 0x21 - Enable USB1 in S5 */ + u8 s3u0; /* 0x22 - Enable USB0 in S3 */ + u8 s3u1; /* 0x23 - Enable USB1 in S3 */ + u8 tact; /* 0x24 - Thermal Active trip point */ + u8 tpsv; /* 0x25 - Thermal Passive trip point */ + u8 tcrt; /* 0x26 - Thermal Critical trip point */ + u8 dpte; /* 0x27 - Enable DPTF */ + u8 rsvd2[8]; + + /* Base Addresses */ + u32 cmem; /* 0x30 - CBMEM TOC */ + u32 tolm; /* 0x34 - Top of Low Memory */ + u32 cbmc; /* 0x38 - coreboot memconsole */ + u8 rsvd3[196]; + + /* ChromeOS specific (0x100-0xfff) */ + chromeos_acpi_t chromeos; + + /* LPSS (0x1000) */ + device_nvs_t dev; +} __attribute__((packed)) global_nvs_t; + +#ifdef __SMM__ +/* Used in SMM to find the ACPI GNVS address */ +global_nvs_t *smm_get_gnvs(void); +#endif + +#endif /* _BRASWELL_NVS_H_ */ diff --git a/src/soc/intel/braswell/include/soc/pattrs.h b/src/soc/intel/braswell/include/soc/pattrs.h new file mode 100644 index 0000000..64d11a3 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pattrs.h @@ -0,0 +1,64 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_PATTRS_H_ +#define _BRASWELL_PATTRS_H_ + +#include <stdint.h> +#include <cpu/x86/msr.h> + +enum { + IACORE_MIN, + IACORE_LFM, + IACORE_MAX, + IACORE_TURBO, + IACORE_END +}; + +/* + * The pattrs structure is a common place to stash pertinent information + * about the processor or platform. Instead of going to the source (msrs, cpuid) + * every time an attribute is needed use the pattrs structure. + */ +struct pattrs { + msr_t platform_id; + msr_t platform_info; + int iacore_ratios[IACORE_END]; + int iacore_vids[IACORE_END]; + uint32_t cpuid; + int revid; + int stepping; + const void *microcode_patch; + int address_bits; + int num_cpus; + unsigned bclk_khz; +}; + +/* + * This is just to hide the abstraction w/o relying on how the underlying + * storage is allocated. + */ +extern struct pattrs __global_pattrs; +static inline const struct pattrs *pattrs_get(void) +{ + return &__global_pattrs; +} + +#endif /* _BRASWELL_PATTRS_H_ */ diff --git a/src/soc/intel/braswell/include/soc/pci_devs.h b/src/soc/intel/braswell/include/soc/pci_devs.h new file mode 100644 index 0000000..ff6582e --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pci_devs.h @@ -0,0 +1,154 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_PCI_DEVS_H_ +#define _BRASWELL_PCI_DEVS_H_ + +/* All these devices live on bus 0 with the associated device and function */ + +/* SoC transaction router */ +#define SOC_DEV 0x0 +#define SOC_FUNC 0 +# define SOC_DEVID 0x2280 + +/* Graphics and Display */ +#define GFX_DEV 0x2 +#define GFX_FUNC 0 +# define GFX_DEVID 0x22b1 + +/* MMC Port */ +#define MMC_DEV 0x10 +#define MMC_FUNC 0 +# define MMC_DEVID 0x2294 + +/* SDIO Port */ +#define SDIO_DEV 0x11 +#define SDIO_FUNC 0 +# define SDIO_DEVID 0x2295 + +/* SD Port */ +#define SD_DEV 0x12 +#define SD_FUNC 0 +# define SD_DEVID 0x2296 + +/* SATA */ +#define SATA_DEV 0x13 +#define SATA_FUNC 0 +#define AHCI1_DEVID 0x22a3 + +/* xHCI */ +#define XHCI_DEV 0x14 +#define XHCI_FUNC 0 +#define XHCI_DEVID 0x22b5 + +/* LPE Audio */ +#define LPE_DEV 0x15 +#define LPE_FUNC 0 +# define LPE_DEVID 0x22a8 + +/* Serial IO 1 */ +#define SIO1_DEV 0x18 +# define SIO_DMA1_DEV SIO1_DEV +# define SIO_DMA1_FUNC 0 +# define SIO_DMA1_DEVID 0x22c0 +# define I2C1_DEV SIO1_DEV +# define I2C1_FUNC 1 +# define I2C1_DEVID 0x22c1 +# define I2C2_DEV SIO1_DEV +# define I2C2_FUNC 2 +# define I2C2_DEVID 0x22c2 +# define I2C3_DEV SIO1_DEV +# define I2C3_FUNC 3 +# define I2C3_DEVID 0x22c3 +# define I2C4_DEV SIO1_DEV +# define I2C4_FUNC 4 +# define I2C4_DEVID 0x22c4 +# define I2C5_DEV SIO1_DEV +# define I2C5_FUNC 5 +# define I2C5_DEVID 0x22c5 +# define I2C6_DEV SIO1_DEV +# define I2C6_FUNC 6 +# define I2C6_DEVID 0x22c6 +# define I2C7_DEV SIO1_DEV +# define I2C7_FUNC 7 +# define I2C7_DEVID 0x22c7 + +/* Trusted Execution Engine */ +#define TXE_DEV 0x1a +#define TXE_FUNC 0 +# define TXE_DEVID 0x2298 + +/* HD Audio */ +#define HDA_DEV 0x1b +#define HDA_FUNC 0 +# define HDA_DEVID 0x2284 + +/* PCIe Ports */ +#define PCIE_DEV 0x1c +# define PCIE_PORT1_DEV PCIE_DEV +# define PCIE_PORT1_FUNC 0 +# define PCIE_PORT1_DEVID 0x22c8 +# define PCIE_PORT2_DEV PCIE_DEV +# define PCIE_PORT2_FUNC 1 +# define PCIE_PORT2_DEVID 0x22ca +# define PCIE_PORT3_DEV PCIE_DEV +# define PCIE_PORT3_FUNC 2 +# define PCIE_PORT3_DEVID 0x22cc +# define PCIE_PORT4_DEV PCIE_DEV +# define PCIE_PORT4_FUNC 3 +# define PCIE_PORT4_DEVID 0x22ce +/* Total number of ROOT PORTS */ +#define MAX_ROOT_PORTS_BSW 4 + +/* Serial IO 2 */ +#define SIO2_DEV 0x1e +# define SIO_DMA2_DEV SIO2_DEV +# define SIO_DMA2_FUNC 0 +# define SIO_DMA2_DEVID 0x2286 +# define PWM1_DEV SIO2_DEV +# define PWM1_FUNC 1 +# define PWM1_DEVID 0x2288 +# define PWM2_DEV SIO2_DEV +# define PWM2_FUNC 2 +# define PWM2_DEVID 0x2289 +# define HSUART1_DEV SIO2_DEV +# define HSUART1_FUNC 3 +# define HSUART1_DEVID 0x228a +# define HSUART2_DEV SIO2_DEV +# define HSUART2_FUNC 4 +# define HSUART2_DEVID 0x228c +# define SPI_DEV SIO2_DEV +# define SPI_FUNC 5 +# define SPI_DEVID 0x228e + +/* Platform Controller Unit */ +#define PCU_DEV 0x1f +# define LPC_DEV PCU_DEV +# define LPC_FUNC 0 +# define LPC_DEVID 0x229c +# define SMBUS_DEV PCU_DEV +# define SMBUS_FUNC 3 +# define SMBUS_DEVID 0x0f12 + +/* PCH SCC Device Modes */ +#define PCH_DISABLED 0 +#define PCH_PCI_MODE 1 +#define PCH_ACPI_MODE 2 +#endif /* _BRASWELL_PCI_DEVS_H_ */ diff --git a/src/soc/intel/braswell/include/soc/pcie.h b/src/soc/intel/braswell/include/soc/pcie.h new file mode 100644 index 0000000..b67bc5d --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pcie.h @@ -0,0 +1,103 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_PCIE_H_ +#define _BRASWELL_PCIE_H_ + +/* PCIe root port config space registers. */ +#define XCAP 0x40 +# define SI (1 << 24) +#define DCAP 0x44 +# define MPS_MASK 0x7 +#define DCTL_DSTS 0x48 +# define URE (1 << 3) +# define FEE (1 << 2) +# define NFE (1 << 1) +# define CEE (1 << 0) +#define LCAP 0x4c +# define L1EXIT_SHIFT 15 +# define L1EXIT_MASK (0x7 << L1EXIT_SHIFT) +#define LCTL 0x50 +# define CCC (1 << 6) +# define RL (1 << 5) +# define LD (1 << 4) +#define LSTS 0x52 +#define SLCAP 0x54 +# define SLN_SHIFT 19 +# define SLS_SHIFT 15 +# define SLV_SHIFT 7 +# define HPC (1 << 6) +# define HPS (1 << 5) +#define SLCTL_SLSTS 0x58 +# define PDS (1 << 22) +#define DCAP2 0x64 +# define OBFFS (0x3 << 18) +# define LTRMS (1 << 11) +#define DSTS2 0x68 +# define OBFFEN (3 << 13) +# define LTRME (1 << 10) +# define CTD (1 << 4) +#define CHCFG 0xd0 +# define UPSD (1 << 24) +# define UNRS (1 << 15) +# define UPRS (1 << 14) +#define MPC2 0xd4 +# define IPF (1 << 11) +# define LSTP (1 << 6) +# define EOIFD (1 << 1) +#define MPC 0xd8 +# define CCEL_SHIFT 15 +# define CCEL_MASK (0x7 << CCEL_SHIFT) +#define RPPGEN 0xe0 +# define RPSCGEN (1 << 15) +# define LCLKREQEN (1 << 13) +# define BBCLKREQEN (1 << 12) +# define SRDLCGEN (1 << 11) +# define SRDBCGEN (1 << 10) +# define RPDLCGEN (1 << 9) +# define RPDBCGEN (1 << 8) +#define PWRCTL 0xe8 +# define RPL1SQPOL (1 << 1) +# define RPDTSQPOL (1 << 0) +#define PHYCTL2_IOSFBCTL 0xf4 +# define PLL_OFF_EN (1 << 8) +# define TDFT (3 << 14) +# define TXCFGCHWAIT (3 << 12) +# define SIID (3 << 26) +#define STRPFUSECFG 0xfc +# define LANECFG_SHIFT 14 +# define LANECFG_MASK (0x3 << LANECFG_SHIFT) +#define AERCH 0x100 +#define NFTS 0x314 +#define L0SC 0x318 +#define CFG2 0x320 +# define CSREN (1 << 22) +# define LATGC_SHIFT 6 +# define LATGC_MASK (0x7 << LATGC_SHIFT) +#define PCIEDBG 0x324 +# define SPCE (1 << 5) +#define PCIESTS1 0x328 +#define PCIEALC 0x338 +#define RTP 0x33c +#define PHYCTL4 0x408 +# define SQDIS (1 << 27) + + +#endif /* _BRASWELL_PCIE_H_ */ diff --git a/src/soc/intel/braswell/include/soc/pei_data.h b/src/soc/intel/braswell/include/soc/pei_data.h new file mode 100644 index 0000000..ab3f085 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pei_data.h @@ -0,0 +1,68 @@ +/* + * Broadwell UEFI PEI wrapper + * + * Copyright (C) 2014 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 GOOGLE INC 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. + */ + +#ifndef _PEI_DATA_H_ +#define _PEI_DATA_H_ + +#include <types.h> + +#define PEI_VERSION 22 + +#define ABI_X86 __attribute__((regparm(0))) + +typedef void ABI_X86(*tx_byte_func)(unsigned char byte); + +struct pei_data { + /* Chip settings */ + void *spd_data_ch0; + void *spd_data_ch1; +#if IS_ENABLED(CONFIG_GOP_SUPPORT) + void *vbt_data; +#endif + uint8_t spd_ch0_config; + uint8_t spd_ch1_config; + uint8_t sdcard_mode; + uint8_t emmc_mode; + uint8_t enable_azalia; + + /* System state information */ + int boot_mode; + + /* Fast boot and S3 resume MRC data */ + int saved_data_size; + const void *saved_data; + int disable_saved_data; + + /* New save data from MRC */ + int data_to_save_size; + void *data_to_save; +}; + +typedef struct pei_data PEI_DATA; + +#endif /* _PEI_DATA_H_ */ diff --git a/src/soc/intel/braswell/include/soc/pei_wrapper.h b/src/soc/intel/braswell/include/soc/pei_wrapper.h new file mode 100644 index 0000000..1455b95 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pei_wrapper.h @@ -0,0 +1,30 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BROADWELL_PEI_WRAPPER_H_ +#define _BROADWELL_PEI_WRAPPER_H_ + +#include <soc/pei_data.h> + +typedef int ABI_X86(*pei_wrapper_entry_t)(struct pei_data *pei_data); + +void broadwell_fill_pei_data(struct pei_data *pei_data); +void mainboard_fill_pei_data(struct pei_data *pei_data); + +#endif diff --git a/src/soc/intel/braswell/include/soc/pm.h b/src/soc/intel/braswell/include/soc/pm.h new file mode 100644 index 0000000..3d8a26a --- /dev/null +++ b/src/soc/intel/braswell/include/soc/pm.h @@ -0,0 +1,310 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_PM_H_ +#define _BRASWELL_PM_H_ + + +#define IOCOM1 0x3f8 + +/* Memory mapped IO registers behind PMC_BASE_ADDRESS */ +#define PRSTS 0x00 +# define PMC_WDT_STS (1 << 15) +# define SEC_GBLRST_STS (1 << 7) +# define SEC_WDT_STS (1 << 6) +# define WOL_OVR_WK_STS (1 << 5) +# define PMC_WAKE_STS (1 << 4) +#define PMC_CFG 0x08 +# define SPS (1 << 5) +# define NO_REBOOT (1 << 4) +# define SX_ENT_TO_EN (1 << 3) +# define TIMING_T581_SHIFT (0) +# define TIMING_T581_MASK (3 << TIMING_T581_SHIFT) +# define TIMING_T581_10uS (0 << TIMING_T581_SHIFT) +# define TIMING_T581_100uS (1 << TIMING_T581_SHIFT) +# define TIMING_T581_1mS (2 << TIMING_T581_SHIFT) +# define TIMING_T581_10mS (3 << TIMING_T581_SHIFT) +#define VLV_PM_STS 0x0c +# define PMC_MSG_FULL_STS (1 << 24) +# define PMC_MSG_4_FULL_STS (1 << 23) +# define PMC_MSG_3_FULL_STS (1 << 22) +# define PMC_MSG_2_FULL_STS (1 << 21) +# define PMC_MSG_1_FULL_STS (1 << 20) +# define CODE_REQ (1 << 8) +# define HPR_ENT_TO (1 << 2) +# define SX_ENT_TO (1 << 1) +#define GEN_PMCON1 0x20 +# define UART_EN (1 << 24) +# define DISB (1 << 23) +# define MEM_SR (1 << 21) +# define SRS (1 << 20) +# define CTS (1 << 19) +# define MS4V (1 << 18) +# define PWR_FLR (1 << 16) +# define PME_B0_S5_DIS (1 << 15) +# define SUS_PWR_FLR (1 << 14) +# define WOL_EN_OVRD (1 << 13) +# define DIS_SLP_X_STRCH_SUS_UP (1 << 12) +# define GEN_RST_STS (1 << 9) +# define RPS (1 << 2) +# define AFTERG3_EN (1 << 0) +#define GEN_PMCON2 0x24 +# define SLPSX_STR_POL_LOCK (1 << 18) +# define BIOS_PCI_EXP_EN (1 << 10) +# define PWRBTN_LVL (1 << 9) +# define SMI_LOCK (1 << 4) +#define ETR 0x48 +# define CF9LOCK (1 << 31) +# define LTR_DEF (1 << 22) +# define IGNORE_HPET (1 << 21) +# define CF9GR (1 << 20) +# define CWORWRE (1 << 18) +#define FUNC_DIS 0x34 +# define SIO_DMA2_DIS (1 << 0) +# define PWM1_DIS (1 << 1) +# define PWM2_DIS (1 << 2) +# define HSUART1_DIS (1 << 3) +# define HSUART2_DIS (1 << 4) +# define SPI_DIS (1 << 5) +# define SDIO_DIS (1 << 9) +# define SD_DIS (1 << 10) +# define MMC_DIS (1 << 11) +# define HDA_DIS (1 << 12) +# define LPE_DIS (1 << 13) +# define OTG_DIS (1 << 14) +# define XHCI_DIS (1 << 15) +# define SATA_DIS (1 << 17) +# define EHCI_DIS (1 << 18) +# define TXE_DIS (1 << 19) +# define PCIE_PORT1_DIS (1 << 20) +# define PCIE_PORT2_DIS (1 << 21) +# define PCIE_PORT3_DIS (1 << 22) +# define PCIE_PORT4_DIS (1 << 23) +# define SIO_DMA1_DIS (1 << 24) +# define I2C1_DIS (1 << 25) +# define I2C2_DIS (1 << 26) +# define I2C3_DIS (1 << 27) +# define I2C4_DIS (1 << 28) +# define I2C5_DIS (1 << 29) +# define I2C6_DIS (1 << 30) +# define I2C7_DIS (1 << 31) +#define FUNC_DIS2 0x38 +# define USH_SS_PHY_DIS (1 << 2) +# define OTG_SS_PHY_DIS (1 << 1) +# define SMBUS_DIS (1 << 0) +#define GPIO_ROUT 0x58 +# define ROUTE_MASK 3 +# define ROUTE_NONE 0 +# define ROUTE_SMI 1 +# define ROUTE_SCI 2 +#define PLT_CLK_CTL_0 0x60 +#define PLT_CLK_CTL_1 0x64 +#define PLT_CLK_CTL_2 0x68 +#define PLT_CLK_CTL_3 0x6c +#define PLT_CLK_CTL_4 0x70 +#define PLT_CLK_CTL_5 0x74 +# define CLK_FREQ_25MHZ (0x0 << 2) +# define CLK_FREQ_19P2MHZ (0x1 << 2) +# define CLK_CTL_D3_LPE (0x0 << 0) +# define CLK_CTL_ON (0x1 << 0) +# define CLK_CTL_OFF (0x2 << 0) +#define PME_STS 0xc0 +#define GPE_LEVEL_EDGE 0xc4 +# define GPE_EDGE 0 +# define GPE_LEVEL 1 +#define GPE_POLARITY 0xc8 +# define GPE_ACTIVE_HIGH 1 +# define GPE_ACTIVE_LOW 0 +#define LOCK 0xcc + +/* IO Mapped registers behind ACPI_BASE_ADDRESS */ +#define PM1_STS 0x00 +#define WAK_STS (1 << 15) +#define PCIEXPWAK_STS (1 << 14) +#define USB_STS (1 << 13) +#define PRBTNOR_STS (1 << 11) +#define RTC_STS (1 << 10) +#define PWRBTN_STS (1 << 8) +#define GBL_STS (1 << 5) +#define TMROF_STS (1 << 0) +#define PM1_EN 0x02 +#define PCIEXPWAK_DIS (1 << 14) +#define USB_WAKE_EN (1 << 13) +#define RTC_EN (1 << 10) +#define PWRBTN_EN (1 << 8) +#define GBL_EN (1 << 5) +#define TMROF_EN (1 << 0) +#define PM1_CNT 0x04 +#define SLP_EN (1 << 13) +#define SLP_TYP_SHIFT 10 +#define SLP_TYP (7 << SLP_TYP_SHIFT) +#define SLP_TYP_S0 0 +#define SLP_TYP_S1 1 +#define SLP_TYP_S3 5 +#define SLP_TYP_S4 6 +#define SLP_TYP_S5 7 +#define GBL_RLS (1 << 2) +#define BM_RLD (1 << 1) +#define SCI_EN (1 << 0) +#define PM1_TMR 0x08 +#define GPE0_STS 0x20 +#define CORE_GPIO_STS7 (1 << 31) +#define CORE_GPIO_STS6 (1 << 30) +#define CORE_GPIO_STS5 (1 << 29) +#define CORE_GPIO_STS4 (1 << 28) +#define CORE_GPIO_STS3 (1 << 27) +#define CORE_GPIO_STS2 (1 << 26) +#define CORE_GPIO_STS1 (1 << 25) +#define CORE_GPIO_STS0 (1 << 24) +#define SUS_GPIO_STS7 (1 << 23) +#define SUS_GPIO_STS6 (1 << 22) +#define SUS_GPIO_STS5 (1 << 21) +#define SUS_GPIO_STS4 (1 << 20) +#define SUS_GPIO_STS3 (1 << 19) +#define SUS_GPIO_STS2 (1 << 18) +#define SUS_GPIO_STS1 (1 << 17) +#define SUS_GPIO_STS0 (1 << 16) +#define PME_B0_STS (1 << 13) +#define BATLOW_STS (1 << 10) +#define PCI_EXP_STS (1 << 9) +#define PCIE_WAKE3_STS (1 << 8) +#define PCIE_WAKE2_STS (1 << 7) +#define PCIE_WAKE1_STS (1 << 6) +#define GUNIT_SCI_STS (1 << 5) +#define PUNIT_SCI_STS (1 << 4) +#define PCIE_WAKE0_STS (1 << 3) +#define SWGPE_STS (1 << 2) +#define HOT_PLUG_STS (1 << 1) +#define GPE0_EN 0x28 +#define CORE_GPIO_EN7 (1 << 31) +#define CORE_GPIO_EN6 (1 << 30) +#define CORE_GPIO_EN5 (1 << 29) +#define CORE_GPIO_EN4 (1 << 28) +#define CORE_GPIO_EN3 (1 << 27) +#define CORE_GPIO_EN2 (1 << 26) +#define CORE_GPIO_EN1 (1 << 25) +#define CORE_GPIO_EN0 (1 << 24) +#define SUS_GPIO_EN7_BIT 23 +#define SUS_GPIO_EN7 (1 << SUS_GPIO_EN7_BIT) +#define SUS_GPIO_EN6_BIT 22 +#define SUS_GPIO_EN6 (1 << SUS_GPIO_EN6_BIT) +#define SUS_GPIO_EN5_BIT 21 +#define SUS_GPIO_EN5 (1 << SUS_GPIO_EN5_BIT) +#define SUS_GPIO_EN4_BIT 20 +#define SUS_GPIO_EN4 (1 << SUS_GPIO_EN4_BIT) +#define SUS_GPIO_EN3_BIT 19 +#define SUS_GPIO_EN3 (1 << SUS_GPIO_EN3_BIT) +#define SUS_GPIO_EN2_BIT 18 +#define SUS_GPIO_EN2 (1 << SUS_GPIO_EN2_BIT) +#define SUS_GPIO_EN1_BIT 17 +#define SUS_GPIO_EN1 (1 << SUS_GPIO_EN1_BIT) +#define SUS_GPIO_EN0_BIT 16 +#define SUS_GPIO_EN0 (1 << SUS_GPIO_EN0_BIT) +#define PME_B0_EN (1 << 13) +#define BATLOW_EN (1 << 10) +#define PCI_EXP_EN (1 << 9) +#define PCIE_WAKE3_EN (1 << 8) +#define PCIE_WAKE2_EN (1 << 7) +#define PCIE_WAKE1_EN (1 << 6) +#define PCIE_WAKE0_EN (1 << 3) +#define SWGPE_EN (1 << 2) +#define HOT_PLUG_EN (1 << 1) +#define _ACPI_ENABLE_WAKE_SUS_GPIO(x) SUS_GPIO_EN##x##_BIT +#define ACPI_ENABLE_WAKE_SUS_GPIO(x) _ACPI_ENABLE_WAKE_SUS_GPIO(x) +#define SMI_EN 0x30 +#define INTEL_USB2_EN (1 << 18) /* Intel-Specific USB2 SMI logic */ +#define USB_EN (1 << 17) /* Legacy USB2 SMI logic */ +#define PERIODIC_EN (1 << 14) /* SMI on PERIODIC_STS in SMI_STS */ +#define TCO_EN (1 << 13) /* Enable TCO Logic (BIOSWE et al) */ +#define BIOS_RLS (1 << 7) /* asserts SCI on bit set */ +#define SWSMI_TMR_EN (1 << 6) /* start software smi timer on bit set */ +#define APMC_EN (1 << 5) /* Writes to APM_CNT cause SMI# */ +#define SLP_SMI_EN (1 << 4) /* Write to SLP_EN in PM1_CNT asserts SMI# */ +#define BIOS_EN (1 << 2) /* Assert SMI# on setting GBL_RLS bit */ +#define EOS (1 << 1) /* End of SMI (deassert SMI#) */ +#define GBL_SMI_EN (1 << 0) /* SMI# generation at all? */ +#define SMI_STS 0x34 +#define ALT_GPIO_SMI 0x38 +#define UPRWC 0x3c +# define UPRWC_WR_EN (1 << 1) /* USB Per-Port Registers Write Enable */ +#define GPE_CTRL 0x40 +#define PM2A_CNT_BLK 0x50 +#define TCO_RLD 0x60 +#define TCO_STS 0x64 +# define SECOND_TO_STS (1 << 17) +# define TCO_TIMEOUT (1 << 3) +#define TCO1_CNT 0x68 +# define TCO_LOCK (1 << 12) +# define TCO_TMR_HALT (1 << 11) +#define TCO_TMR 0x70 + +/* I/O ports */ +#define RST_CNT 0xcf9 +# define FULL_RST (1 << 3) +# define RST_CPU (1 << 2) +# define SYS_RST (1 << 1) + +/* Generic sleep state types */ +#define SLEEP_STATE_S0 0 +#define SLEEP_STATE_S3 3 +#define SLEEP_STATE_S5 5 + +#if !defined(__ASSEMBLER__) && !defined(__ACPI__) + +/* Track power state from reset to log events. */ +struct chipset_power_state { + uint16_t pm1_sts; + uint16_t pm1_en; + uint32_t pm1_cnt; + uint32_t gpe0_sts; + uint32_t gpe0_en; + uint32_t tco_sts; + uint32_t prsts; + uint32_t gen_pmcon1; + uint32_t gen_pmcon2; + int prev_sleep_state; +} __attribute__((packed)); + +/* Power Management Utility Functions. */ +uint16_t get_pmbase(void); +uint32_t clear_smi_status(void); +uint16_t clear_pm1_status(void); +uint32_t clear_tco_status(void); +uint32_t clear_gpe_status(void); +uint32_t clear_alt_status(void); +void clear_pmc_status(void); +void enable_smi(uint32_t mask); +void disable_smi(uint32_t mask); +void enable_pm1(uint16_t events); +void enable_pm1_control(uint32_t mask); +void disable_pm1_control(uint32_t mask); +void enable_gpe(uint32_t mask); +void disable_gpe(uint32_t mask); +void disable_all_gpe(void); + +#if IS_ENABLED(CONFIG_ELOG) +void southcluster_log_state(void); +#else +static inline void southcluster_log_state(void) {} +#endif + +#endif /* !defined(__ASSEMBLER__) && !defined(__ACPI__) */ + +#endif /* _BRASWELL_PM_H_ */ diff --git a/src/soc/intel/braswell/include/soc/ramstage.h b/src/soc/intel/braswell/include/soc/ramstage.h new file mode 100644 index 0000000..3c66f5e --- /dev/null +++ b/src/soc/intel/braswell/include/soc/ramstage.h @@ -0,0 +1,41 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_RAMSTAGE_H_ +#define _BRASWELL_RAMSTAGE_H_ + +#include <device/device.h> +#include <chip.h> + +/* + * The braswell_init_pre_device() function is called prior to device + * initialization, but it's after console and cbmem has been reinitialized. + */ +void braswell_init_pre_device(struct soc_intel_braswell_config *config); +void set_max_freq(void); +#if !defined(__SMM__) +void braswell_init_cpus(device_t dev); +void southcluster_enable_dev(device_t dev); +void scc_enable_acpi_mode(device_t dev, int iosf_reg, int nvs_index); +#endif + +extern struct pci_operations soc_pci_ops; + +#endif /* _BRASWELL_RAMSTAGE_H_ */ diff --git a/src/soc/intel/braswell/include/soc/romstage.h b/src/soc/intel/braswell/include/soc/romstage.h new file mode 100644 index 0000000..1b32278 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/romstage.h @@ -0,0 +1,44 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_ROMSTAGE_H_ +#define _BRASWELL_ROMSTAGE_H_ + +#include <stdint.h> +#include <arch/cpu.h> +#include <fsp_util.h> +#include <soc/pei_data.h> +#include <soc/pm.h> +#include <soc/intel/common/romstage.h> + +void gfx_init(void); +void tco_disable(void); +void punit_init(void); +int early_spi_read_wpsr(u8 *sr); +void mainboard_fill_spd_data(struct pei_data *pei_data); + +/* romstage_common.c functions */ +void program_base_addresses(void); +void spi_init(void); +void migrate_power_state(void); +struct chipset_power_state *fill_power_state(void); +int chipset_prev_sleep_state(struct chipset_power_state *ps); + +#endif /* _BRASWELL_ROMSTAGE_H_ */ diff --git a/src/soc/intel/braswell/include/soc/sata.h b/src/soc/intel/braswell/include/soc/sata.h new file mode 100644 index 0000000..96cd42c --- /dev/null +++ b/src/soc/intel/braswell/include/soc/sata.h @@ -0,0 +1,155 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_SATA_H_ +#define _BRASWELL_SATA_H_ + +#define SATA_PORT_SUPPORT 0x03 +#define SATA_PORT_MASK 0x3f + +/* PCI Configuration Space */ +#define SATA_PID 0x70 +#define SATA_PID_NEXT 0xff00 +#define SATA_PID_CID 0xff + +#define SATA_MAP 0x90 +#define SATA_MAP_SPD3 (1 << 11) +#define SATA_MAP_SPD2 (1 << 10) +#define SATA_MAP_SPD1 (1 << 9) +#define SATA_MAP_SPD0 (1 << 8) +#define SATA_MAP_SPD_MASK (SATA_MAP_SPD0 | SATA_MAP_SPD1 \ + | SATA_MAP_SPD2 | SATA_MAP_SPD3) +#define SATA_MAP_SMS_RAID 0x40 + +#define SATA_PCS 0x92 +#define SATA_PCS_ORM (1 << 15) +#define SATA_PCS_PORT5 (1 << 5) +#define SATA_PCS_PORT4 (1 << 4) +#define SATA_PCS_PORT3 (1 << 3) +#define SATA_PCS_PORT2 (1 << 2) +#define SATA_PCS_PORT1 (1 << 1) +#define SATA_PCS_PORT0 (1 << 0) +#define SATA_PCS_PORTS (SATA_PCS_PORT0 | SATA_PCS_PORT1 | SATA_PCS_PORT2 \ + | SATA_PCS_PORT3 | SATA_PCS_PORT4 | SATA_PCS_PORT5) + +#define SATA_TM 0x94 +#define SATA_TM_PCD5 (1 << 29) +#define SATA_TM_PCD4 (1 << 28) +#define SATA_TM_PCD3 (1 << 27) +#define SATA_TM_PCD2 (1 << 26) +#define SATA_TM_PCD1 (1 << 25) +#define SATA_TM_PCD0 (1 << 24) +#define SATA_TM_PCD_MASK (SATA_TM_PCD0 | SATA_TM_PCD1 | SATA_TM_PCD2 \ + | SATA_TM_PCD3 | SATA_TM_PCD4 | SATA_TM_PCD5) + +#define SATA_SIRI 0xa0 +#define SATA_SIRD 0xa4 + +/* Memory Mapped I/O Space */ +#define AHCI_GHC_CAP 0 +#define AHCI_GHC_CAP_S64A (1 << 31) +#define AHCI_GHC_CAP_SCQA (1 << 30) +#define AHCI_GHC_CAP_SSNTF (1 << 29) +#define AHCI_GHC_CAP_SMPS (1 << 28) +#define AHCI_GHC_CAP_SSS (1 << 27) +#define AHCI_GHC_CAP_SALP (1 << 26) +#define AHCI_GHC_CAP_SAL (1 << 25) +#define AHCI_GHC_CAP_SCLO (1 << 24) +#define AHCI_GHC_CAP_ISS 0x00f00000 +#define AHCI_GHC_CAP_ISS_GEN1 (1 << 20) +#define AHCI_GHC_CAP_ISS_GEN2 (2 << 20) +#define AHCI_GHC_CAP_ISS_GEN3 (3 << 20) +#define AHCI_GHC_CAP_SNZO (1 << 19) +#define AHCI_GHC_CAP_SAM (1 << 18) +#define AHCI_GHC_CAP_SMP (1 << 17) +#define AHCI_GHC_CAP_FBSS (1 << 16) +#define AHCI_GHC_CAP_PMD (1 << 15) +#define AHCI_GHC_CAP_SSC (1 << 14) +#define AHCI_GHC_CAP_PSC (1 << 13) +#define AHCI_GHC_CAP_NCS 0x00000f00 +#define AHCI_GHC_CAP_CCCS (1 << 7) +#define AHCI_GHC_CAP_EMS (1 << 6) +#define AHCI_GHC_CAP_SXS (1 << 5) +#define AHCI_GHC_CAP_NP 0x0000001f + +#define AHCI_HBA_CTRL 4 +#define AHCI_HBA_CTRL_AE (1 << 31) +#define AHCI_HBA_CTRL_MRSM (1 << 2) +#define AHCI_HBA_CTRL_IE (1 << 1) +#define AHCI_HBA_CTRL_HR (1 << 0) + +#define AHCI_GHC_PI 0x000c +#define AHCI_GHC_CAP2 0x0024 +#define AHCI_GHC_CAP2_DESO (1 << 5) +#define AHCI_GHC_CAP2_SADM (1 << 4) +#define AHCI_GHC_CAP2_SDS (1 << 3) +#define AHCI_GHC_CAP2_APST (1 << 2) +#define AHCI_GHC_CAP2_BOH (1 << 0) + +#define AHCI_VSP 0x00a0 +#define AHCI_VSP_SFMS (1 << 6) +#define AHCI_VSP_PFS (1 << 5) +#define AHCI_VSP_PT (1 << 4) +#define AHCI_VSP_SRPIR (1 << 3) + +#define AHCI_SFM 0xc8 +#define AHCI_SFM_OROM_UI 0x0c00 +#define AHCI_SFM_OROM_UI_2SEC 0 +#define AHCI_SFM_OROM_UI_4SEC (1 << 10) +#define AHCI_SFM_OROM_UI_6SEC (2 << 10) +#define AHCI_SFM_OROM_UI_8SEC (3 << 10) +#define AHCI_SFM_SRT (1 << 9) +#define AHCI_SFM_RRT_ESATA (1 << 8) +#define AHCI_SFM_LED (1 << 7) +#define AHCI_SFM_HDDUNLOCK (1 << 6) +#define AHCI_SFM_OROM_UI_BANNER (1 << 5) +#define AHCI_SFM_RRT (1 << 4) +#define AHCI_SFM_R5 (1 << 3) +#define AHCI_SFM_R10 (1 << 2) +#define AHCI_SFM_R1 (1 << 1) +#define AHCI_SFM_R0 (1 << 0) + +#define AHCI_PXCMD0 0x0118 +#define AHCI_PXCMD1 0x0198 + +#define AHCI_PXCMD_ICC 0xf0000000 +#define AHCI_PXCMD_ASP (1 << 27) +#define AHCI_PXCMD_ALPE (1 << 26) +#define AHCI_PXCMD_DLAE (1 << 25) +#define AHCI_PXCMD_ATAPI (1 << 24) +#define AHCI_PXCMD_APSTE (1 << 23) +#define AHCI_PXCMD_FBSCP (1 << 22) +#define AHCI_PXCMD_ESP (1 << 21) +#define AHCI_PXCMD_CPD (1 << 20) +#define AHCI_PXCMD_MPSP (1 << 19) +#define AHCI_PXCMD_HPCP (1 << 18) +#define AHCI_PXCMD_PMA (1 << 17) +#define AHCI_PXCMD_CR (1 << 15) +#define AHCI_PXCMD_FR (1 << 14) +#define AHCI_PXCMD_MPSS (1 << 13) +#define AHCI_PXCMD_CCS 0x00001f00 +#define AHCI_PXCMD_PSP (1 << 6) +#define AHCI_PXCMD_FRE (1 << 4) +#define AHCI_PXCMD_CLO (1 << 3) +#define AHCI_PXCMD_POD (1 << 2) +#define AHCI_PXCMD_SUD (1 << 1) +#define AHCI_PXCMD_ST (1 << 0) + +#endif /* _BRASWELL_SATA_H_ */ diff --git a/src/soc/intel/braswell/include/soc/smm.h b/src/soc/intel/braswell/include/soc/smm.h new file mode 100644 index 0000000..b05579c --- /dev/null +++ b/src/soc/intel/braswell/include/soc/smm.h @@ -0,0 +1,37 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_SMM_H_ +#define _BRASWELL_SMM_H_ + +#if !defined(__PRE_RAM__) && !defined(__SMM___) +#include <stdint.h> +void southcluster_smm_clear_state(void); +void southcluster_smm_enable_smi(void); +void southcluster_smm_save_param(int param, uint32_t data); +#endif + +enum { + SMM_SAVE_PARAM_GPIO_ROUTE = 0, + SMM_SAVE_PARAM_PCIE_WAKE_ENABLE, + SMM_SAVE_PARAM_COUNT +}; + +#endif /* _BRASWELL_SMM_H_ */ diff --git a/src/soc/intel/braswell/include/soc/spi.h b/src/soc/intel/braswell/include/soc/spi.h new file mode 100644 index 0000000..a2c126e --- /dev/null +++ b/src/soc/intel/braswell/include/soc/spi.h @@ -0,0 +1,76 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_SPI_H_ +#define _BRASWELL_SPI_H_ + +#include <stdint.h> + +/* These registers live behind SPI_BASE_ADDRESS. */ +#define HSFSTS 0x04 +#define FDATA0 0x10 +# define FLOCKDN (0x1 << 15) +#define SSFS 0x90 +# define CYCLE_DONE_STATUS (0x1 << 2) +# define FLASH_CYCLE_ERROR (0x1 << 3) +#define SSFC 0x91 +# define SPI_CYCLE_GO (0x1 << 1) +# define DATA_CYCLE (0x1 << 14) +#define PREOP 0x94 +#define OPTYPE 0x96 +#define OPMENU0 0x98 +#define OPMENU1 0x9c +#define LVSCC 0xc4 +# define VCL (0x1 << 23) +# define EO(x) (((x) & 0xff) << 8) +# define WG_1_BYTE (0x0 << 2) +# define WG_64_BYTE (0x1 << 2) +# define BES_256_BYTE (0x0 << 0) +# define BES_4_KB (0x1 << 0) +# define BES_8_KB (0x2 << 0) +# define BES_64_KB (0x3 << 0) +#define UVSCC 0xc8 +#define SCS 0xf8 +# define SMIWPEN (0x1 << 7) +#define BCR 0xfc +# define EISS (0x1 << 5) +# define SRC_MASK (0x3 << 2) +# define SRC_CACHE_NO_PREFETCH (0x0 << 2) +# define SRC_NO_CACHE_NO_PREFETCH (0x1 << 2) +# define SRC_CACHE_PREFETCH (0x2 << 2) +# define BCR_LE (0x1 << 1) +# define BCR_WPD (0x1 << 0) + +/* + * SPI lockdown configuration. + */ +struct spi_config { + uint16_t preop; + uint16_t optype; + uint32_t opmenu[2]; + uint32_t lvscc; + uint32_t uvscc; +}; + +/* Return 0 on success < 0 on failure. */ +int mainboard_get_spi_config(struct spi_config *cfg); + +#endif /* _BRASWELL_SPI_H_ */ + diff --git a/src/soc/intel/braswell/include/soc/xhci.h b/src/soc/intel/braswell/include/soc/xhci.h new file mode 100644 index 0000000..d5be4b3 --- /dev/null +++ b/src/soc/intel/braswell/include/soc/xhci.h @@ -0,0 +1,51 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _BRASWELL_XHCI_H +#define _BRASWELL_XHCI_H + +/* XHCI PCI Registers */ +#define XHCI_PWR_CTL_STS 0x74 +#define XHCI_USB2PR 0xd0 +#define XHCI_USB2PRM 0xd4 +#define XHCI_USB3PR 0xd8 +#define XHCI_USB3PRM 0xdc +#define XHCI_USB2PDO 0xe4 +#define XHCI_USB3PDO 0xe8 + +/* XHCI Memory Registers */ +#define XHCI_USB3_PORTSC(port) (0x4e0 + (port * 0x10)) +# define XHCI_USB3_PORTSC_CHST (0x7f << 17) +# define XHCI_USB3_PORTSC_WCE (1 << 25) /* Wake on Connect */ +# define XHCI_USB3_PORTSC_WDE (1 << 26) /* Wake on Disconnect */ +# define XHCI_USB3_PORTSC_WOE (1 << 27) /* Wake on Overcurrent */ +# define XHCI_USB3_PORTSC_WRC (1 << 19) /* Warm Reset Complete */ +# define XHCI_USB3_PORTSC_LWS (1 << 16) /* Link Write Strobe */ +# define XHCI_USB3_PORTSC_PED (1 << 1) /* Port Enabled/Disabled */ +# define XHCI_USB3_PORTSC_WPR (1 << 31) /* Warm Port Reset */ +# define XHCI_USB3_PORTSC_PLS (0xf << 5) /* Port Link State */ +# define XHCI_PLSR_DISABLED (4 << 5) /* Port is disabled */ +# define XHCI_PLSR_RXDETECT (5 << 5) /* Port is disconnected */ +# define XHCI_PLSR_POLLING (7 << 5) /* Port is polling */ +# define XHCI_PLSW_ENABLE (5 << 5) /* Enable port */ + +#define XHCI_RESET_TIMEOUT 100000 /* 100ms */ + +#endif /* _BRASWELL_XHCI_H */ diff --git a/src/soc/intel/braswell/iosf.c b/src/soc/intel/braswell/iosf.c new file mode 100644 index 0000000..b4f1c64 --- /dev/null +++ b/src/soc/intel/braswell/iosf.c @@ -0,0 +1,196 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <console/console.h> +#include <soc/iosf.h> + +#if !defined(__PRE_RAM__) +#define IOSF_PCI_BASE (CONFIG_MMCONF_BASE_ADDRESS + (IOSF_PCI_DEV << 12)) + +static inline void write_iosf_reg(int reg, uint32_t value) +{ + write32((void *)(IOSF_PCI_BASE + reg), value); +} +static inline uint32_t read_iosf_reg(int reg) +{ + return read32((void *)(IOSF_PCI_BASE + reg)); +} +#else +static inline void write_iosf_reg(int reg, uint32_t value) +{ + pci_write_config32(IOSF_PCI_DEV, reg, value); +} +static inline uint32_t read_iosf_reg(int reg) +{ + return pci_read_config32(IOSF_PCI_DEV, reg); +} +#endif + +/* Common sequences for all the port accesses. */ +static uint32_t iosf_read_port(uint32_t cr, int reg) +{ + cr |= IOSF_REG(reg) | IOSF_BYTE_EN; + write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); + write_iosf_reg(MCR_REG, cr); + return read_iosf_reg(MDR_REG); +} + +static void iosf_write_port(uint32_t cr, int reg, uint32_t val) +{ + cr |= IOSF_REG(reg) | IOSF_BYTE_EN; + write_iosf_reg(MDR_REG, val); + write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg)); + write_iosf_reg(MCR_REG, cr); +} + +#define IOSF_READ(port) \ + (IOSF_OPCODE(IOSF_OP_READ_##port) | IOSF_PORT(IOSF_PORT_##port)) +#define IOSF_WRITE(port) \ + (IOSF_OPCODE(IOSF_OP_WRITE_##port) | IOSF_PORT(IOSF_PORT_##port)) + +uint32_t iosf_bunit_read(int reg) +{ + return iosf_read_port(IOSF_READ(BUNIT), reg); +} + +void iosf_bunit_write(int reg, uint32_t val) +{ + iosf_write_port(IOSF_WRITE(BUNIT), reg, val); +} + +uint32_t iosf_punit_read(int reg) +{ + return iosf_read_port(IOSF_READ(PMC), reg); +} + +void iosf_punit_write(int reg, uint32_t val) +{ + iosf_write_port(IOSF_WRITE(PMC), reg, val); +} + +uint32_t iosf_score_read(int reg) +{ + return iosf_read_port(IOSF_READ(SCORE), reg); +} + +void iosf_score_write(int reg, uint32_t val) +{ + iosf_write_port(IOSF_WRITE(SCORE), reg, val); +} + +uint32_t iosf_lpss_read(int reg) +{ + return iosf_read_port(IOSF_READ(LPSS), reg); +} + +void iosf_lpss_write(int reg, uint32_t val) +{ + iosf_write_port(IOSF_WRITE(LPSS), reg, val); +} + +uint32_t iosf_port58_read(int reg) +{ + return iosf_read_port(IOSF_READ(0x58), reg); +} + +void iosf_port58_write(int reg, uint32_t val) +{ + iosf_write_port(IOSF_WRITE(0x58), reg, val); +} + +uint32_t iosf_scc_read(int reg) +{ + return iosf_read_port(IOSF_READ(SCC), reg); +} + +void iosf_scc_write(int reg, uint32_t val) +{ + return iosf_write_port(IOSF_WRITE(SCC), reg, val); +} + + +#ifndef __PRE_RAM__ +uint64_t reg_script_read_iosf(struct reg_script_context *ctx) +{ + const struct reg_script *step = ctx->step; + + /* Process the request */ + switch (step->id) { + case IOSF_PORT_BUNIT: + return iosf_bunit_read(step->reg); + case IOSF_PORT_SCORE: + return iosf_score_read(step->reg); + case IOSF_PORT_LPSS: + return iosf_lpss_read(step->reg); + case IOSF_PORT_0x58: + return iosf_port58_read(step->reg); + case IOSF_PORT_SCC: + return iosf_scc_read(step->reg); + default: + printk(BIOS_DEBUG, "No read support for IOSF port 0x%x.\n", + step->id); + break; + } + return 0; +} + +void reg_script_write_iosf(struct reg_script_context *ctx) +{ + const struct reg_script *step = ctx->step; + + /* Process the request */ + switch (step->id) { + case IOSF_PORT_BUNIT: + iosf_bunit_write(step->reg, step->value); + break; + case IOSF_PORT_SCORE: + iosf_score_write(step->reg, step->value); + break; + case IOSF_PORT_LPSS: + iosf_lpss_write(step->reg, step->value); + break; + case IOSF_PORT_0x58: + iosf_port58_write(step->reg, step->value); + break; + case IOSF_PORT_SCC: + iosf_scc_write(step->reg, step->value); + break; + + default: + printk(BIOS_DEBUG, "No write support for IOSF port 0x%x.\n", + step->id); + break; + } +} + +const struct reg_script_bus_entry reg_script_bus_table[] = { + {REG_SCRIPT_TYPE_IOSF, reg_script_read_iosf, reg_script_write_iosf} +}; + +const struct reg_script_bus_entry *platform_bus_table(size_t *table_entries) +{ + /* Return the table size and address */ + *table_entries = sizeof(reg_script_bus_table) + / sizeof(reg_script_bus_table[0]); + return ®_script_bus_table[0]; +} + +#endif /* __PRE_RAM */ diff --git a/src/soc/intel/braswell/lpe.c b/src/soc/intel/braswell/lpe.c new file mode 100644 index 0000000..1f0b51e --- /dev/null +++ b/src/soc/intel/braswell/lpe.c @@ -0,0 +1,195 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <cbmem.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> + +#include <soc/iomap.h> +#include <soc/iosf.h> +#include <soc/lpc.h> +#include <soc/nvs.h> +#include <soc/pattrs.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <soc/ramstage.h> +#include "chip.h" + + +/* + * The LPE audio devices needs 1MiB of memory reserved aligned to a 512MiB + * address. Just take 1MiB @ 512MiB. + */ +#define FIRMWARE_PHYS_BASE (512 << 20) +#define FIRMWARE_PHYS_LENGTH (1 << 20) +#define FIRMWARE_PCI_REG_BASE 0xa8 +#define FIRMWARE_PCI_REG_LENGTH 0xac +#define FIRMWARE_REG_BASE_C0 0x144000 +#define FIRMWARE_REG_LENGTH_C0 (FIRMWARE_REG_BASE_C0 + 4) + +static void assign_device_nvs(device_t dev, u32 *field, unsigned index) +{ + struct resource *res; + + res = find_resource(dev, index); + if (res) + *field = res->base; +} + +static void lpe_enable_acpi_mode(device_t dev) +{ + static const struct reg_script ops[] = { + /* Disable PCI interrupt, enable Memory and Bus Master */ + REG_PCI_OR32(PCI_COMMAND, + PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER + | PCI_COMMAND_INT_DISABLE), + /* Enable ACPI mode */ + REG_IOSF_OR(IOSF_PORT_0x58, LPE_PCICFGCTR1, + LPE_PCICFGCTR1_PCI_CFG_DIS | + LPE_PCICFGCTR1_ACPI_INT_EN), + REG_SCRIPT_END + }; + global_nvs_t *gnvs; + + /* Find ACPI NVS to update BARs */ + gnvs = cbmem_find(CBMEM_ID_ACPI_GNVS); + if (!gnvs) { + printk(BIOS_ERR, "Unable to locate Global NVS\n"); + return; + } + + /* Save BAR0, BAR1, and firmware base to ACPI NVS */ + assign_device_nvs(dev, &gnvs->dev.lpe_bar0, PCI_BASE_ADDRESS_0); + /* LPE seems does not have BAR at PCI_BASE_ADDRESS_1 so disable it. */ + /* assign_device_nvs(dev, &gnvs->dev.lpe_bar1, PCI_BASE_ADDRESS_1); */ + assign_device_nvs(dev, &gnvs->dev.lpe_fw, FIRMWARE_PCI_REG_BASE); + + /* Device is enabled in ACPI mode */ + gnvs->dev.lpe_en = 1; + + /* Put device in ACPI mode */ + reg_script_run_on_dev(dev, ops); +} + +static void setup_codec_clock(device_t dev) +{ + uint32_t reg; + u32 *clk_reg; + struct soc_intel_braswell_config *config; + const char *freq_str; + + config = dev->chip_info; + switch (config->lpe_codec_clk_freq) { + case 19: + freq_str = "19.2"; + reg = CLK_FREQ_19P2MHZ; + break; + case 25: + freq_str = "25"; + reg = CLK_FREQ_25MHZ; + break; + default: + printk(BIOS_DEBUG, "LPE codec clock not required.\n"); + return; + } + + /* Default to always running. */ + reg |= CLK_CTL_ON; + + if (config->lpe_codec_clk_num < 0 || config->lpe_codec_clk_num > 5) { + printk(BIOS_DEBUG, "Invalid LPE codec clock number.\n"); + return; + } + + printk(BIOS_DEBUG, "LPE Audio codec clock set to %sMHz.\n", freq_str); + + clk_reg = (u32 *) (PMC_BASE_ADDRESS + PLT_CLK_CTL_0); + clk_reg += config->lpe_codec_clk_num; + + write32(clk_reg, (read32(clk_reg) & ~0x7) | reg); +} + +static void lpe_stash_firmware_info(device_t dev) +{ + struct resource *res; + struct resource *mmio; + + res = find_resource(dev, FIRMWARE_PCI_REG_BASE); + if (res == NULL) { + printk(BIOS_DEBUG, "LPE Firmware memory not found.\n"); + return; + } + printk(BIOS_DEBUG, "LPE FW Resource: 0x%08x\n", (u32) res->base); + + /* Continue using old way of informing firmware address / size. */ + pci_write_config32(dev, FIRMWARE_PCI_REG_BASE, res->base); + pci_write_config32(dev, FIRMWARE_PCI_REG_LENGTH, res->size); + + /* Also put the address in MMIO space like on C0 BTM */ + mmio = find_resource(dev, PCI_BASE_ADDRESS_0); + write32((void *)(uintptr_t)(mmio->base + FIRMWARE_REG_BASE_C0), \ + res->base); + write32((void *)(uintptr_t)(mmio->base + FIRMWARE_REG_LENGTH_C0), \ + res->size); +} + + +static void lpe_init(device_t dev) +{ + struct soc_intel_braswell_config *config = dev->chip_info; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + lpe_stash_firmware_info(dev); + setup_codec_clock(dev); + + if (config->lpe_acpi_mode) + lpe_enable_acpi_mode(dev); +} + +static void lpe_read_resources(device_t dev) +{ + pci_dev_read_resources(dev); + + reserved_ram_resource(dev, FIRMWARE_PCI_REG_BASE, + FIRMWARE_PHYS_BASE >> 10, + FIRMWARE_PHYS_LENGTH >> 10); +} + +static const struct device_operations device_ops = { + .read_resources = lpe_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = lpe_init, + .enable = NULL, + .scan_bus = NULL, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = LPE_DEVID, +}; diff --git a/src/soc/intel/braswell/lpss.c b/src/soc/intel/braswell/lpss.c new file mode 100644 index 0000000..2adbf18 --- /dev/null +++ b/src/soc/intel/braswell/lpss.c @@ -0,0 +1,203 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdint.h> +#include <arch/io.h> +#include <cbmem.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> + +#include <soc/iosf.h> +#include <soc/nvs.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> + +#include "chip.h" + +static void dev_enable_acpi_mode(device_t dev, int iosf_reg, int nvs_index) +{ + struct reg_script ops[] = { + /* Disable PCI interrupt, enable Memory and Bus Master */ + REG_PCI_OR32(PCI_COMMAND, + PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | (1<<10)), + /* Enable ACPI mode */ + REG_IOSF_OR(IOSF_PORT_LPSS, iosf_reg, + LPSS_CTL_PCI_CFG_DIS | LPSS_CTL_ACPI_INT_EN), + REG_SCRIPT_END + }; + struct resource *bar; + global_nvs_t *gnvs; + + /* Find ACPI NVS to update BARs */ + gnvs = cbmem_find(CBMEM_ID_ACPI_GNVS); + if (!gnvs) { + printk(BIOS_ERR, "Unable to locate Global NVS\n"); + return; + } + + /* Save BAR0 and BAR1 to ACPI NVS */ + bar = find_resource(dev, PCI_BASE_ADDRESS_0); + if (bar) + gnvs->dev.lpss_bar0[nvs_index] = (u32)bar->base; + + bar = find_resource(dev, PCI_BASE_ADDRESS_1); + if (bar) + gnvs->dev.lpss_bar1[nvs_index] = (u32)bar->base; + + /* Device is enabled in ACPI mode */ + gnvs->dev.lpss_en[nvs_index] = 1; + + /* Put device in ACPI mode */ + reg_script_run_on_dev(dev, ops); +} + +static void dev_ctl_reg(device_t dev, int *iosf_reg, int *nvs_index) +{ + *iosf_reg = -1; + *nvs_index = -1; +#define SET_IOSF_REG(name_) \ + case PCI_DEVFN(name_ ## _DEV, name_ ## _FUNC): \ + do { \ + *iosf_reg = LPSS_ ## name_ ## _CTL; \ + *nvs_index = LPSS_NVS_ ## name_; \ + } while (0) + + switch (dev->path.pci.devfn) { + SET_IOSF_REG(SIO_DMA1); + break; + SET_IOSF_REG(I2C1); + break; + SET_IOSF_REG(I2C2); + break; + SET_IOSF_REG(I2C3); + break; + SET_IOSF_REG(I2C4); + break; + SET_IOSF_REG(I2C5); + break; + SET_IOSF_REG(I2C6); + break; + SET_IOSF_REG(I2C7); + break; + SET_IOSF_REG(SIO_DMA2); + break; + SET_IOSF_REG(PWM1); + break; + SET_IOSF_REG(PWM2); + break; + SET_IOSF_REG(HSUART1); + break; + SET_IOSF_REG(HSUART2); + break; + SET_IOSF_REG(SPI); + break; + } +} + +static void i2c_disable_resets(device_t dev) +{ + /* Release the I2C devices from reset. */ + static const struct reg_script ops[] = { + REG_RES_WRITE32(PCI_BASE_ADDRESS_0, 0x804, 0x3), + REG_SCRIPT_END, + }; + +#define CASE_I2C(name_) \ + case PCI_DEVFN(name_ ## _DEV, name_ ## _FUNC) + + switch (dev->path.pci.devfn) { + CASE_I2C(I2C1) : + CASE_I2C(I2C2) : + CASE_I2C(I2C3) : + CASE_I2C(I2C4) : + CASE_I2C(I2C5) : + CASE_I2C(I2C6) : + CASE_I2C(I2C7) : + printk(BIOS_DEBUG, "Releasing I2C device from reset.\n"); + reg_script_run_on_dev(dev, ops); + break; + default: + return; + } +} + +static void lpss_init(device_t dev) +{ + struct soc_intel_braswell_config *config = dev->chip_info; + int iosf_reg, nvs_index; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + printk(BIOS_SPEW, "%s - %s\n", + get_pci_class_name(dev), + get_pci_subclass_name(dev)); + + dev_ctl_reg(dev, &iosf_reg, &nvs_index); + + if (iosf_reg < 0) { + int slot = PCI_SLOT(dev->path.pci.devfn); + int func = PCI_FUNC(dev->path.pci.devfn); + printk(BIOS_DEBUG, "Could not find iosf_reg for %02x.%01x\n", + slot, func); + return; + } + + i2c_disable_resets(dev); + + if (config->lpss_acpi_mode) + dev_enable_acpi_mode(dev, iosf_reg, nvs_index); +} + +static struct device_operations device_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = lpss_init, + .enable = NULL, + .scan_bus = NULL, + .ops_pci = &soc_pci_ops, +}; + +static const unsigned short pci_device_ids[] = { + SIO_DMA1_DEVID, + I2C1_DEVID, + I2C2_DEVID, + I2C3_DEVID, + I2C4_DEVID, + I2C5_DEVID, + I2C6_DEVID, + I2C7_DEVID, + SIO_DMA2_DEVID, + PWM1_DEVID, + PWM2_DEVID, + HSUART1_DEVID, + HSUART2_DEVID, + SPI_DEVID, + 0, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .devices = pci_device_ids, +}; diff --git a/src/soc/intel/braswell/memmap.c b/src/soc/intel/braswell/memmap.c new file mode 100644 index 0000000..1abf7f0 --- /dev/null +++ b/src/soc/intel/braswell/memmap.c @@ -0,0 +1,57 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied wacbmem_entryanty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <cbmem.h> +#include <console/console.h> +#include <soc/intel/common/memmap.h> +#include <soc/iosf.h> +#include <soc/smm.h> + +static size_t smm_region_size(void) +{ + u32 smm_size; + smm_size = iosf_bunit_read(BUNIT_SMRRH) & 0xFFFF; + smm_size -= iosf_bunit_read(BUNIT_SMRRL) & 0xFFFF; + smm_size = (smm_size + 1) << 20; + return smm_size; +} + +void smm_region(void **start, size_t *size) +{ + *start = (void *)((iosf_bunit_read(BUNIT_SMRRL) & 0xFFFF) << 20); + *size = smm_region_size(); +} + +size_t mmap_region_granluarity(void) +{ + /* Align to TSEG size when SMM is in use, and 8MiB by default */ + return IS_ENABLED(CONFIG_HAVE_SMI_HANDLER) ? smm_region_size() + : 8 << 20; +} + +void *cbmem_top(void) +{ + char *smm_base; + size_t smm_size; + + smm_region((void **)&smm_base, &smm_size); + return (void *)(smm_base - CONFIG_FSP_RESERVED_MEM_SIZE); +} diff --git a/src/soc/intel/braswell/microcode/M01406C221D.h b/src/soc/intel/braswell/microcode/M01406C221D.h new file mode 100644 index 0000000..0a46ff8 --- /dev/null +++ b/src/soc/intel/braswell/microcode/M01406C221D.h @@ -0,0 +1,17152 @@ +0x00000001, +0x0000021d, +0x12172014, +0x000406c2, +0x1ced285b, +0x00000001, +0x00000001, +0x00010bd0, +0x00010c00, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x000000a1, +0x00020001, +0x0000021d, +0x00000000, +0x00000000, +0x20141217, +0x000042e1, +0x00000001, +0x000406c2, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0xd589588f, +0xe0a167f1, +0xcb40ee48, +0x34e7d5c8, +0xcfd29857, +0x036bddb0, +0xb8b5846e, +0x8cedaeea, +0xc3e444ef, +0x58491df9, +0xb7830823, +0x6eab8273, +0xef2443f1, +0xd7284cf9, +0x96d13191, +0xaa2fcfeb, +0x37cb49c0, +0xbd7a57d1, +0x5ae4db5e, +0x1ecae117, +0xc3929abe, +0x90178e1c, +0x8a8bc0b3, +0x519879ca, +0x928c2a3f, +0xd8157e1b, +0xb2ec441f, +0x3818daae, +0x6986ce0a, +0x7e499dae, +0x0c684c42, +0xeda3b321, +0xfeac24d9, +0xa226c1dd, +0x96353626, +0x9b99cd21, +0xf39d3f19, +0x53197d03, +0xc53d7af9, +0x7ead944c, +0xf060b398, +0x1f4690eb, +0x2e6d8e43, +0x0e1a8530, +0x813662fd, +0x3c2d7818, +0xc5382970, +0xddf02d46, +0xc17cd6f7, +0xa0761016, +0xb35d6ef0, +0x6ba761d8, +0xbc060ba4, +0x9bc637ed, +0x8bf9252b, +0x7d88672b, +0xb53101bf, +0x257c1b57, +0x5237eb34, +0x6e402e99, +0xe7a81b03, +0x1d5bfccc, +0xe987f433, +0x9830ccec, +0x7b7352e4, +0x86c28cb3, +0x8fc57b81, +0xde7f2a85, +0x191bcdcb, +0x4a8911ab, +0xd778f2a1, +0xc9290836, +0x00000011, +0xd5da62b7, +0x82d9cc30, +0xc4301715, +0xd2b2add6, +0x11d35908, +0x55f3c6aa, +0x3aa814ae, +0x54d73271, +0x856e0031, +0x64c07ec3, +0x7b0e233e, +0xa85ce771, +0x00f8859b, +0x2e04a854, +0x566389b3, +0x8b71082c, +0xd196978e, +0x380870b4, +0x6bb0060a, +0xbe0655c7, +0x7225b3b4, +0xe652989d, +0xc86a6076, +0x30e9bb86, +0xa763a7e1, +0x413d0a8c, +0x532630f2, +0x2f3b68bc, +0x5a545f98, +0x83ed9e37, +0x29ba9101, +0xadf5297c, +0x84115ed6, +0x8963d87f, +0x3bec6674, +0xa41d8ec8, +0xe75d1598, +0x41e3437e, +0x56f8e211, +0xeba14331, +0x09d3a4ed, +0xe74ac1bf, +0x87b8bc5f, +0x84b5c6e7, +0x40f13d3a, +0xbb0675eb, +0xbbab5102, +0x341d031e, +0x9566254c, +0x468638a4, +0x8b2cb1ce, +0xe5eec43d, +0xac5f1d52, +0x36d9c03e, +0xa16c6c29, +0x320fcd81, +0x58e3d766, +0x33eceafe, +0x455ddb8b, +0xf2202df6, +0xe13d3180, +0x43424326, +0x8875d086, +0x4637270c, +0x9eb0a26c, +0x58547b92, +0x6176da0e, +0xc935e0c8, +0x7c49e5a6, +0x6a14d6b2, +0x8f567cce, +0x4cac110b, +0xafc0663e, +0x795413e6, +0x2d6b87cc, +0x572642da, +0x1df8305f, +0xc71430e7, +0x2b2652cc, +0x01f71ce2, +0x073f0784, +0xa4e153f1, +0x34e45636, +0xb3e38ea4, +0x567ecaa5, +0x69c24007, +0xe519a10d, +0x21db1f71, +0x37ff42ad, +0x5aa3c082, +0x499296aa, +0x44f3c436, +0xa02473b2, +0xb4a1baf4, +0xe82b744d, +0xdaac3fde, +0xbdb8e4d2, +0x09e12589, +0x708c59b5, +0xa43592a9, +0x10e178c7, +0xa418dc93, +0xa4d30e3e, +0xee725119, +0x4d5f7079, +0x2cbd1095, +0xc7f9b3f3, +0xc88e71b0, +0xeefe7b72, +0xd3ee4b60, +0x2b0dc1eb, +0xad7f4d31, +0xd371e42b, +0x29970b14, +0x2c86335e, +0x5e1aa5b5, +0xb2b2c786, +0x75c97c86, +0xa97421be, +0x34eb1da5, +0x5031c23c, +0xf1971255, +0xc2c18ece, +0x3a74f2e9, +0xa9c8208a, +0x3cf1b062, +0xadc066da, +0x285cd082, +0x4683b30d, +0xec46dd7a, +0x27a7315d, +0xd7a0c5b3, +0xcb12fe1b, +0xb4b92a76, +0x090297bc, +0x9a11afad, +0x02ee4a42, +0x0d1c542c, +0x9e9df5ff, +0x8796327f, +0x4cbb7a23, +0x9c7c1e5c, +0xdfc8ec92, +0xee126577, +0x2c929a54, +0x84a4239b, +0x83386133, +0x6d175276, +0x0d962bc9, +0x61b8997d, +0xc29cd1a6, +0x6462ada3, +0xe8da0748, +0x6ac5a1e6, +0xd3992bee, +0x28001c5c, +0xb04b3fca, +0x0ab9649d, +0xb1c34e15, +0x6f741b8a, +0xd6f7a823, +0x2fe7b53f, +0x58b34295, +0x85b5fba8, +0xea48306e, +0x16fd4c3d, +0xacdb2b72, +0x704184f8, +0xab96d5b4, +0xb72053dd, +0x31404ead, +0x3c14e72d, +0x4047dcc6, +0x883b598e, +0x8b4f61ae, +0x04ec906d, +0x0d271393, +0xb07b5beb, +0x7d06f14c, +0x63ff5ef8, +0x3ab5ca4c, +0xf56cdefa, +0x3386b98b, +0xe2233ef4, +0x2545fa0f, +0xc5ad24f9, +0xca3c6605, +0x51627da5, +0x386305e7, +0x3bb49fc1, +0x81f1b0fc, +0xd29887f1, +0xded75a63, +0x233c3f1e, +0xd4161149, +0x8c793450, +0x40dbdb80, +0x8a897a7c, +0xce26ac9f, +0x58cf05bd, +0x2527184f, +0x0b595818, +0x89d7d673, +0x74ea72ee, +0xe509b128, +0x44c33cb1, +0xa4b3cd69, +0xa2150828, +0x3b1d53e5, +0xb47b26dc, +0xae09423d, +0xb3404836, +0x760224b1, +0xd0ee1ecd, +0xbf17d834, +0x8b5bb754, +0x0c6380fe, +0x50930168, +0x90ba9520, +0xfa7bf2d4, +0x44c0434e, +0x8005041f, +0x35907548, +0x5f8b4cdc, +0x06bb0161, +0x407d58ae, +0x6fd0577e, +0xcf59b670, +0xdc2f7f96, +0x5b93868e, +0x604f8bb0, +0x75724947, +0xdef6aa7a, +0x7b8adb97, +0x62a901c3, +0xd78224e6, +0xbc5f5a3f, +0xe77c97d0, +0xb9abebaa, +0xabaaa58b, +0xd167f3c3, +0xf5f6c7eb, +0xdd6c1a90, +0x6989b745, +0xf1e21a13, +0x001228a6, +0xdcfca10d, +0x71b143e0, +0x58e00e2b, +0x5c2fd816, +0x8ee6bde9, +0x3c93546d, +0x1325b202, +0x58d06919, +0x86b51370, +0xca81fa1b, +0x4f52ee5c, +0xaa3add1b, +0xe1123081, +0xcb2fec95, +0x4bc8b32b, +0x32ee4a62, +0x9221ebfa, +0xe5d0cf34, +0xe20224cb, +0xc642c56c, +0x9062a767, +0x2a09d10c, +0xcb651cd8, +0x4bb16b33, +0xb6f06179, +0xec1e4cba, +0xd399c83a, +0x0d6cb016, +0xd3065762, +0x34c7ea26, +0x2567bb13, +0x7cfbfff2, +0x6c5d8f71, +0x951f4852, +0x1374fefe, +0x6b0de025, +0xb2ed68e0, +0x002372a8, +0x36ac943b, +0xa54e51f1, +0x722ad1cb, +0xa8bca8b4, +0xb24ce74b, +0xdae6e108, +0xef20004f, +0x7672f25d, +0xa3a8c02d, +0x9e1a2768, +0x7a744770, +0x99c56ad2, +0x3229b377, +0x88875c86, +0x4337bfeb, +0xedb0006f, +0x245ae548, +0xc2e13fd7, +0xb106f30c, +0x580c8426, +0xc3b697b7, +0x9fa25fed, +0xf88e28bf, +0xe97b169b, +0x712fd4ca, +0xf0a6db23, +0x5f4346c5, +0x5002f3de, +0x52836b57, +0x51299a20, +0x070e6fa1, +0x320441c1, +0x3254eb7c, +0x5bff4082, +0x31a47782, +0x797cb2ba, +0xfa49460f, +0x87b7f2be, +0xe132de14, +0x90360365, +0x229877bf, +0x6efbfcc1, +0x391df7ed, +0x659c621b, +0xb9a8c8c3, +0xb43af0ab, +0x24b7181f, +0xc8f759d6, +0x43c43e56, +0x25e2152c, +0x4a413211, +0x4c9bd5c0, +0xcfa0d00e, +0x0eabde19, +0x3c46a239, +0xa00ac1ea, +0x4c70f561, +0xa8c93b89, +0x7d6f4b24, +0x99edf0fe, +0xe4a88dcb, +0x5436074d, +0xfd650481, +0x56662050, +0x2876c5f6, +0x90ba94ac, +0x86daac2a, +0x8ea30562, +0x2de5e7a5, +0xdd05eb64, +0x9e25257e, +0x5a2b5168, +0xd123784f, +0xec9d4758, +0xf3a3b880, +0x4241c037, +0xa7bdc015, +0x01b8214e, +0xa467da33, +0x0edd2259, +0x78eb0865, +0x37ecd521, +0x98a9ab99, +0x7bc899fa, +0xd47bf137, +0x680c6ff0, +0x45f9db77, +0xf69bf00d, +0x325d4308, +0x042de618, +0x6c538812, +0x0c110320, +0x055ba5d4, +0xd18a6ed9, +0x12c2b063, +0x7eef5493, +0xf4ba0d07, +0x06de5451, +0x7324a6ad, +0xb9ec2f49, +0xb1643056, +0xb89e1ff5, +0xa124be3e, +0xa6de9d94, +0xcca23b1d, +0xeff80b56, +0x2839ec18, +0x3e5149e4, +0x702e447d, +0x18bd887e, +0x92c265e3, +0xddb784a5, +0xf76df034, +0x5c6051ef, +0x0af51deb, +0xd98a62cd, +0xcdeccf03, +0xf86c4cb8, +0xc73cdc2f, +0xa9bf6f9b, +0x64709f63, +0x06d3392f, +0x51d53d36, +0x4ac734ec, +0xeb5ed325, +0x7328b32d, +0x966fc2de, +0xd9e5ba95, +0x0f99cde1, +0x8211b927, +0xeb2774bf, +0xa4f1a692, +0x69c28524, +0x350dff81, +0x78533b12, +0x4f7605e0, +0xde7ba40e, +0xfd7d2f3f, +0xb6fb8867, +0x86e8bdc7, +0x19200943, +0x01c23786, +0x7d652a16, +0x494ff7b6, +0xd1dfc516, +0x4247ffe2, +0x33661b83, +0x93149d52, +0x1bc2b2d3, +0xee1e9b26, +0x7817fea4, +0x9a4831b4, +0xedfeafc3, +0xe3504cb1, +0x2258498f, +0xab3b1764, +0xe90a6e7b, +0x55c1cb07, +0xdff7a6c0, +0xa39027d9, +0xdb3afef4, +0xb0b71d96, +0x237f291c, +0xb15e67e7, +0xecaafdb7, +0x2f935ee5, +0x2a8cbadc, +0xbd664b03, +0x6b46a276, +0xecbdca7c, +0x02eb76d8, +0x8ebe6e9f, +0x17d9fe90, +0x48b8f10f, +0xfeb0e445, +0x5f05b840, +0x5de15ec8, +0x0f6da3ce, +0x67da441e, +0x5a9f89c9, +0x89dbbac6, +0x79ab8a9c, +0xfa96c447, +0x2d8a17f0, +0x18f49384, +0x8776e86d, +0x314dea00, +0x30b5ff04, +0xeb0a3c56, +0x5afc9ff9, +0x0ae28038, +0xc242c650, +0xb6406496, +0x5ceb659f, +0x26c62ee9, +0x6c9983b7, +0x9d99feda, +0x3ddef181, +0xc11f9fd5, +0xce2de09c, +0x3aed2918, +0x00b15288, +0x98c04a90, +0x95b6177f, +0xabe5fd53, +0x246938e2, +0x99e3ae56, +0x1068b663, +0xe2389d3c, +0xb9ac277b, +0xe3d6eaec, +0xe6f28115, +0x2191367c, +0xb148f9c6, +0x16bc6829, +0xd582047b, +0xff0f44a1, +0x363a79de, +0x1a570d68, +0xca98774d, +0x1837125e, +0xa27c53c6, +0x579eb70a, +0x520345c8, +0x9926d297, +0x6653c528, +0x9146e5d4, +0xe53be617, +0xd6c98f19, +0xb996b5ec, +0xf6185d50, +0x7b716308, +0x395c217b, +0xcd793497, +0xa1d9b709, +0xe4425df6, +0x6a777c46, +0xe431ad03, +0xf5e4bf92, +0xba07bea5, +0xd09f8c3a, +0x771c455f, +0x897ab37b, +0x7101530a, +0x3b641e72, +0x048cc6cb, +0x5cd3ecc7, +0xf0ad30e5, +0xf97fb333, +0xcb896179, +0x7209ecfb, +0x8822c181, +0x1fabd477, +0x12c9d3f0, +0x113d257b, +0xe68af6c8, +0x88fb4e67, +0xcbda70f2, +0x70292f92, +0x21f64dc1, +0x6f4bed27, +0xcd8e4c03, +0xa1eb0075, +0xa7e17202, +0x22c4ee23, +0xea786da8, +0xe7d43f01, +0x5db39d2f, +0xd5b82194, +0x691d7f72, +0x48e9cf77, +0xa3e22ad5, +0x9f46c390, +0x1c064918, +0xb6ce4c32, +0xa9322f4c, +0x3ed99acf, +0x8fb8f3c3, +0xafbea125, +0x2eaf78b4, +0x767bc069, +0xcba0e31a, +0x195f90aa, +0xa103811f, +0x2955eb73, +0x8fe5ef65, +0x7c5ac4a9, +0x4be7f65c, +0x1ecc8dfe, +0x30f97ca6, +0x74f7614c, +0x22bb6caa, +0xf703d95f, +0x78f6caa9, +0x71e7d50b, +0x74138735, +0x4e2aba15, +0x04307435, +0xaa61f61a, +0xfdf80dcd, +0x1b3573ad, +0xc5dcbc66, +0x23220a53, +0xfe69da19, +0x1202bfca, +0x93a7eb98, +0x4319bacb, +0xbad07bfc, +0xb7271b7e, +0x5cc76344, +0x8983993f, +0xaa20c218, +0x6eed4059, +0xf5f81b48, +0xe7432da2, +0x4a3b3990, +0xdd2d48eb, +0x44794f96, +0x998ba3d4, +0x946916ce, +0x8759213c, +0x45fd4575, +0x624bba14, +0xbb4625bf, +0x5fc2c77b, +0x8851500a, +0x9b723098, +0x6aafb846, +0xbdd6207d, +0x8c4eda03, +0x5466b800, +0x1df57fe2, +0x69cb090c, +0xf79fabd1, +0x28eef59a, +0xf6448243, +0x3f17e237, +0x7c23b5b5, +0x10e91415, +0x81552bf6, +0xb64e99f7, +0x4294efef, +0x3c23c4ed, +0xf1ac6d1d, +0x92500086, +0x3a0cb20e, +0xde49b399, +0xeb8f38c4, +0xe2746546, +0xb2cc3d9c, +0x3a9d19f3, +0x1953efc6, +0xabd1e0e0, +0x084de2d1, +0xf8a9086f, +0x533a0110, +0xfee4d619, +0xa413a523, +0xe9278caf, +0x54c41f40, +0xbd0b1002, +0x13249537, +0x3d800fc1, +0x33d8929d, +0x5cf94ba2, +0x5253dc62, +0x335b998c, +0x497d8423, +0xed865322, +0xd6251ef0, +0x04948520, +0xdb2b417d, +0x4c1e2549, +0x1c19be4b, +0x48b22200, +0x1e8e7fce, +0xae6a33cd, +0x0b12b31e, +0xa95c7127, +0xbbbcdbb4, +0x7358244d, +0xa1dbbac9, +0x7232bc3e, +0x8a1718fa, +0x8b613409, +0x73b3a004, +0x7861e2ef, +0x4efba5a7, +0x74ad64b6, +0xfc594e92, +0x7adc4613, +0x48b2d3ac, +0xd6292f0b, +0x09f24e66, +0x7e51ab09, +0x252a1841, +0xe3778e7f, +0x6c386ba6, +0xfac39637, +0x5cae24fa, +0x2e7f517b, +0x0c955633, +0x3a5af474, +0x6a7d14d2, +0xb6203d71, +0x8d082009, +0x6107f32d, +0xf2498ffa, +0x8fca9b56, +0x79ec9829, +0xb1eeb859, +0x52d73360, +0xa35693f9, +0x40ed63f7, +0xda8e44b6, +0xd627443d, +0x2beb4ae1, +0x89991a90, +0x46f941c3, +0x0a1ea578, +0xec5fdbef, +0xee7d55ff, +0x31c0a192, +0x50c6d8a2, +0x0e96ebe6, +0xf6c57dc4, +0xd714592a, +0xa4ef450a, +0xda6b2ae1, +0x7703d6a2, +0x0f177101, +0x0a953129, +0xdac9e655, +0x9a66e151, +0xb0471425, +0x58faac54, +0x22389fef, +0xe95ded2b, +0x26363a18, +0x690f8ab3, +0xbdb321c0, +0xe436561a, +0x070282cd, +0x2e54843a, +0x8d9907f1, +0xaae9bd2e, +0x24eb4913, +0x9fef8f38, +0x8cc713f2, +0x664ecd9b, +0x1805fad0, +0x73aaba8d, +0x67d1657f, +0x1556a949, +0xc33e49dc, +0xaeba5ace, +0xa1b907ed, +0x473867c1, +0x45d40e13, +0xa905d64c, +0xddf47cf8, +0xe36251b4, +0xfac853ec, +0xdb5820c5, +0xd3d2d363, +0x865bd775, +0x78e62cd8, +0x0bc64708, +0x44887ce8, +0x9b8b7545, +0x346506e8, +0x1a20f917, +0xe155487b, +0x5c6f9fa5, +0xec093f8a, +0x600be4ac, +0x028a6c87, +0xd10f69e1, +0x947b04d9, +0xd2886ca4, +0xd8dfea8e, +0x07f7abb3, +0x02eadf90, +0x2331895d, +0x48e3036a, +0xd2a44938, +0xf5ee12f3, +0xbbf1e81c, +0x50a62cab, +0x959b3d0c, +0x8ca6246b, +0x44a19979, +0x82391c68, +0x73f7f0d1, +0x7be051c5, +0x27be2d7c, +0x9a7cdf61, +0xc54054a1, +0xc457f048, +0x66c450c3, +0xb4f0a889, +0xca4716b8, +0x4db2f8b1, +0x4a2eaeb8, +0x43984aa5, +0x5f828a87, +0x17524219, +0xf7490800, +0x039238be, +0x150d1577, +0x0e7af7f3, +0x893fb090, +0x3d6b087f, +0x71982c87, +0xac2a0f18, +0x0ded674e, +0xdb78a15b, +0x0daf7236, +0xfa53faf2, +0x0106ab25, +0x3f217c95, +0xc5cd7bfc, +0x3b15f7cb, +0xe032114d, +0xee13f472, +0xb32c726e, +0x535f1d1e, +0xc76f3af7, +0xb1045e76, +0x2f5ce698, +0x1527b5bb, +0x33437d80, +0xc1735df5, +0x8d7c0134, +0x5d5ebf52, +0x5a67c0ef, +0xaf78bcb8, +0x71396473, +0x05ecea1f, +0x22430257, +0x714c16c5, +0x01700330, +0x93c9a3fc, +0xeb271181, +0x96101c38, +0x0f88eba3, +0x8f50c8d9, +0xbeda4553, +0x098c7db5, +0xaa0bded4, +0x306fdd93, +0x11bcd15d, +0x7eca9717, +0x5a4b0ff8, +0xf9db978a, +0xb2a619b4, +0x7ab1f5d2, +0xb0159bfe, +0x97e4d69c, +0x88fc2702, +0xaf28d426, +0x934bcdf2, +0xd915123f, +0x30a7bc29, +0xb391dbfa, +0x1f3fd09d, +0x96e9b24b, +0xfd4928d9, +0xb9384405, +0x794ed275, +0x8f97c751, +0x016d3479, +0x2983d282, +0xb7862a91, +0x99df8500, +0xd905b722, +0x93c74cf6, +0x8fd014a3, +0x96b5a293, +0x9a7b9fdd, +0xf3a9d0ad, +0x49fa5e49, +0x7bb8ceeb, +0xc12aea51, +0xc824468e, +0x08d83d33, +0xe19dbea9, +0xc38f5097, +0xfa1e7e85, +0x8a8a0fbc, +0xc7853ea6, +0xbc5ba61d, +0x135662d5, +0x9433ee00, +0xf3f1b0f5, +0x0e9acd41, +0xe4cf3075, +0x6a04bd1d, +0xd4d53fa9, +0xf2c7cc14, +0x8d35186e, +0xab87f9ca, +0xc21a07ef, +0x0ffcdf2d, +0x9d3180d5, +0x6c656908, +0xd89d364d, +0x0cbc1373, +0x8e91fc1a, +0x7f754436, +0x23f7fdbb, +0xa5a22c7a, +0x2ec53edc, +0xd17c0199, +0x3b3532c3, +0xa463065b, +0xab6d52e2, +0x86126966, +0x8d05d08e, +0x69272fdf, +0x36fc3e30, +0xa9b176a5, +0xec5a4228, +0x953c0d69, +0x14d6f109, +0xe96c86f3, +0x6de00785, +0x76ae2ebc, +0x74edfeb2, +0x27339a81, +0x8d13f06c, +0x643a22c6, +0x4517bbce, +0x2b3ff038, +0x36476548, +0x2d30f2ab, +0x0f9f3bf0, +0x0ab8aafb, +0x930beb5b, +0x48962b65, +0xfdae2aed, +0xe919f205, +0x673bc935, +0x778b7351, +0xe8d31882, +0x2d07cc95, +0xf25953ef, +0x10177b94, +0xc5c10b53, +0xbe0348bc, +0x8cbf4b77, +0xdaab426a, +0xbd792849, +0x9c899de0, +0x6c8a771b, +0xf15bc061, +0xf9f4af37, +0x718f1c0a, +0xa9c01b88, +0xf2cc2eb4, +0x790f711e, +0x7e093312, +0xd719f8a5, +0xf83d0c2e, +0x61e5b2ef, +0x7966069e, +0x6bb7f6b0, +0x71cc2f28, +0x8a1e9f27, +0xf0e29e79, +0x2684d13c, +0x76384793, +0xb32ac1e9, +0x19c2588a, +0x92d616e8, +0x4ad7fd22, +0x1108fd2f, +0x1e38fd87, +0xf7d07466, +0xa7696c03, +0x3b64461d, +0xdd133e05, +0x233e9b02, +0x97f46df1, +0x87703db7, +0xc4a07de5, +0x9b51d870, +0x4ae23d7a, +0xf603e8df, +0xb1ba2f73, +0x7a4713eb, +0xa79ec34f, +0x1781d6d7, +0xd68d60d1, +0xe9b0ce65, +0x0510e235, +0x73812d41, +0x2af84b73, +0xa2be0186, +0x339dfb2a, +0x4b086798, +0x0fdda555, +0x1a32e2b9, +0x13888264, +0x5d4da1cf, +0xbe05078a, +0xea819b4d, +0x5a5bc402, +0xab22b491, +0xdd6dbc15, +0x1f9d405e, +0x81f6d626, +0x1d6869b0, +0x6fa7a6bd, +0x1eb82d67, +0xe4272900, +0x4134352f, +0x160d4419, +0x62df0b95, +0xcea90ee4, +0x26a58162, +0x2eb7cc8f, +0x73b6f687, +0x7cb1ab46, +0x3bd1b332, +0x50b611ff, +0x17a5ddb7, +0x7121e731, +0xdcc121d3, +0xbfc38518, +0xa28c9beb, +0xabd0047f, +0xfd9f0af3, +0x00953051, +0xcd5caeee, +0x3ea57c4f, +0x889bb613, +0xce3319fa, +0x9e4909aa, +0xd8b84ae9, +0x2676bc66, +0x26de0cdd, +0xa041ca58, +0x62575bd2, +0xd5e9de50, +0x05aadd8f, +0x4b6db73c, +0x71d4333b, +0xbfb2a17b, +0xd031b7a9, +0x01cbc8e5, +0xaaa92e92, +0x21544f41, +0xab492584, +0xe8d7bbfb, +0xd60e9a52, +0x465973ef, +0xa63bd5b2, +0x76816e61, +0x8e102269, +0x69bd5cb2, +0x5c2cabc9, +0xd89d1019, +0xa9f6ca61, +0x899a8b00, +0x8ec471da, +0x51542462, +0xda2b4775, +0xdcff1dc4, +0x66b8ca09, +0x56f46447, +0xf694cba3, +0x9bfdddc8, +0x1361f40f, +0xcd6de290, +0x7afffeac, +0x7791e7a3, +0xd27ca5ff, +0x144226a1, +0x04a34a93, +0xad0b5455, +0xfb82edac, +0x25bdfa01, +0x941fecc6, +0x4fd6032a, +0xe6981ec7, +0x769dc3dd, +0x9f77ce7f, +0x5c22c60d, +0x6d295bc5, +0xc314ef9b, +0x7fb8cb5d, +0xeb2414f6, +0xab13e1ce, +0x4f6a4a17, +0x8154212d, +0x8ce0e5bb, +0x542dc3ea, +0x9273dd54, +0xb9d1d9ca, +0x30ff8371, +0x371b95ab, +0x721fad06, +0x52861e0e, +0x166c2747, +0x8f680b06, +0x32c6d9d1, +0x0f18b650, +0x40859243, +0x6727ce0e, +0xaa6225ca, +0xdf40bff3, +0x08b20447, +0x34333636, +0x7d9f1094, +0x6dcdff3a, +0xaf89aa11, +0x8d3269d3, +0xa6f27509, +0x26ed2351, +0xb98bf7ce, +0x36a19442, +0xa5c0ddb5, +0x04ff730a, +0x225fb5d1, +0x9d91ffb2, +0x392ea080, +0x944670ed, +0x529b0419, +0x6dc67d31, +0xe0bf4349, +0x5bf0aa60, +0xa7427754, +0xb7ff312d, +0x699417e6, +0xf4fe02ba, +0x40efb764, +0x466341fa, +0x4c125c6d, +0x2ed5f24b, +0x4b2f30be, +0xb849296b, +0x3415488f, +0x2f3e3e94, +0x58e2f97b, +0x779e18bd, +0x40aa424d, +0x7c2848e6, +0x6a89bf1f, +0x3dd5994d, +0x75062bb6, +0x1f29188c, +0x461b2c4f, +0x06255abf, +0x0a33108c, +0x1c7b8eab, +0xd7a20071, +0x7f73f738, +0x8e18cc45, +0x2df668df, +0x447c002c, +0x7dd863f9, +0x4f3166db, +0x732c75eb, +0x5c0c1ee1, +0xd5e74ee5, +0x81889770, +0x2ab2210c, +0xbb1d8d34, +0x1751d8df, +0xa55e5711, +0x70cbfd43, +0x93722c86, +0x48a2456b, +0x21e4f5a8, +0xe67cb533, +0x8c61d067, +0x6aae7c0e, +0x8f9c2f1b, +0x6c72fcf7, +0x5d3bb11f, +0x1b32d448, +0x2f6e7de1, +0xb611aa0c, +0x73101d3d, +0x0c00b025, +0x4d95de19, +0x36841f4a, +0x89810736, +0x427e10d2, +0x7bc3d8ed, +0xe47b0082, +0xe0c4a3f5, +0x9e7af1ca, +0x1eaef0f8, +0x19382ffd, +0x87f20de5, +0xd080d425, +0x7cb68a87, +0xe16fae10, +0xad5129c5, +0x9fc7a5c5, +0xa282859d, +0xd0afcb4f, +0x93800236, +0x20661605, +0xc8e25b88, +0x9409b765, +0xc77f7b48, +0xc8ccdf0c, +0x6f3cf90f, +0x9b0dd6ea, +0x80a8fb99, +0x9e465dbb, +0x89afd0c1, +0x27fb46cc, +0x7d7acace, +0x0cbf7050, +0xfcaf054b, +0xc4db6903, +0xa41c3828, +0xbd88c5b6, +0xa3958c51, +0xca72b9a0, +0xf458e460, +0x941e99f9, +0x6c713430, +0x2248972f, +0x7f2bd193, +0x70121a05, +0xae4015c7, +0x4a145ea9, +0xce366fd0, +0x040e714d, +0xbb1384a8, +0x1895e1cb, +0xcea09767, +0x0246643c, +0xd9ba487b, +0x9053d9a4, +0x1dbfdc65, +0x562672a9, +0x961ea357, +0x08be27b0, +0x9c78410c, +0x9e5181fd, +0xfec078ff, +0x8b4f5314, +0x60541a4d, +0xf56c41a3, +0x0220ab68, +0xc4d292ef, +0xb5cbdc5d, +0x24c20d16, +0xf7d846b9, +0x9af128aa, +0x42a93372, +0xde556d41, +0x4ab2d958, +0x66aaf537, +0xd292c3d1, +0x02adb9f0, +0x6ef2705e, +0x66b22994, +0x86c6cd7c, +0x89d96189, +0x8b0033c3, +0x8ae7cfc6, +0x89bcf698, +0x75952d7b, +0x21571a21, +0x0591126f, +0xce0f82a8, +0x5679ae77, +0x8672032d, +0xe225c90c, +0x84b576e3, +0x26231474, +0x3e07647b, +0xf5ee7fb7, +0x4faead5e, +0xf85a88ce, +0x61fb8d0d, +0x2d3d6942, +0xd73cfed9, +0x5b9d9431, +0x8af3c4fd, +0xa85e6398, +0xa1b33492, +0x4b59a981, +0x15dba6c5, +0x12cd1637, +0x478e12b0, +0x21a2e3bf, +0x4019632d, +0x448a0e3a, +0xf6dff8b0, +0xf722f2c1, +0xf9929514, +0x744e4c1e, +0x0a3d013d, +0x021a5698, +0x263cfed3, +0xc8aa1863, +0xcfbd4719, +0x40b46793, +0xcf0f399c, +0x3d8f637e, +0x2b3c508c, +0x6dac2fd8, +0x3ca22215, +0x99c4c6ae, +0xeb2a6370, +0x2afd3a42, +0xe40da5c8, +0x6663a282, +0xf297d2fd, +0xa9ebcd92, +0x739cf346, +0xf1077bee, +0x3bea9cb8, +0xe59139e7, +0x998ad609, +0x896ebb38, +0x2d5d42be, +0x4fd6b26d, +0x2306e025, +0x864367da, +0x97746758, +0x907ff28e, +0xff480a7c, +0xebd9b925, +0xdee68ad8, +0x42274dc6, +0xb26f1196, +0x156656f2, +0xdfb543cb, +0x773c8410, +0x98122041, +0x74b15928, +0xf3720538, +0xf046c805, +0xa12fbf8a, +0x311fcd72, +0xf26f9646, +0x5bf25975, +0xe1fbf330, +0xefdb114d, +0x10436890, +0x1487d42a, +0x467c46b5, +0x9792b3af, +0x0d94d92e, +0x84aa5d5c, +0xedb225ab, +0x1f171c39, +0x99e21826, +0xf4845f14, +0x6edd055e, +0x6b74c7e0, +0x1ff1ab00, +0x0fd9dbfb, +0x521b02d0, +0x476ce72f, +0x5e774a47, +0x966c7913, +0xa619110a, +0x2071ddc5, +0x004bf580, +0x509d66f1, +0x534f7685, +0xb7446e7a, +0x6067805c, +0x8a4f204d, +0xe9e28248, +0x89506cee, +0x843e2265, +0x443423b0, +0x07bf9ae4, +0x78a6fa12, +0x1e247000, +0x4fdc91fe, +0x30be9390, +0x800836d5, +0x9a57b2ed, +0xda64896a, +0x779ba2ad, +0x5832b84e, +0x8dccd3e3, +0x39bc308b, +0x8f36fe87, +0x188dc7c7, +0x5244ea3f, +0x479a58b2, +0x1f3263d8, +0xf8edcfc1, +0xc40fc288, +0xa9629d7d, +0x28457ed6, +0xdf82019b, +0xc15b44cb, +0xe06eddef, +0x8a59c51a, +0xdcba8d94, +0x11a35f98, +0x2c83dee7, +0x3d9924ec, +0xf94ed25f, +0x26a1490f, +0x4cd9143f, +0x17693dd9, +0xdc5839a7, +0x6e58dd05, +0xaae84e2c, +0xff9a050a, +0x30d1edc8, +0x45ce39a7, +0x32a1bf18, +0xfdec0105, +0x13732b22, +0x7f3d1be5, +0x95ec2b53, +0xcfe42ce2, +0x745300c4, +0xd1f412b9, +0x8b6ee032, +0xc26f506e, +0x31a6e583, +0x28e3f8da, +0x5456c51d, +0x4f8a4bad, +0xa85ed606, +0x7b2a182e, +0x8ee85dca, +0xc5ffb799, +0x0dc33662, +0xbcb78275, +0xd5975a42, +0x9b3a1ead, +0xe1cf3d0b, +0xf9d960ff, +0x4fb89bda, +0xda24ae4b, +0x87d3c209, +0xacb71211, +0x7ef724ce, +0x1ed2a21f, +0x0744a403, +0x961025e9, +0x51871ec2, +0xe015ab5b, +0x359a6747, +0x5b424912, +0x4b5314ee, +0x07a2e26f, +0xf91f8b86, +0x823075b0, +0x6ae7ba37, +0x5ada20cd, +0xb9b35c77, +0x04c40639, +0x9172e15e, +0x67cc5a8b, +0xbe6fbccc, +0xa626c5e1, +0xeb0dcadd, +0x6d82fe0f, +0x7d996b75, +0x4d713af1, +0x38a6fb3e, +0xe2428fbc, +0x02ce4200, +0xb32fa7f8, +0x65d31817, +0x78a1bde0, +0xffc944f8, +0xeed5dfd4, +0x78fa6a32, +0xa15f5e7b, +0x2760ef65, +0xaec9d389, +0xb73edb58, +0x29484b34, +0xbd52e5fe, +0xc43ea5e7, +0x799589bf, +0xe8bcf4b9, +0xfc1d07a4, +0x525b535f, +0x78b7b857, +0x7f79224a, +0x19e9f6e3, +0x30ed7d3f, +0xde158c44, +0x0d25e729, +0x7555bb5f, +0x114bd4b7, +0xc8c4bd78, +0x410b82d6, +0xaad458a3, +0x59bffd61, +0x36d6eef3, +0x7f8a1698, +0xcc9bb6dd, +0x698f889c, +0x05f0de93, +0xb5e50c87, +0x85999121, +0xd54d151c, +0xed8a789a, +0x3fc25814, +0x50294dc7, +0x7ea33ba3, +0xc4482312, +0x7c4a9874, +0x23eff08a, +0x2b2a4689, +0xc52d2944, +0x6a342c6b, +0x60f3373e, +0x6eef6d32, +0xe728af35, +0x0328e46c, +0x6143f0cf, +0xa476a927, +0x8daaaf46, +0x12b6fd56, +0x73d39180, +0xb17be29e, +0x5b41a7ff, +0xe800805e, +0x709a1d18, +0xd27a7faf, +0x3ee0802d, +0x9efcc00c, +0x671328ab, +0x78679e67, +0x9c267e27, +0x3befb705, +0xc88ba696, +0x4ef84e4d, +0x1ac06ccf, +0xf854b9ef, +0x3db1f4ce, +0xa312cb7d, +0x96bd9a5e, +0xa1a86a88, +0xf2fc95c5, +0x338d3818, +0x0ce4f757, +0x9dd01f6f, +0x3e9c89e7, +0x21cddd2f, +0x4036484a, +0x382134c2, +0xb0431905, +0x3b336b94, +0x1716fcf1, +0x5a6bffc3, +0xfcb022ef, +0x06f6ad72, +0x52d2e1fd, +0xca827d18, +0xc6c0b6b3, +0xd2aa1cd8, +0x79a5afb4, +0x04266c33, +0x97f7e898, +0x2f9f5144, +0xf9315b9b, +0x9f922ee1, +0xf58f9394, +0x19de0d40, +0x49b4b82b, +0x21bb7a21, +0xb2528e11, +0x8603b01e, +0xaa62fef2, +0x61c86fd0, +0x43290d12, +0x626f7acd, +0x87b1b2d5, +0xb5bca017, +0x78d4ba2e, +0x698ddc81, +0x420d8a03, +0xff8056f3, +0x08c29a8a, +0x9283087a, +0x2074f6df, +0x368d9db0, +0xd14e9b9a, +0xb218a414, +0xaa324116, +0xf000b653, +0x4ab4a28c, +0x6761e166, +0x66235648, +0xeeffec45, +0x409d0600, +0x7b44a16a, +0x0be360fd, +0xd4944b2f, +0x3e77c536, +0x11d8291e, +0x55187913, +0xfaa5587c, +0x03c241e9, +0x062b647c, +0x49dc38cf, +0xaa8a5718, +0x7bb17303, +0xff08fdd1, +0xb76aef8a, +0x701a7f69, +0xd1e22088, +0xfe156b70, +0xa6c0c6d9, +0xd299bd4f, +0x2d83b74c, +0xb427be68, +0x781b4bf5, +0x5716cb00, +0x6ba36b14, +0x7a828e1b, +0x3c07f1bc, +0xe32a27f9, +0x4b962f16, +0xa9a03cb2, +0x382a0ff4, +0x3acfcc65, +0x6aa11703, +0x2b9df463, +0x4b210237, +0x6f322f43, +0xc7ca9415, +0xfd1e6a1e, +0x97aef4bd, +0xc035d6cf, +0xf8e3b48c, +0xdd881ff7, +0x03811249, +0x54caa3de, +0x6e5dee61, +0x4b81ad12, +0x6445ed65, +0x1f4a6abe, +0xd6e9382a, +0x4eb0fcbe, +0x0efe5367, +0x4fd9499d, +0x0af0499d, +0xad3057bf, +0x74d240ae, +0x8366bb5b, +0x04699112, +0x54d13ca3, +0xb387e7cb, +0x874aa47f, +0x0e0f18d7, +0x9165f7bd, +0x289dd31a, +0x6455e525, +0xdf360ac9, +0xe08ab6a6, +0x02bd7668, +0x6a24bc43, +0xfd56c7ad, +0x8d6b0d39, +0x0b14c51f, +0x7af8aaa5, +0xf38496d3, +0xbcd309b6, +0x56e57cd3, +0x94f0833b, +0x74511b5c, +0x158af285, +0xcfa5c98e, +0x5645aea4, +0x4a54fa88, +0x55bf9f9f, +0x5ce13f6c, +0xb13f79a3, +0x1510ebe8, +0xedad6734, +0x50cdef3d, +0x09dcfbc7, +0x9fcbdf52, +0xd25dad3e, +0xc73c091f, +0x935c307c, +0x321c571a, +0x8f43d0cc, +0x1b801581, +0x1179b1b0, +0x145e469f, +0x66ae1ebe, +0xccc7623c, +0xbd697513, +0x18f88cb2, +0xfcf762a7, +0xc54f3890, +0x20907b0a, +0x8826340d, +0x63230dca, +0x1ac20047, +0x69253b42, +0x2b5624f7, +0x053e60b7, +0xf30e244e, +0x9ff6c537, +0x9af7592c, +0x61fd5a6e, +0x9b297f8b, +0x07027971, +0x7f8c95a4, +0x2657b7d6, +0xe93e9c07, +0x8366b0d6, +0xc9627da3, +0x8ca936ed, +0xfcb29a15, +0xa09be600, +0x9e726999, +0x0bea6b02, +0x75868980, +0x056ee17a, +0x0fc59a12, +0x33353f6f, +0x3b7048cf, +0xe6ea3f27, +0x3c34ecfc, +0x3fec41ec, +0x0765a498, +0x0f436b22, +0x6321be2f, +0x3999a0a4, +0x8cad9496, +0x833a2318, +0x67462e4f, +0x4c79659d, +0xee1ac8ee, +0xa7e2f5cd, +0x562f1f18, +0xf8ba12bd, +0xb0f1d0c6, +0x69bbfa16, +0xc39745f4, +0x0acc67da, +0xe2b998b3, +0x8b170825, +0x17871d8a, +0xdb9b043b, +0x16a0fb4b, +0xf2f3c2f6, +0xa7b6b8f5, +0xe586105b, +0xc7c3c595, +0x11bfde7d, +0x64cd1ce3, +0x541cb594, +0xc328ae65, +0x6b0f9435, +0x97895bb2, +0xca54e5e9, +0x73050fd3, +0x6b95172a, +0x863e582c, +0x5a19d1e1, +0x72878e47, +0x48f0dcbd, +0x5350327e, +0x4c25d83e, +0x05914d71, +0xccb8245a, +0xd6b55fa8, +0x3ff1e02a, +0xb9ef484e, +0x63433cb4, +0x3cae4ec5, +0x7049eaa2, +0xd844a556, +0x7664bc2c, +0xac962d4e, +0x24a5cf62, +0xafad64bc, +0x46b7d211, +0x71401c93, +0xa0fdec11, +0x107961b6, +0x8f0a41c3, +0x1759de60, +0x29315836, +0xca49fe2d, +0x50b343f1, +0x450ca109, +0x8b1c890f, +0xdfbb21dc, +0x80ad0d94, +0x9984bbd9, +0x89a59bc6, +0xe5f2eb3c, +0x486512ad, +0x017e782f, +0xfdca174b, +0xf2ad8f03, +0x8b57abee, +0xb2d189ec, +0x7ce792a0, +0x3cc475af, +0x6c5f6562, +0x5e10346b, +0xf33119d6, +0xa48c8331, +0x585c2045, +0x93c33cac, +0x0029857e, +0xff85086a, +0xa88e3711, +0x5d8f0780, +0x09060b09, +0x6db1552a, +0xb8bb51c2, +0x5fb7a8a7, +0xd401edd3, +0xf4ada874, +0xce4f2c0e, +0x5b0a95c2, +0x20e2046e, +0x921f4a8e, +0x9a0583ee, +0x24d22706, +0xbf7e1d7a, +0x9a6bdc99, +0x158bcdb0, +0xb4d6ead5, +0xf08c5f86, +0x65788fda, +0x7dcaad48, +0x68f49ae2, +0x05dbbfd5, +0x5c473d0c, +0x14045a0c, +0x07a433e0, +0x9d0a8195, +0xbd576c02, +0xa350393f, +0xf65c1320, +0xcad3ec95, +0x908733cf, +0xfc3237f9, +0x576d7ed4, +0x8aa7bef2, +0x671cf7c3, +0x3de1fd1a, +0x3b29059f, +0x7a957e41, +0x9dcc346d, +0x13af2aa1, +0x6ec594d2, +0x377b0fb8, +0x3a291144, +0x5ae6c14b, +0xa2fa014a, +0x6e4b1739, +0xadcad7d7, +0x0d87813a, +0x6b15ea15, +0x6ddb9034, +0xd2b38b20, +0xaf20038e, +0xfa90473e, +0xdcec9c09, +0x02773395, +0x9576e5f0, +0x6e3d8603, +0x8399662d, +0x149bb5e4, +0xae9b99c7, +0x8bad354d, +0x06aad231, +0x451c5d19, +0x38c50ade, +0x3311a063, +0x239cb980, +0x393aecc6, +0xb7a0e8f7, +0x5b4481ef, +0x3e959dbb, +0x781b693a, +0x8db072d2, +0x8677705a, +0xb079c3a2, +0x10811066, +0x63d28d7b, +0xf2e75562, +0x94783ecf, +0xc8d6a326, +0xe7de4e2a, +0xe3aff6a2, +0x8b435c49, +0x1eeb8345, +0xfca8e8a4, +0x5d4cf968, +0xec78740b, +0x479f3e5f, +0x2e97be38, +0x7a8b6c64, +0xea457cb6, +0x0187d9e8, +0xf8bf45f8, +0xf0f370f1, +0x041b17ca, +0x263bbef0, +0xcb56ee2a, +0xdb8f0bdc, +0x7961304e, +0x5840a50d, +0x5dbda193, +0xdb58cbc2, +0xf07752d4, +0x7a330b26, +0x4c5a38a6, +0xfce7b80f, +0x15bee190, +0x37461c8d, +0x0152dd7d, +0x7ab42612, +0x74b1bf75, +0xe090c76f, +0xd969de25, +0x2577f767, +0xa133c41c, +0xd394eed1, +0x5e555b53, +0x7951c7d1, +0x634f6ec0, +0xfa458306, +0xcd29f531, +0x94d3142c, +0x8d731e34, +0xcfb4f7ae, +0xb8234eb2, +0x834fe1f8, +0x3be940c7, +0xca1fb372, +0xec538341, +0xb5bb230c, +0x64a024c0, +0x96eefb91, +0x4f26c5d6, +0x74db7828, +0xab54c443, +0xb1813fa4, +0x69b4cf71, +0xa5a34d0b, +0x6528cd2f, +0x01540d62, +0x285965d0, +0x84206562, +0xb09bc090, +0x45a129eb, +0x0eb70c71, +0xb75dd5ec, +0x19a527ac, +0x82194bbb, +0x74ae0a2b, +0x3e795f3b, +0x286355a3, +0x66e2785b, +0xaa7632d8, +0x4b56fcfb, +0x68106747, +0xbe42d570, +0xcabf67db, +0x24801abd, +0xed6077d6, +0x4dafd3e1, +0x1d010122, +0xf6f997c7, +0xc5a0932b, +0xf166f7c8, +0x36154c6a, +0xf7b7cf33, +0x679c51f1, +0x7f59a50b, +0xd5fb4a25, +0x40380bd3, +0x7f537928, +0x4139cf2a, +0xda61cbe0, +0xde8457e9, +0x9a6659ee, +0x5be71003, +0x61f03850, +0xd316924c, +0xd3e89d5c, +0x0bc98645, +0xce6a8224, +0xaebd87c3, +0xad75fd54, +0x276a0fb2, +0x7a56627d, +0xabff12ee, +0x98d59aef, +0x9da65969, +0x4d5aed8b, +0xc6916bf6, +0x4462a3f4, +0xffca6423, +0x8e29e367, +0x095a0c11, +0x79ad081c, +0x1a96de3c, +0x60087162, +0x5b6cad98, +0x5b870f4a, +0xcf918adf, +0x8683f17d, +0x7d7d7677, +0x551d0d43, +0xb9f7c8fb, +0x9614720c, +0xa40273e8, +0xd31e68df, +0x3c1e8780, +0x0027249e, +0xed8fd227, +0xa60fb11b, +0x8bc71f6f, +0xbc7c0455, +0xcd582db2, +0xbaa4950d, +0xb50fcbdd, +0xa0e3cdf4, +0xee136c88, +0xc447b26c, +0x7fd8b84d, +0x85891957, +0xcfcc2f2f, +0x08971228, +0xb6ea4616, +0x79f9b250, +0x2b014a8e, +0x8c310b96, +0xae6a5c60, +0x8ec2bb05, +0xc82f5ed3, +0xf7aa8702, +0x3914ff37, +0xec7a52c5, +0x24c7115e, +0xe9e434f6, +0x0c99456d, +0xb880325b, +0x6349f71a, +0xdb3b68b4, +0xc6a99810, +0x3a02d7e3, +0x44798a7b, +0xfba1fcc6, +0x37851802, +0xda010f4e, +0x369274f1, +0xd7b4be67, +0x7556a64d, +0x95c7ca6e, +0x6a28432f, +0xec8172ac, +0x40f12dec, +0xc3d3a208, +0x89b59e68, +0x3ad194f2, +0x1b2b29c6, +0x334ffae5, +0xf6325e57, +0x2307f235, +0x854c66a2, +0x941ce308, +0x26dc8fb3, +0xdd1dc0c8, +0x67c3c41c, +0x055a1754, +0xa080888d, +0xabd296c4, +0x6844cfba, +0x7e1e306c, +0xa199341c, +0xcd035898, +0x22953627, +0xd0aac166, +0xf84d29b9, +0xaae72406, +0x2cf22d50, +0x41e154e7, +0x4f7e1868, +0xfa29b9cd, +0xa92236e0, +0x24c4f55b, +0x61554adc, +0xc82d430e, +0x0d88f361, +0x3d7bdc64, +0x17d12bac, +0x9d68377e, +0x89fd938e, +0xa6b2b7dd, +0x6720ee65, +0x452c15aa, +0x3a577f18, +0x9fd6b2d2, +0x7860e8c2, +0x6468aa3b, +0x71255fbc, +0x07ad8cc8, +0x13b54e02, +0x045dbee7, +0xdbb06125, +0x38ae3144, +0x5f435b53, +0x7395aa5a, +0x16e660f6, +0x3f642e6d, +0x4a7cea85, +0x7d0e459f, +0x9f7c6165, +0xa2a875a9, +0xa968e73b, +0xcbed0885, +0x6dd77e12, +0xf2cabd03, +0x836e383a, +0x29e1bfe0, +0xf2ba4d61, +0xc1f8721b, +0xfbad0fe0, +0x53df48b5, +0x15bc5f5a, +0x54240ae3, +0xc48f727c, +0x7a2c817b, +0x55c19af6, +0x2652b7de, +0x8b494b80, +0x932e3232, +0x6789b4e7, +0x10d43450, +0xffca4d99, +0x3b5d1a6e, +0x5668a780, +0xd217d20e, +0x19f76cc2, +0xbaf8d598, +0xdf96df18, +0x627c2a03, +0x2a2cc064, +0xf0eafb27, +0x932744dd, +0x35ec5da4, +0xebbd2464, +0x66f88ac9, +0x8796dab7, +0x7e7aff27, +0x53bcbe3c, +0xf8bf615e, +0x932eb968, +0x09c78a60, +0xeac75ce8, +0xb5b8c8d8, +0xf7638b8f, +0xcd1fb588, +0x2ff851a7, +0xead0be57, +0x1df8b79d, +0x35aa33f8, +0x3232ba66, +0xbde21f08, +0x5794be6f, +0x66bad812, +0x550c136e, +0xa9bf4af0, +0x52a1471c, +0x67a2bca9, +0xc4b24145, +0x3fa56197, +0xbcf3c8ec, +0x7b109f0a, +0xb91fd9a3, +0xb1c4b7b8, +0x2798a820, +0x91314197, +0xb63b2ce5, +0xf2942b72, +0x7b4afd63, +0x7ae0b980, +0x59e127f7, +0x885c1255, +0x79649302, +0x4288c296, +0x1f67aee4, +0x5b91f88b, +0x22fdb73e, +0x4ee7406f, +0xf57686df, +0x133d1926, +0xd061099f, +0x1d54475d, +0x489f5faf, +0x032e3fa3, +0x21b7e821, +0x665cdac3, +0xd5ebf76a, +0xb0ff2550, +0x511e05f6, +0x9e919a31, +0xf3b2d762, +0x8bbfe0c5, +0x9741cb4d, +0x2f707aa1, +0x8efd7863, +0x0caca328, +0x070562b5, +0xe64cb9b5, +0x33dcfdcf, +0x3538ae4a, +0x64f31f4a, +0xaefa994b, +0x802f81a3, +0x3dfff95e, +0x0b09711b, +0x1dc4f76e, +0x903dd6db, +0x618da553, +0x9764784b, +0x147d8a75, +0xaa0418aa, +0x39c25938, +0xfc9e5482, +0x9e7e8029, +0x93fd29bb, +0x80180cee, +0x14ae2842, +0xd2cee3e7, +0x618b6d31, +0x27a0b919, +0x5295a85f, +0x6374fb05, +0x7eada45b, +0x3e906b3e, +0x38a851a8, +0xfa316127, +0x76e19578, +0x236fbfc2, +0x3a6571c2, +0x3c2c5539, +0x143d1f8a, +0xfcbb595f, +0x5eaadc2c, +0x3d024da7, +0x0a0a18ad, +0x588a889b, +0xa467d7ab, +0x034ea81e, +0x06963535, +0x5ff58cba, +0x2dafa002, +0x7c2e368b, +0xbe1e5498, +0xae81d1e3, +0x48e4e660, +0x63cb1157, +0x4dc1c9fd, +0xd7f5405e, +0xc0125ab3, +0xf4a4bbf6, +0x676a8aa6, +0x822bf9af, +0x82e37093, +0x7383a321, +0x2e5ae265, +0x4261cf90, +0x148eb42a, +0x69900a5a, +0x461462df, +0x6ff854b3, +0xd58c0b3b, +0xd6dc8e11, +0x487c7abf, +0xe8947b58, +0x019241fe, +0x43735949, +0x25d32297, +0x4a0f5672, +0xa8f2eb38, +0xf5a471ad, +0x618cf0d7, +0x51159de7, +0xe40df2fd, +0x41dc27b9, +0xe93d8beb, +0x239bca23, +0x44c8a67c, +0x3d5f865f, +0xade43fbc, +0x313aacc7, +0xf7102d88, +0x6038d233, +0x2a52bbae, +0xc09c5539, +0x69ce38e0, +0xac2c09ec, +0x52e23d4a, +0x337e20f2, +0xc7cf0697, +0x2d874cae, +0x939561ef, +0x26f61cf3, +0xdf5ed578, +0x282cac56, +0x4942dc09, +0x2eab1751, +0xd4d91ecb, +0x2b30f9b5, +0x3217139b, +0x802db770, +0x9220c0dd, +0xef3af5c8, +0xf5cd1aab, +0xb0b9dd0c, +0xc7f99bcb, +0xdd37fea2, +0xe55dfc0c, +0xd74557ce, +0x7cbdf342, +0x431a0dab, +0xe4861a65, +0x6a15f833, +0x6c66bc1d, +0xa8a0149a, +0xb27926ad, +0xb53e159c, +0xb8907fc0, +0x8a25541e, +0xae32fe35, +0xe5e33605, +0x850fff10, +0x0a5953cf, +0xd41d20dc, +0xeca215ad, +0x2de12465, +0xf0d9426e, +0xa67924b9, +0xd849049c, +0xcd7c0464, +0xc32a10cf, +0x5cdb9eb7, +0xe8fa7633, +0x2295530c, +0x13771264, +0xdc1b32c1, +0x2face71c, +0xf13aa99b, +0x9ee13cff, +0x60c31c09, +0xacd9694a, +0xb0552dd6, +0xebd9962b, +0x14f466e0, +0x443b7fab, +0x8a0b6504, +0xfe2cbe8a, +0x90adc983, +0x9a2b2599, +0x5ecc99b3, +0x6c4be4d2, +0x79e34d46, +0x9dba0209, +0x292130f0, +0x9c5fb73c, +0x131a0c25, +0xdfb29d0b, +0x16b47d4f, +0x24ac0b7a, +0x6789a855, +0xdcd4ca0b, +0x5fb12caf, +0xc6afbef3, +0x4c3a7be9, +0x532b298c, +0x6bb6db9e, +0xcd691c41, +0xf6cf0ff7, +0x6dcb56b6, +0x6dce6432, +0x7d57cda0, +0x4c02576d, +0x52afb12b, +0xe29cba24, +0x6597496d, +0x0a084001, +0xece19ca2, +0x6c10a54d, +0x6a51f482, +0xea072d1d, +0xa5dfa7f7, +0x28f53f79, +0x2d4de993, +0x077b8191, +0xd9b92dad, +0x9e6f976b, +0x205b954d, +0xa86c2feb, +0x8f275df1, +0xa13375ee, +0x68f6d714, +0x62420dbe, +0xcd820900, +0x84047499, +0x56466e1a, +0xbd1840df, +0x37dc9a60, +0xccaabd97, +0x9932848e, +0x3644d031, +0x101374cf, +0xe3807321, +0x6508837c, +0xb9572951, +0x2f316640, +0x258ec18c, +0x82517384, +0x0c5179c3, +0x59c10088, +0x6aa06576, +0x8fee267e, +0xa061f761, +0x340f48ab, +0xb15e1e3d, +0xa0337c2e, +0x83b7b0dd, +0x9b7ff905, +0x4dc13611, +0x9dec48d8, +0x82465214, +0x62d94d59, +0x127baca3, +0x939630a9, +0xf411b590, +0x649d4b01, +0xff799452, +0x83942db3, +0x8f4b2b7b, +0x281ee429, +0xfaa5825e, +0xf15c7c1d, +0x93302386, +0x54d4645e, +0xdfaa8150, +0x4ca4fe49, +0x1a8ff386, +0x9b84757d, +0x035dba4e, +0xae06ae24, +0x02a59c73, +0x9b95fb79, +0x4e177cac, +0x964ee4b7, +0x3a220153, +0x4c6e6ce9, +0x99147e80, +0x0b7bccd3, +0xb181ecf9, +0xf141d184, +0xed88e2e0, +0x7d637c53, +0x80f0d176, +0x38cfe541, +0x780f5ab0, +0x31d3f93e, +0x3d448793, +0x0d30bf9a, +0xc76a666a, +0x2147586c, +0x4bb0bf5e, +0x5b7c0c83, +0xf17eaf69, +0x8eb42510, +0x7f0ff7b7, +0x47ae41a1, +0xa11f6de7, +0x4a6d2265, +0x009a6569, +0x751fe0d8, +0x8d5d0a89, +0x5c2eb1ed, +0x9d7d2f25, +0xc6572433, +0x63fff3b6, +0x776598e8, +0x6070d1cc, +0x4dd76287, +0x046073f8, +0x8269b76c, +0x0c4efd3a, +0x2b4a425f, +0x2f078353, +0x16d8cc1f, +0xb674c851, +0xaf949db2, +0x1c5e6cc0, +0xf0edfa86, +0x9884f6e3, +0x72db7f32, +0x6109e3bb, +0x4839f3f2, +0x4aee1b72, +0xdd83b374, +0x2d556c7f, +0xbe2a92ce, +0xf02edc20, +0x6d898406, +0xd18b9781, +0x9bb7fcad, +0x0085aab2, +0xeb0af4dd, +0xb7d7abd4, +0x69d1d951, +0xd7988763, +0xf96b99b7, +0x3f279436, +0xbc1e7600, +0x8fbeae92, +0x1a90fc81, +0x228f7cc3, +0xbb835727, +0x6a69422d, +0x98d9d50b, +0x125a4d15, +0x79a9fcb7, +0x98889c19, +0xd05ed66b, +0x67a54297, +0x3143ff0f, +0xbd70d65a, +0xe9271782, +0x9265d9b2, +0x4658bfe8, +0xae909aa3, +0x2af761ea, +0x112fc6f6, +0x20fadc4f, +0x97c1f885, +0xb35ea25c, +0x49203110, +0x399c7e27, +0x53aa037e, +0xfc4fc904, +0xa7203f8b, +0x95aa17d3, +0x23180e9e, +0x8a6e8058, +0x8871b649, +0x7398eb48, +0x840d3ce1, +0x63307521, +0x744664ca, +0x3a3855a6, +0x641f8fe1, +0xb729ca61, +0xda13f604, +0xca197078, +0xc05af826, +0xa100d58d, +0x94c182a9, +0x6d1fa9ea, +0x6a4e07a7, +0x22e0b45e, +0xc1f09fe5, +0xcfb7a72c, +0xfc8a2718, +0x0881e9ff, +0xe14dc38e, +0x61dd2ea1, +0x9fe602d8, +0x2bfa8169, +0x6fe85bae, +0xbf83f424, +0x22ea4019, +0x6477586e, +0x7d31ba69, +0x6382309d, +0xf4547c65, +0x27685549, +0x7ebe0e3d, +0xe7084787, +0xbfe4aa2b, +0x7e15437f, +0xbf9a7c97, +0xc4e11fe0, +0xf76fcc77, +0x56b28631, +0xce0f1dd4, +0xecfb9290, +0x6f59f415, +0x0f573672, +0xaa05064d, +0x85b5592a, +0xea0f2bcf, +0x6939e47d, +0x07d1d028, +0x25fc219e, +0x8babaf4a, +0x1f41d382, +0xbe679ff9, +0x2e7676bb, +0xfd735dac, +0x00bf7558, +0x733d706e, +0xf2f08aa1, +0xec6b9575, +0x3c32379e, +0x380767f2, +0x3fc26095, +0xa8c455ce, +0xaba21348, +0x41a8501e, +0xbe9e3b9c, +0x0a2293f3, +0x2daff3c6, +0x7728fb91, +0x04a44ac3, +0xe30df029, +0x122de59e, +0xe7b8f5e7, +0xcfb6d692, +0x8875d2ce, +0x43858ce4, +0x984bd9d7, +0x97842bc7, +0x7bb98d75, +0x83be0ca5, +0x5ca28bb8, +0xa3ea0713, +0x7e79a595, +0x5b8d9eec, +0x2842ee33, +0xcfb3961d, +0x043212ce, +0xd8502ebb, +0x04c252c3, +0x099101e0, +0xb4719bd9, +0x8fc3947c, +0xdf2e8c7b, +0x04e4bfb6, +0x11f2d50a, +0xb0dee3b3, +0x8f16f056, +0x42608d2d, +0xd5a587f7, +0xe66b7336, +0x8195a067, +0x72fcf7d7, +0x40931904, +0x6989012f, +0xc35559d1, +0x05927ab9, +0x2f8dd75c, +0xdca09784, +0x5d7690f3, +0xc4c0fd69, +0x897bef96, +0x1f1d09f7, +0xa644c97b, +0x963be649, +0xd835aa72, +0x2618afb9, +0xeebd6f14, +0x4eb559e5, +0x71d91983, +0x5ffe0bd1, +0x31cf5724, +0x3e9004b6, +0xf27ff08f, +0x5b784f1f, +0xbacda9e9, +0x22d44100, +0x50423732, +0x30a39b5c, +0xe914b785, +0xa446803c, +0xba1add83, +0x36b4f54a, +0xb0656fcb, +0x8d26c060, +0xf3af0f12, +0x8a38b118, +0xa26a3cd2, +0x99bad390, +0x254cc6dc, +0xd1a9749b, +0x16e791b2, +0x1d327476, +0xa4efafc7, +0xf662e650, +0x8e5eb4dc, +0x0fe40c08, +0x59353cc8, +0xdbc1bb7a, +0x121b7d1d, +0x477b4aae, +0xda49f2b4, +0x542fb7b4, +0xef26fefc, +0xc590f8c3, +0x3d8b3755, +0xa977385f, +0xa424a04e, +0xdfce0f39, +0x37625078, +0x3e0edbca, +0xeb0a37d5, +0x07953c57, +0xc6e833da, +0x1e0414ac, +0x61272138, +0x0f4c24c0, +0xfdeb9d0b, +0xa788ba69, +0x23a925c4, +0xc907493b, +0x8974d5c0, +0xa49d5260, +0x1ffcdb30, +0x873bfdd9, +0x2b664cde, +0xf3d81e86, +0x518c445c, +0x8bc6417a, +0xe718b4a9, +0x43ad6ed2, +0xb939ac72, +0x904bd0ae, +0x56e14a3f, +0xc4ba30d3, +0x3dcb3cd6, +0x684d12a4, +0x8bcf6b85, +0x7d9a9c89, +0x7b6c282b, +0xe2ff110e, +0x8ff8518a, +0x05f3c503, +0x040308fe, +0x9767974c, +0x0e635744, +0x37952084, +0x23fd91e4, +0x992e9be2, +0x3553de7a, +0x8e251fef, +0x7b00285d, +0xddeba12d, +0x46427085, +0x109ea024, +0x6d540f82, +0x1f07a05d, +0x6bcbc9bc, +0x2e20faa8, +0x3dc9e488, +0xa2a7a974, +0xf6c4afe1, +0xe8994a63, +0x52eb5f66, +0x8b92738b, +0x70f20720, +0x821ab4f6, +0x84cb0e4a, +0x751ffac8, +0x1a6e4ee2, +0x0b26029b, +0xf8c65c0b, +0x862768da, +0x31912fb8, +0x3e7d9426, +0x643ad664, +0x90517336, +0x9e0a2899, +0x7cee130f, +0x629d8574, +0x1c3e7783, +0x08f4c32d, +0x4c367987, +0x0ee5df2d, +0xc97c5360, +0x7938b1a9, +0x06b6cfd6, +0xf4c5d842, +0x48118ecf, +0x21b760d4, +0x9cd3b05d, +0x3d627749, +0xeb6bf715, +0x72655479, +0x3810654e, +0x50869dd1, +0xd1914181, +0x47fc8c68, +0x87f75e93, +0xfbbd6ed4, +0xcdd372dd, +0x4f9e4e01, +0x449a0bfd, +0x6a55e6a6, +0x63082c04, +0x701cd4ee, +0x350e11d2, +0x51dfc65d, +0xd1d36149, +0x4d594c9e, +0xdba0fcf0, +0x48423070, +0x57d37906, +0x30ae1bf3, +0x01e66bd6, +0x5211e12f, +0x45a1bc7b, +0xe1b1009a, +0x073f3848, +0xf25af776, +0x1b7b7c7b, +0x6015a818, +0xf5334e54, +0xff439967, +0x6adf2910, +0x1e04f87d, +0xd56a2bda, +0x1a7b6121, +0x047e30e3, +0x46343afb, +0xe7de998a, +0x06d95aac, +0x018acda3, +0xc8471e17, +0x8e11c910, +0xc75863e5, +0x9b37ae19, +0x65a72157, +0xf675d7c9, +0x96ce670e, +0x00c4a9fd, +0xc7cefa92, +0xb9691a84, +0xb4431dec, +0x5e3691d8, +0xaa02c2a8, +0x12f9edb2, +0x9673cf20, +0xe0c7f419, +0x2402e782, +0x0d9161a0, +0xdb2b79bb, +0xaa562f3c, +0x5b684812, +0x10b5f3a0, +0xba321f1a, +0xbe9e1cdb, +0x93636292, +0x812cb7f3, +0x97b38a00, +0x4e664be5, +0xd3d2d54f, +0xb5b93f7a, +0x5c8b2524, +0x7dbaf8b0, +0xd2ab0028, +0x791a6fb5, +0x4062c23d, +0x9c2459e4, +0x3cd30c79, +0xb1704d10, +0xec9a16a9, +0x99826171, +0x6d50c5f1, +0x5c4bc6de, +0x00b41370, +0x56be863d, +0x94c22203, +0x3284784d, +0xb03e1301, +0xffed0352, +0xe94bab55, +0xf9d8e971, +0x585ac1f3, +0x284cf7f9, +0xf3626c2e, +0x3968906f, +0x7420f00a, +0xbcfd871f, +0x67671be3, +0x5ad73d27, +0x4589eb98, +0x2286fc46, +0xc631b2da, +0xfdd97dce, +0xf323e424, +0x98f2dfd5, +0xcae99cf4, +0x0db55b28, +0xfeed3798, +0x7a260bbb, +0x3fb4bd2e, +0x8c10898a, +0x2a647972, +0x9ce5e161, +0xbf7b0e16, +0x73c889dd, +0xa74954b2, +0x99ba90bb, +0x4b6a356c, +0xb1f64b26, +0x03f27e22, +0x4f40f482, +0xbc344b21, +0x4d31dd4f, +0x0d28b601, +0x7cc4ca0e, +0xa6b30d62, +0x1a8c3173, +0x08021c25, +0x2f917bdf, +0x904b9fbf, +0x94165619, +0xdc4d2f84, +0x8e700413, +0x801db770, +0x563994d5, +0x2613d5b6, +0xb01e882f, +0x805e9e51, +0xf9af7425, +0x70ab56a8, +0x21698572, +0xece2e986, +0x71889ed2, +0xa7709714, +0x0864f90a, +0x79cfff31, +0x3adda400, +0x42ee334f, +0x5a747764, +0x16bcfdbf, +0x1ab70e31, +0x5cf5986b, +0xc66dfa7e, +0x1dee3f70, +0x23d12f3b, +0x884bfa77, +0x7cbe9899, +0xc7052f49, +0xd42abcdf, +0x9bc7915b, +0x9d7d6a95, +0xcca8057f, +0xb6fd9eee, +0xa9626a37, +0xe2efe7ab, +0x662bdebc, +0x316ea76d, +0x0efca038, +0x2779e4c0, +0x94b3fe8a, +0xc8e4ef77, +0x29b8e50e, +0xac149226, +0x11e1914a, +0x52fd0e89, +0xa96b13dc, +0xed9f37d9, +0x9a802ee9, +0x0a37f080, +0x4c2c35ee, +0xaa4d0d21, +0x8de3ba57, +0xfa6faece, +0xa3866569, +0xaadd14a1, +0x15e1ff6a, +0x77d26cf6, +0x663b2ac0, +0xa27b1cde, +0xc501e1e2, +0x693faf73, +0xa485a9cb, +0x8f35de1b, +0x97c4cf3d, +0x3d81d36a, +0x60bf1ae6, +0x2df0d59f, +0xa1bf8a13, +0x56fa7c0b, +0x251a0075, +0x7a3dd7ff, +0xa25e86b9, +0x092a5aa1, +0xcf845ac7, +0x80e75c1f, +0x682940ae, +0x71849aa0, +0xcca77779, +0x37b35c88, +0x713a746a, +0xf53a1d1f, +0x7dd5449d, +0xcc982b90, +0xf49af10c, +0xb5432ce0, +0xce8b934b, +0x8fe8c419, +0x28c063e1, +0x019b8560, +0xfccaae28, +0x500d0a4d, +0x48cb5353, +0xd811cc4f, +0x05983031, +0x05aa856d, +0x4b6238c2, +0xb883800d, +0x22f311c2, +0x7ae7182d, +0x8990676e, +0xfde4f05a, +0x4c6055e0, +0xc5886afe, +0xb07c1482, +0x99ef5610, +0xc0325e3d, +0xa6bf6e7e, +0xa5ecacb5, +0x318c1171, +0x623d2db1, +0x448fa963, +0x5b4e1541, +0x61b8d261, +0x5f1b21dd, +0xe615897d, +0x89d7d1ba, +0x59c3f6a0, +0x6fffb41b, +0x60e19480, +0x4b85cce4, +0x3be69c3f, +0xc16b1e8a, +0x931d435d, +0xdcd3063e, +0x73e3b1e0, +0x9dd5e9e4, +0x63144743, +0x5a0cd444, +0x9f3c737d, +0x2aa0598b, +0xca203948, +0x15d4a7d3, +0xaefdd226, +0x5671b5a2, +0xb8dd2102, +0xa2c88594, +0x84eb5edc, +0x42912822, +0xa56cd4e0, +0x5011b473, +0xab27c6d3, +0xa8cdeeb0, +0x94138d16, +0x60c42c60, +0x5867c82a, +0x4d6b84e0, +0x4d6bdd44, +0xbe0edfea, +0x9c8f01ae, +0x8d0298a9, +0xca37f35c, +0xd62fe342, +0x7208699f, +0x0fabad4b, +0x46c59a49, +0xeaad5569, +0x4c795f8b, +0xda662203, +0x4af89f51, +0xe7c94a5f, +0x83a1256d, +0xa47001c8, +0x3ee865af, +0x68e268f5, +0x5b710d71, +0x471d71a4, +0x56ea4422, +0xc1463fd1, +0x26da2681, +0x3a21c453, +0xdd97e3eb, +0x58a98c77, +0x7a4217d3, +0x7b91c1d0, +0x445ad446, +0xba73b6eb, +0x40bb9178, +0xc6c37d38, +0xfe737b24, +0xcd9d1eec, +0x3563a99b, +0x44233392, +0x25ecaabf, +0x5b780ee3, +0x0016eb6a, +0xc6046d5b, +0x290cda6f, +0xc248681f, +0x229a5056, +0xccc085be, +0x295f7557, +0x427a14da, +0x744dec8c, +0x91ae6274, +0x0510b7c5, +0x42414729, +0x29375cda, +0x47e414f7, +0x53725cd5, +0x046c335e, +0xf4b31918, +0x45c3ec2a, +0x0426dc80, +0xc11d0f8b, +0xae9d31cf, +0x59604f57, +0xebeb5183, +0xa78cdfba, +0xd42ba510, +0x437e80b0, +0xa81fec27, +0x6ebb1fb1, +0x7a1a8970, +0x6cbedf19, +0x55cf2b24, +0xdd7e91c9, +0x360c39f2, +0xc0004780, +0x618e0a9b, +0x877648e8, +0x61872f92, +0xdb8dacf8, +0x0e086a5a, +0x072f4b09, +0x160cc002, +0x6adec28a, +0xe0c2ee10, +0xfc6ecdc0, +0x688aa2e8, +0x7a4d066c, +0xd5216732, +0x067184e7, +0xd551dbfe, +0xca461a98, +0xbb5eaf1e, +0x06714362, +0x14bebdcf, +0x54d960b0, +0x4846294c, +0x4e6baceb, +0x89641576, +0xcd33464f, +0x40c3a898, +0xf7d144b1, +0x148d2773, +0xf11d5399, +0xcddf601d, +0xc5f886ab, +0x3122c0d6, +0xd729f584, +0xd2f933e6, +0x5b6e270d, +0x173a91f0, +0xb30ae928, +0xb45237ca, +0x3a7768b2, +0x497e3239, +0xbd1cc2ea, +0x1f092a4b, +0xdd67eca6, +0x2ede8b39, +0xa0347745, +0x3141defa, +0x0f36cd4c, +0x111e7b97, +0x3564dc31, +0xf7cddab3, +0x81fb56bd, +0xc1645196, +0x674bc530, +0x492930ca, +0xf6146a3f, +0xebc5dbff, +0xdea0d56c, +0x4c8bf46f, +0xe2513555, +0x79085bb2, +0x3bf8c779, +0x1fb8f114, +0xd65ab222, +0xc8f80f1a, +0xec0c7c31, +0x18165ea4, +0xdda0f4ec, +0xd6b9e775, +0xe085ae8d, +0x0918a7a9, +0xb4a35935, +0x083cde0c, +0x95000ad9, +0x491522a4, +0x2455e3bc, +0xd0670edc, +0x3b921a5a, +0x1f3d4fcb, +0xb3057425, +0x328953c1, +0xebe81d96, +0x1a4d6fb3, +0x20ab3ded, +0xca471d28, +0x713bf71b, +0x3b51b814, +0x8762b045, +0x326a3ce3, +0x6d1e67fd, +0x2a32b69d, +0x1ad7c9c2, +0xccdc68ea, +0x9e156665, +0xc52cecd2, +0xdb5b79fa, +0x55e8a27c, +0x469158a9, +0xe7e3b0c8, +0x0fb9bcda, +0x23517fd7, +0x1993f6a9, +0xc3e8051e, +0x730ef15b, +0x387229e9, +0x6067ea20, +0x78b99439, +0xd603e423, +0x56277a49, +0xcfc04b8b, +0x60c619b3, +0x5570bbe6, +0x5be94c25, +0x56002fb1, +0xea379e6b, +0x3a11147b, +0x4d5da516, +0x915ef5ee, +0x4df95522, +0xf4cfa5b8, +0x66d3b343, +0x1db9bd86, +0x54f27223, +0xd04c0d06, +0xe7cca3e1, +0x0d989bf9, +0xbd4d3411, +0x745cbfd6, +0x746dd60f, +0xf2a1b7a8, +0x1e5aca4e, +0x9faf1df5, +0xa151abd5, +0xc46e36c1, +0x2ec2ccee, +0x7b277efc, +0xdc2fa4d3, +0x4430524a, +0x662145d7, +0xa422bd9a, +0xa4ae57a3, +0x54e860ac, +0x29108621, +0xec562f1e, +0x5fc533af, +0x2d6a1ec4, +0xafcb786c, +0x10de87ff, +0xc4e45f8e, +0x1955ee61, +0x0065ff92, +0x023f449e, +0xaeff904c, +0xa11f96f3, +0xceac2453, +0x44e31218, +0x1c8d63bc, +0xa2bf722b, +0xf095d051, +0x77dfbc8a, +0x7c87bc61, +0xcd3f90d9, +0x0cf7bd75, +0xcbba4195, +0xf85965b8, +0xbab9a6b6, +0x9b69b565, +0x5a9e486c, +0x272066d8, +0xaa7f0b2e, +0x75594c66, +0xa8c3f0a7, +0x8e5f1d88, +0xb394b8bb, +0x14aa2992, +0xa1a80dff, +0x680d39e6, +0xf57f31c5, +0x493b2a76, +0xb0802ba1, +0x037725df, +0xe68872b9, +0x41374472, +0x315193fe, +0x48bcd2d9, +0x4c1db871, +0xb1121ac7, +0xb0338c18, +0x5e78e876, +0x472b4087, +0x444f05e5, +0x3448937d, +0xbee339ba, +0x34ef4de5, +0xa50caae7, +0xd09f1171, +0x6222ed73, +0x9b19a44b, +0x3238d423, +0xb109c0a1, +0x77e3d222, +0x687f5ab4, +0x53ee49af, +0xa9273fcb, +0x1038e180, +0x64035542, +0x1b6df0a2, +0x4a1375a8, +0x10e9ff23, +0x2fc79ef0, +0x1dde2f67, +0x9687e82b, +0x83610603, +0x829828d3, +0x33814321, +0xd96607f9, +0xc1babe89, +0xfa78ef13, +0x2d68e79d, +0x15ad58f4, +0x0bf854c2, +0xd91580e0, +0xadf7db7d, +0x2beca6d2, +0xc816d901, +0xa5e84268, +0xe2cf282a, +0x98c64086, +0x971cd243, +0x432de912, +0x785e82fe, +0x2c6b15e5, +0x7e9f65d5, +0xd048d793, +0x55f363ab, +0x4d2e633d, +0x91024d2a, +0xeaea7af5, +0x48828fe3, +0xa980167f, +0xddf0ccc8, +0x3d2c46a4, +0x1a41f715, +0xc1dbad22, +0x5148b2b0, +0xd17d8c4e, +0xef21d280, +0x5d3ec1d7, +0x79986f24, +0x25e21f39, +0x13720aa1, +0xcfd90d6b, +0xd3685d7d, +0x53d539e5, +0x0d308ad6, +0xfb47e6c8, +0x4c78890d, +0x40dc8a11, +0x32fddceb, +0x0d51e6af, +0xa37d4e8b, +0x9c4351c0, +0x1a46d1d0, +0x5c1b992d, +0x99c4f185, +0x36f96f16, +0xb2ec2eac, +0x95954772, +0xfda810e7, +0xc3b4eafb, +0x205bc294, +0xf2a36c1b, +0x05b7dd30, +0x0aa6dc82, +0x5c32aa48, +0xf3b324da, +0x16e1bba2, +0x3cc281e3, +0x0244ae5d, +0x1eabf99f, +0x11173dba, +0x253815d2, +0xd97a152b, +0x04eade27, +0xd4ece593, +0xc9a9e6eb, +0x8d1674dc, +0x5d87f438, +0x2f601fb7, +0x3ca301fa, +0xfdbe95ec, +0xe814d874, +0x63113610, +0x610d260d, +0x02b3b023, +0xf157cc0b, +0x81600cb1, +0x70d430f8, +0x1b2dfa78, +0x9adbdac8, +0x9a877e88, +0xfc7e30ba, +0xa0ce7487, +0x0c112ccf, +0xfc76959b, +0x3dc88121, +0xe20a0cad, +0x6aebcf74, +0xac977763, +0x9699d806, +0xd7d8c9c6, +0x25bd0dbd, +0x9994c600, +0x39233c7c, +0x07d87aac, +0xb27e3e57, +0x023e5730, +0xc4bfe06f, +0xb08bfd59, +0xabfe1b44, +0x6ce45033, +0xe878eb19, +0xf11a75a5, +0x639d6e36, +0x75f4e245, +0x846c05ed, +0x7839b96b, +0x33a935ce, +0xd88dc979, +0x6452b884, +0x2b8434da, +0xfcb4e612, +0xc44848bb, +0xd46cd579, +0x5b40fdb8, +0x2ebc0c1e, +0x20bbec0a, +0xbf6b146c, +0x32d134f5, +0x226271d8, +0xfe1a75fd, +0xdab9eee4, +0xcda298b9, +0x21d99c45, +0xe6cddb99, +0xc225fc00, +0xf2b5a9b5, +0x2ae7e890, +0xadb0edb1, +0x5b71a1e9, +0x8834cb44, +0xaed3cd20, +0x2a9d863b, +0x15d72971, +0xcf5c1cde, +0x977bf6cd, +0x78baab90, +0xaf2a8570, +0xc4be7f4a, +0x069089f1, +0x8f5370fe, +0xe0b4970a, +0xa8f9a7b2, +0xba922445, +0x6a8d5e3c, +0x87501c5f, +0x531718dd, +0xa319b10c, +0x8b34d8b0, +0xe7898516, +0x3fa06e37, +0x700daf3e, +0x584d1531, +0x46d80966, +0x65e6a2b3, +0xd63191af, +0xf6e2de8f, +0xbd5d4b86, +0x5c4dc35d, +0x024be56e, +0xdc912365, +0x861aaeee, +0xd857bc93, +0x2d1249d1, +0xa3709da6, +0xf1660aed, +0x1a8d1dae, +0xff335b9b, +0x5ac7505c, +0x8f826eb0, +0xa5690e17, +0x08c545a1, +0xadac6c55, +0x9ea02738, +0x140f8ae5, +0x07b7cb5a, +0x59c4a514, +0x90614b65, +0x2beb35f6, +0xe74ba759, +0x61ce437a, +0x35782099, +0x08a88095, +0x3fda7850, +0xe3387486, +0x52fd2fc5, +0x2469d5a0, +0xedd8edcc, +0x7455d645, +0xcb6aac35, +0xeff214e2, +0x4036268c, +0x82fc3599, +0x59456c9f, +0x6e7eee77, +0xbdf50a68, +0x3965cb1d, +0x66a08776, +0x06ee0b16, +0x8341cbf8, +0x827a050b, +0xec0372fb, +0xa7d38aa3, +0x08b3b232, +0x1b216b12, +0x531c3fd2, +0xfb4dc788, +0xf26599dc, +0x29c5a2bc, +0xa6c5a1cd, +0x498e9909, +0x5c281289, +0x5c156c1b, +0xbc5662c5, +0x1e0f2e1f, +0xcc40736a, +0x44abe168, +0x14ab0357, +0xdf537eca, +0xfc60146e, +0xacf8e11d, +0xaa774046, +0x8e754161, +0x338b98bc, +0xb761bc29, +0x6570fe1b, +0xd359db4e, +0xd6e40b2b, +0xa5475b05, +0x088c43f2, +0xa57263db, +0x162f159a, +0xa20587e1, +0x685bf3a3, +0x3df59752, +0x9486eda9, +0x7d65f080, +0x7aae9965, +0xe968303e, +0x9f2d78f0, +0x0540faec, +0x0a4b2079, +0x59dca9b8, +0xde92723d, +0x75208e9f, +0x109b7b67, +0xfd6cbbb4, +0xe24ecdcd, +0xa99dd6ce, +0xac3dbe4d, +0x3f3a21d1, +0x309fef9f, +0xd2eb9081, +0xd7dd9c0b, +0xcc58d47c, +0x5a77c160, +0x9242f93c, +0xe73e953b, +0x28b8238f, +0x85b80879, +0x3e5e03f3, +0xde17db16, +0xa6136fa9, +0x6c1d2bc5, +0x22e2c97d, +0x3c5e24c3, +0xbfcf6db3, +0x2203aa82, +0x38e1daf3, +0xd8474f92, +0x16ba453a, +0xb8abe4d6, +0x1506de29, +0x84dda71b, +0xb2cd03c0, +0xecb98f2e, +0x8abc7810, +0x4215a395, +0x6fc54bb0, +0x0ac9ecef, +0xfda5886f, +0x43f6a018, +0x37cbe24e, +0x185e94a3, +0x5fe47359, +0x14ebbe05, +0x64c0c8c1, +0x1e74b934, +0x6a788ef4, +0x91b81288, +0xe7ed42a1, +0x9c112377, +0xd155c181, +0xb152921a, +0x132d187e, +0xb4aec66f, +0xde00fb1a, +0xd0ec63a4, +0xe65c7242, +0x79492872, +0xfd52b01d, +0x96d857d4, +0x0b2255a5, +0xd9b966f2, +0xd297a272, +0xecc0c5e9, +0x631edcfa, +0x8e70d262, +0x55b67a46, +0xa25f5c5d, +0xb1b2b895, +0xa37684c7, +0xb3201998, +0x021e0b78, +0x776e9c4f, +0xb2b3b97f, +0xf5059e45, +0x2d4c6e66, +0x491b0827, +0xd3cf1eb9, +0x1dbf4795, +0x0da7f465, +0x62302ece, +0x3768d593, +0xa991f46d, +0xa89a596c, +0xc65b4171, +0xa8d585b2, +0xe2b47ea7, +0x459adfb9, +0x59655e19, +0x248c0a65, +0x669b84dc, +0x48e6ab43, +0x1a29b3df, +0x39a7ff31, +0xf1f64595, +0x046ad934, +0x424471bf, +0x0a4e8958, +0xea8834b2, +0xee85d697, +0x917c4d01, +0x5b45c43a, +0x608ab470, +0xcfa3750c, +0xf85c00d2, +0xc8bd2e4f, +0x272ec6e4, +0xc171aff1, +0x9faf102e, +0x5dd6a72a, +0xaa65ba0b, +0xcf2187b7, +0xb255dfef, +0x4214d187, +0xfcd4b2d0, +0x416febcd, +0x0b924cdb, +0xce60a151, +0x12b20683, +0xbfb773ab, +0x27b69b5d, +0x7e40b541, +0x115a3bb3, +0xbf022fd6, +0xaea790d3, +0x2fa55d3c, +0x32c28543, +0xd28e7d25, +0x645d2d16, +0x4690a0aa, +0xc10f102c, +0xb2690ace, +0x609124f8, +0x9fff5d6e, +0x3aa4e53a, +0xcf03bb98, +0xf25b41f8, +0xabc8da2a, +0xe1359588, +0x51f27b32, +0xcd13a046, +0xa6f28cc8, +0xd470582d, +0x3a8ee602, +0xe73a20a2, +0x61cc29c9, +0xbdb1ed2b, +0xcc9d7fa2, +0x63b64157, +0xe6c0f5df, +0xa42bd862, +0xcba3bc22, +0x950f57f0, +0x6a27099c, +0x26c05222, +0xf0882686, +0x16527f7d, +0xfa637cc2, +0xd301e5ab, +0x1241e056, +0xc8c34d7d, +0x604d9b48, +0xdb17aa6f, +0x1f177a4b, +0xf9b7b366, +0x81ed6a43, +0x96f26e89, +0xd96c90b7, +0x5e8e42a7, +0xc3708f60, +0xee984b27, +0x96b816d1, +0xa3c64cfd, +0x31755f32, +0x4703a775, +0x73e1a67e, +0x83661172, +0x899bfd7a, +0x9b1d07a1, +0x6a524eb0, +0xe47fe7f9, +0x20927662, +0xdd217b1a, +0xf46f2eec, +0xc13c7ba5, +0xa8424a78, +0x354df21e, +0x560f7c91, +0x392ef02d, +0xca3cfca0, +0x3d800466, +0xf89fb824, +0x2d9e8c22, +0xac10df49, +0xee510248, +0x8937d701, +0x0ce7cb83, +0x473147e9, +0x0d0ca69b, +0xc689d712, +0x1bd4dccc, +0x81307360, +0x1a5e96df, +0x0db7837e, +0xa78c5c80, +0xcf2a6e1a, +0x94ab01ad, +0x441c16d9, +0x9a28ea08, +0x0b80d982, +0x5e10fbef, +0x3aee0ba2, +0x6342eb1d, +0x5e6498f4, +0xb832f129, +0x0c00093e, +0x822ac094, +0xa6563855, +0x26c3e1cf, +0x657f34cb, +0x829aef03, +0xf8dad002, +0x0bda5eb5, +0xa799aae2, +0x0a09f07f, +0xc69ebd8d, +0x6f4ef82a, +0x27a03786, +0x9f94afd2, +0xe4b5c80a, +0x588910ce, +0x746c42e6, +0x5bdd3425, +0x896cb1b3, +0xbbefa0e3, +0x418eeee8, +0xc590dc74, +0xcbdcd884, +0x50ab3606, +0x0c2d9322, +0x266143b2, +0xdcf243a8, +0xb0a58d7c, +0xfc772721, +0x573a8c41, +0x5a7b5d60, +0x412018a0, +0xddc3d43c, +0x87bb9691, +0x34df1cd9, +0xf3747a68, +0x1ccc7555, +0xe7e39e22, +0x05f207b1, +0x947d7042, +0xa26788c0, +0xbee1e89e, +0xaeb0b6ee, +0xc7124f1e, +0x71ce0b92, +0x975fef34, +0x9514734a, +0x23fe5b29, +0x115bef21, +0x88370198, +0x091ff51d, +0x4f413410, +0x0bc1c9fd, +0x71b3ac00, +0x5243cd2f, +0xc446f05b, +0x5ae39437, +0x84c21147, +0x6f144cd3, +0x86bb383e, +0x2a6ed20b, +0x8ba27822, +0x90c7505d, +0x658df477, +0x4eb2de79, +0x9d31f7fa, +0x6a7df882, +0xe320ddb3, +0x88d5c042, +0x60c5d809, +0xb33680a9, +0x87aee19d, +0x669959a6, +0x36f52d9c, +0x87b5fbc9, +0x067fb3e8, +0xc9dedd8c, +0x262d7206, +0x671318b5, +0x2ffa3023, +0x68aff73c, +0x5baa30c1, +0xab497003, +0x0ab96cfb, +0xccb4a078, +0x6bd90454, +0x0a001901, +0xf1c35263, +0x765e6045, +0x608a8e2e, +0xdd14ec9e, +0x63f3d986, +0xabc16219, +0x9896e89e, +0x3c3ea017, +0x512ed7e0, +0xed70870c, +0xb37f20fc, +0x31a5d951, +0x65f61dff, +0x75d238e3, +0x342c4ed4, +0x0afadb07, +0x190a6c2c, +0x65bbf547, +0x9ec7b532, +0x3d19daa7, +0x71fa5360, +0x0f1ade1e, +0xc12324df, +0xb5ddfd03, +0xd689b0e3, +0x75436e36, +0xe32cf010, +0xf0cc09ad, +0x92c51a2e, +0xd9465974, +0x12ec0166, +0xb728eb6a, +0xe7d8bb19, +0xe0247047, +0x08c87de0, +0xb62c7a1e, +0xa935cf17, +0xd7fa21a6, +0x8239bd26, +0x918fdcf1, +0x144e3730, +0x1209897f, +0x6861c79b, +0xd4c1287b, +0x4522395a, +0x4b33d469, +0x57327189, +0x7ba51cc3, +0xde483c66, +0xbb2f1e0d, +0x75ceb760, +0x811b9126, +0x920374d2, +0x51a5e54d, +0x2ed87fa4, +0x05f6b939, +0x09a817fb, +0xf50f76b3, +0xc87abf3b, +0x625f8648, +0x75ca8bbf, +0x3f5d197b, +0xaa45d572, +0x8813119c, +0x93f9aca1, +0x82c5bed4, +0xb84a66f8, +0x08412cd1, +0xafb3a7e7, +0x15674c45, +0x748da037, +0x195c9214, +0x1dea4d31, +0x2894dd59, +0xf81a8eb7, +0xc60b7eb0, +0x122a3a2d, +0x53d3c511, +0x4ac5d832, +0x864eab8f, +0x52e8ae77, +0xfb9861d4, +0xdd6206ea, +0x4bc59478, +0xc1c6c5ba, +0xa0997d47, +0x9c460e93, +0xab63905b, +0x5584001c, +0x4f088c59, +0x4088932a, +0x004da7e0, +0x8276fd79, +0xde48960c, +0xacb9b1bf, +0xc1fc3ff9, +0x4408f272, +0xd3318c69, +0x6683d230, +0x203de9aa, +0xf7b832dc, +0x209aebdb, +0x4383a10d, +0x158b3e46, +0xf6c8d50c, +0xf832efdb, +0x3ee960e1, +0x8b27ea4a, +0xbe6a3f0f, +0xe449285d, +0x2363775e, +0x3df375a7, +0x88bb2a70, +0x4299a858, +0x2667901d, +0xf6474f30, +0x4944637f, +0x830ebd92, +0x3c55743c, +0x5c47da80, +0xa39d9da0, +0xde164b71, +0x5bf08ebd, +0x0b13a279, +0xb4e21e22, +0x9ab21e8e, +0x3866bb99, +0x48300958, +0x5f7e6efc, +0x21341be1, +0x21cc41fd, +0xec1cdfdf, +0xfef4e029, +0x5f9c4b7f, +0x90e1fd00, +0x048d89e2, +0xa1934580, +0x2e1cc80e, +0x172d401d, +0x993875a2, +0x2e3f7d6c, +0x1f962001, +0x1549808b, +0xe438e999, +0x351e5548, +0x1b035dfb, +0xf481ab69, +0x5296125c, +0xa9556519, +0xed8ce324, +0xda4ec6b9, +0x20e81934, +0x49d4366b, +0x6db90ee5, +0x7e9035db, +0x2ed57e71, +0x169da788, +0x07ee66a1, +0x68334fc7, +0xd9e2e573, +0xb044ba42, +0x9e8edceb, +0xbbcb49ab, +0x2a35d852, +0xe61255dc, +0xf65c310c, +0x877225b9, +0xba4db05b, +0x2c8160f5, +0xc83ded1a, +0xe822cffb, +0x1f8bcd20, +0x44bc1f51, +0x8d0a84f2, +0x17def53e, +0x8e823b1c, +0xdae55f58, +0xc668c8ed, +0xfe84c1a8, +0xd4e0a7ee, +0x92d630a3, +0x375e4bac, +0x42242bc4, +0xde6f982b, +0x873fa8c4, +0x85907e2e, +0x99c088b0, +0x31c4c395, +0x15946851, +0xbcd86243, +0xd2d08940, +0x2100e169, +0x5226ef76, +0x0edd8272, +0x68e58022, +0x331227cb, +0x19fbb92e, +0xab524463, +0xf846873e, +0x9b5a8618, +0x5bbf7d35, +0x7df94b82, +0x429bce8f, +0x94457726, +0xc2da6ca9, +0xbf6baf95, +0x8bcd3521, +0xbd6890e9, +0x38876391, +0xe6ba495b, +0x25285c5f, +0x56307e8e, +0xdf992b0d, +0x56f7896a, +0x25c3034e, +0xdf8eadd0, +0xe5a6d51b, +0x3e0b2543, +0xd389c2ed, +0x49a2b135, +0xfb801199, +0xae849a2d, +0x06c27527, +0x13cb07ef, +0xa28c21f1, +0x38ee161a, +0x2dcd9084, +0x134e0a49, +0xf5e3eb60, +0xdc87952c, +0xb329dca5, +0x7e0494bb, +0x2f091e4f, +0x164ed7f8, +0x5ccc2ce8, +0x420f703b, +0x736ca290, +0x3d7d0cd6, +0xacccde0a, +0x1708497c, +0xbeabea44, +0x03d48f85, +0x3ced3485, +0x0ba5b232, +0x9f7781d0, +0x2439cd3f, +0xad7b9730, +0xf58204a7, +0x88230eb7, +0x0fc227e6, +0x9cb26cce, +0x972ddbfd, +0x8a3f0a3d, +0x23087916, +0x08a5b41e, +0xbe37bf55, +0xf1b51874, +0x368db65b, +0xac7d785e, +0x6cd26a2a, +0xfe56a2b4, +0x86a0c764, +0xe68f4887, +0x1f78a7f4, +0x579e0084, +0xfdecb0e7, +0x66ced7b1, +0x5f428dc9, +0xf726b752, +0x1fd2b428, +0x93c6e4b9, +0x00b89430, +0xf251c19a, +0x07fa8332, +0xf72eabfb, +0xa8910e0e, +0x3109451c, +0x091c8899, +0x33ca34a3, +0x2523da12, +0xc851468a, +0x80510d4a, +0x2cc67eb1, +0xaec667f5, +0xa2760b9c, +0x17469ab7, +0x1226c4b4, +0x435d5fb0, +0x204ecfbe, +0xb0690c71, +0x8f8000ad, +0x8e2f0730, +0x684206b7, +0xe58cd43c, +0x97a5ea60, +0x0cf80193, +0x764d441b, +0x59383225, +0x382816fe, +0xb5a9cfdf, +0xf074e619, +0x6e70eee3, +0xf2365517, +0x11be0ec9, +0xe7799d02, +0x81f5fbee, +0x505ca6bb, +0x86b0ee47, +0x08e04795, +0x9576b3fa, +0x373f47dc, +0x0145c355, +0x621ca5e7, +0xb530bce6, +0xeccac783, +0x6a2ab6c5, +0xf40c3d30, +0x8bedb928, +0x1ce9ad96, +0xab3f02d0, +0x2c2d7702, +0x80994995, +0x5ee3afc3, +0x3ab88077, +0x67fd5b44, +0xc69dfb75, +0x0245a38b, +0x89cafc4f, +0x59378235, +0xab4929f0, +0xd920d6c2, +0x89bcb9b0, +0xc4ff8282, +0xd4265d26, +0x5de45f1f, +0x0475cfd1, +0x7b0b8a4f, +0xa51e44e7, +0xd7790b32, +0xeab3854e, +0x42df557b, +0x4826893c, +0x987080a1, +0x6288dd5e, +0xd8633e29, +0xd1d1bf74, +0xe5df04d5, +0x292c8552, +0xbcbc85d4, +0xbd226c8c, +0xa40729ff, +0x5d1124bb, +0x9a3c9b0f, +0x92cdbd58, +0x1c300c6b, +0x19bf5ba3, +0x87593046, +0xb59b9011, +0x663ebe0b, +0xba7be463, +0xadcc2d18, +0x370c6898, +0x939a196a, +0x2e065975, +0x6a86f6a2, +0x19035725, +0x2612697e, +0x20766142, +0xac9ffd45, +0xf5ca06a5, +0x308975ae, +0x308e5d07, +0x234f9b9e, +0x68facc78, +0x7c9dd9fb, +0xd8aa203b, +0x585d2b05, +0x02757d23, +0x6202d677, +0x76587dbf, +0x3e7a67fa, +0xda461e57, +0x94f4a96b, +0x96a6c427, +0x7ed91e98, +0x9867cfd0, +0x1dbc5280, +0xbe4f1397, +0x47cee1c3, +0x8b162ef1, +0xea0c931f, +0x52a7834e, +0x1e2e45a6, +0x26c2004d, +0x79aa8d70, +0x26a4b2f9, +0xd4cbab1e, +0x9e1cca93, +0x406df9d6, +0x0e0f0e43, +0x2b0851f2, +0x95beeabb, +0xad444214, +0xe42649ea, +0x56ca3474, +0x4d8c55d0, +0x05ac1881, +0xcda16711, +0xabb6dd8a, +0x3cee34d0, +0x9580a987, +0xd9e35bba, +0xcd2a667d, +0x8de19c88, +0xab17e9e9, +0x536184c4, +0xb3988226, +0xb952e997, +0xff411dc7, +0x51ad95bf, +0x32d1b6e5, +0xef7f3f1d, +0xb8962b16, +0x97bff893, +0x7d4f5655, +0xddaac9e1, +0x5ff31929, +0x37173c2f, +0x8b2e1566, +0x9813da81, +0x72c2e65c, +0x8a728ef8, +0x101aaadb, +0x00f07c96, +0x7aac687b, +0x987fedd1, +0x4ec94096, +0x4a6d222f, +0x1d01805c, +0x1bb5b077, +0x7480fc5c, +0x28de4657, +0x1d8b5904, +0x6278cdcd, +0xcea9c84b, +0xddb02d71, +0x24225863, +0x5202d861, +0x40d2f91d, +0xbf841d5e, +0x42e39eaf, +0x01286118, +0xf6a3b690, +0xacb43256, +0x392b2d4f, +0x027e2d28, +0x5053d10f, +0x1477d9cc, +0x0dddedb1, +0x39e50f22, +0xfac9cbbb, +0x4ae3e653, +0xf9991eb1, +0x26183081, +0xea8959f0, +0xaef2f2c4, +0x990f4783, +0xffaba73e, +0x874cd6c4, +0xb8db168a, +0x4fc5e20b, +0xe17f70c0, +0x69bc4e92, +0xb4d5ab75, +0x9aa0089a, +0xc5588a0e, +0x4d4e4786, +0x733c4db5, +0x072a8061, +0xecf65e76, +0x3c6f9dd0, +0xf2a5b60d, +0xe43dd87b, +0x25f2caec, +0xe8fa0609, +0x659367b2, +0x2eb28bd9, +0xe7e07ee0, +0xde4e4eda, +0x4adf0ba3, +0x85331f57, +0xdd8d2859, +0x28bd28b5, +0x01bfbd92, +0xa7e664ef, +0xba7dd492, +0xa225f0ab, +0xa2e269f8, +0x1903841c, +0x5218e2ef, +0xef83c0af, +0xadbeb96e, +0x831bf48b, +0xd9e9ce62, +0x8c059389, +0xcdbf5d97, +0xc865f10d, +0xded2d491, +0x5ad1793a, +0x07d7b9e2, +0x538e9837, +0x1fa4ff12, +0x3a36fc5c, +0x3172849d, +0x847bdb82, +0xaa83b1c8, +0x705349be, +0xa5e1d28a, +0xae85a106, +0x0d71d765, +0x5c8533a8, +0x77e3e11c, +0x700582ee, +0x14c8ef7a, +0xc53755e0, +0x95bbaf81, +0x4e0d51f6, +0x610921fb, +0x6f2d8629, +0xf24abd8e, +0xfaaac546, +0x1daf3c4b, +0x9fb8d937, +0xe77d50f0, +0x0a3b91fd, +0x36ade707, +0x17c4e14c, +0xd44f2262, +0x3347d1d7, +0x61700762, +0xbc336a56, +0x08846b57, +0xff6973bb, +0x039fbb0c, +0xee8d4ec8, +0xae6ee4c9, +0xfe8f1ccc, +0xcc515660, +0x13d2f4e2, +0xabd05036, +0x83551d50, +0x88152099, +0x41ce38ba, +0xf44df051, +0xb49fd6e0, +0x051afc10, +0x4251f278, +0x6de8e6c4, +0xe1c16f12, +0x491069b5, +0x3590c4bf, +0x2747f107, +0xd3322b60, +0x62121172, +0xe3b7eb7e, +0xfdd2a415, +0x54e91cc6, +0x7753cf3d, +0x20ee7a8e, +0x759bec02, +0xaa090de3, +0x40450ad5, +0xf14c797d, +0x451b25c9, +0x5dd21a75, +0x9ae92891, +0x577d25bf, +0x24278806, +0xc2dd48d6, +0xceb89d40, +0x0ef67733, +0x39da8ab9, +0x06128488, +0x0e90a9b4, +0x18e24bd2, +0xc097896c, +0x974d5f02, +0xb2113d64, +0x4ce6bb54, +0x84bb73df, +0x15dd45b1, +0xfdbe513b, +0xf73c5609, +0x8518dfb2, +0xeb972b5d, +0x9f382379, +0xa3ecb304, +0x23e8d8e4, +0xeeb410bc, +0xe78af437, +0xe460eecc, +0x7cc5b817, +0xcc341005, +0x346804fe, +0x610ef590, +0xd2d69a4d, +0xcffdaf20, +0xc3bd2a46, +0xc7656af6, +0xf137f20d, +0xd0460541, +0xdd16616b, +0x80296db0, +0x9da5889d, +0x114736cd, +0xcb22c686, +0xb0a9e01a, +0xf8b390c9, +0x044586b1, +0xe6e52e0a, +0x6ca1b9e1, +0xadcec13d, +0x3e8ad43b, +0x4d64bd1e, +0x65315aa9, +0xf1ee47c4, +0x5cb95807, +0x78774795, +0xa02eff5d, +0xfe7d50f8, +0x38ea2621, +0x83a062de, +0x40e03587, +0x45a96477, +0xcc6a04e8, +0x080831b9, +0x6bb25d77, +0x824c9b99, +0x466954a7, +0x4f995d9c, +0x6be1ccbe, +0xdf3af0bd, +0xab9e099c, +0x6feb1a3c, +0x144c89b6, +0xfe82bad6, +0x2ebea94b, +0x9bf5ba8a, +0xd7995451, +0x1313cc45, +0x2a52626c, +0x23fc431e, +0xcdfaa6f4, +0x68c767f3, +0x054a43e2, +0xc11cef1a, +0x2b7fb62b, +0xf0321a5f, +0x97519013, +0x8fd2dcee, +0x1afd5904, +0x6fffc615, +0xead0cc90, +0xa34aa2c1, +0x71a6db20, +0xa0990b76, +0xd130d64b, +0xb5743005, +0x3bdf2893, +0x0cba928c, +0x0d6a4569, +0x2ebec807, +0x74bcf160, +0x1ab05fd5, +0xf1b1a840, +0xb1f7b731, +0xe67ca7d5, +0x670a16cc, +0x99a341c2, +0xe96e8cc1, +0xa706a0cf, +0xe305dbd1, +0x06f45d68, +0x6537d717, +0xc1efc739, +0x0b5c2801, +0x1b02be51, +0x7f05c9e7, +0x3b6340f6, +0xc52cc2a9, +0x6dbb816c, +0xffb9b847, +0xd029deaf, +0xb737dab2, +0x98e4acac, +0x5353da71, +0x16584039, +0x7825c97c, +0x050612e8, +0x8ba6e2d3, +0x28f1306c, +0x62b77ab0, +0x91282fa7, +0x711a52e4, +0x525d54da, +0x12cb874d, +0x4426d47b, +0x66042b6b, +0xaccabd39, +0xb0c98f78, +0xe5d9db1f, +0x7dbd2e1a, +0x5241237e, +0x4869bf41, +0x650afd4e, +0xd2fd04ed, +0x0ae4fba5, +0x69a8e092, +0x69a67f26, +0x1842d094, +0x43ef89f3, +0x667e945f, +0xc186ed0e, +0x954000de, +0x889447ac, +0x7e8d175d, +0xfa3feb12, +0x0760893c, +0xb74fd8bd, +0xc8a0a647, +0xdc7766f6, +0x3aa712d9, +0x8542442d, +0xc2b29fce, +0x04c69077, +0xbb672f0e, +0x73c3eb71, +0xe2b03d0e, +0x846ca626, +0x26a27b70, +0x7543fce9, +0x335afe3e, +0x94fc36f3, +0x8a6c5d3a, +0x8fb5d70e, +0xd2ad5024, +0xd5738767, +0x89ad93c4, +0x8060e438, +0xa8abb425, +0x2b3add19, +0x6ae39cab, +0x6c9792e0, +0x5832aa4a, +0xe435f692, +0x0aad6c7b, +0x7e6b9304, +0x5a17dea3, +0xbfc1cc4a, +0x571ff6a8, +0x7188e85c, +0xad06d818, +0x27b59ad1, +0xe0655ac4, +0x5b95d33e, +0xff37b68e, +0x5944499c, +0xb0517480, +0x9855b6cf, +0xa4ac19c9, +0x3aeecd42, +0x248f14c1, +0x92e1c1a5, +0x489e3224, +0x3c987c7d, +0x5f5cb420, +0x8fdab0c3, +0x2971aba5, +0x29da9bac, +0x93c99135, +0x7dd3ea1f, +0x9013b000, +0x62a0f8a6, +0x84c533f7, +0x2a330bd7, +0xe6be1a66, +0x4803527e, +0xa52d6232, +0x63ca5807, +0xf0ca5c1b, +0xf6625166, +0x51432f8d, +0x7389b5be, +0x4c2e7936, +0x73111640, +0x9d3115e7, +0x936b442c, +0x798111c4, +0xe950bf7b, +0x7d1fc686, +0xbe3e9755, +0xeeab40d5, +0x1dc271a4, +0xcf233b02, +0x96cd6a7a, +0xd83638f0, +0x09162b20, +0x4f1711bd, +0x8a1e306e, +0xcaa8271b, +0x7fd4245b, +0x9b331334, +0xe2410375, +0x17571427, +0x8fbf34c5, +0x9cd8be1e, +0x215777fe, +0xe54d3cec, +0xba369f01, +0x942d157c, +0x1ca7e040, +0x4b412fa5, +0xfde02223, +0x948c6768, +0x01824448, +0x80cd7b04, +0x10526ad2, +0x5e27bb85, +0xb742d65d, +0xda41bcfa, +0x303e4630, +0xa8e166d9, +0x149af720, +0x48deed54, +0x83bb2174, +0x61e55ee6, +0x0d3dfcf1, +0x2ec5e245, +0xcefd9ccc, +0x906330d1, +0xdb000da9, +0x9e1b6ff9, +0x9f3dc854, +0x00b05dcc, +0x17fbc536, +0x2f1bf604, +0x53d5bea9, +0x39009450, +0x19e68f12, +0x51241e00, +0xee7c9b99, +0x6ffc29ed, +0xc9570078, +0x1a3bdd0e, +0xdc53ff8d, +0xe9fbcbd2, +0x70b15bbb, +0x8f21c971, +0xe62937ca, +0x8154234d, +0x96abe190, +0x7c6502ea, +0xddec494d, +0x3cbda43e, +0x8ffd6870, +0x85708f4b, +0x49f70400, +0x1e344a6f, +0x264a9014, +0x09b2d6d4, +0xe9bd7a24, +0xf8c6b126, +0x28165403, +0xe62c6994, +0xd416c710, +0x446fd24f, +0x773bedfd, +0x82bc8c45, +0x28b53a2a, +0x072847d5, +0xf47e88ca, +0xc275cea4, +0xec73040e, +0xdb290c72, +0xa4dc0c26, +0x808b4052, +0x74dc9cb6, +0xaa416f4b, +0xc9a37d80, +0x1cb75c89, +0xc681773d, +0xb3768cbf, +0xf7da9355, +0x798a6fa8, +0x199b26d7, +0xdc0cfb3e, +0x8d59fb50, +0xc030492c, +0x0b0bf973, +0xbe48731a, +0x4cdcdd7c, +0x693ed12a, +0x4f42b266, +0xfbfdc1b8, +0xfccd4929, +0xea6106a6, +0x44bf0dae, +0x56209556, +0xdcf97e5b, +0xb5f3703d, +0xb44233e8, +0x0ed21d66, +0x906683a7, +0x3f99793d, +0x7de94573, +0x9c44e50b, +0x0501a643, +0xffd84b91, +0xd9950c1f, +0x59ef1a19, +0x6b341d1c, +0x5c9ca8e5, +0x12bdb2aa, +0x4c707ff0, +0xce4852d3, +0x32937bd0, +0x4d2e98d7, +0x3d6f7b68, +0xd5b939e4, +0xf80fc3c7, +0xb07c4a3b, +0x11fc0d63, +0xa8d832e5, +0x8745f539, +0x6c096913, +0x0318d8fb, +0x2ed1190e, +0x844225d0, +0xf0270acd, +0x43df11b1, +0x786ca957, +0xc3a4f989, +0xdb46bcdc, +0x9b5a80e3, +0x86dddd2f, +0x4a970af9, +0x3f3be120, +0xa96d8cdb, +0xa357e67d, +0xc66f8157, +0x7e695140, +0xb010c56f, +0x329bdb2b, +0xae9103a8, +0x19bcf640, +0x62e0534f, +0xc241618e, +0x79db3c83, +0x54f7b0b7, +0x47b43654, +0xe57e8564, +0x45c1a135, +0xec431f07, +0x24b4d35a, +0xd8e5e10f, +0x7b5d256e, +0x3fef25d9, +0xdd0df8b7, +0x84fee0c6, +0xac56be37, +0x116fdfc6, +0xda8ac70a, +0x6f800ec2, +0x7faaa68c, +0xa9ae3765, +0xd786a2d0, +0x84e17564, +0xf0e01360, +0x0135a446, +0x7609a0cb, +0x143818ed, +0x146ffd98, +0x76304580, +0x8cd2ec59, +0x0a74d619, +0x65cdd732, +0xf7899aef, +0x1a76394d, +0x7c1385fc, +0xe2aa6b2e, +0xf24849cb, +0x69e25d91, +0x4c11d8bb, +0x701a8f66, +0x4f5620bc, +0xea6bd8af, +0x2e563b28, +0x31368b94, +0x8af86e29, +0x1b28f6cc, +0xcf8bdd04, +0x9e86f23a, +0x3a4b5cd0, +0x4afdf773, +0x6adcb664, +0x9c19da51, +0x05996e73, +0x28d0e6db, +0x0f192523, +0x3d6d41d8, +0x824888c6, +0x269d03b7, +0xf35b782f, +0x24109081, +0xd57f0d33, +0x3582afc9, +0x2a3e1614, +0xbbe3c672, +0xfb7e2730, +0xc4ae8542, +0xfda81742, +0x4e24379c, +0x583aac4b, +0x60571bf6, +0x65db86f6, +0x4bf7dcbe, +0x54431e73, +0x5752899f, +0x1dbd728c, +0x76e811d3, +0x0736a37e, +0xd87a8cfa, +0x43a7c942, +0x3820bc38, +0xf1f5d402, +0x305047c5, +0xd2d72ac8, +0x9dbf0bb2, +0xbd994e5c, +0x7b54f2de, +0xf8d2fdfe, +0x8ee83e28, +0x4064e60c, +0xf9470e62, +0x34d36dd4, +0xb1a4af36, +0x1dc801d3, +0x05fc3ed4, +0xe0ca1cd1, +0x0175e451, +0xa8b4c2c7, +0xfab5ae0a, +0xab2096e5, +0x43acb35c, +0xd479e1fe, +0x70a558dd, +0x52982cba, +0x00687bf3, +0x7b212356, +0xd567730f, +0xf84d2b75, +0xea90f380, +0x6904d564, +0xd92ee2dc, +0xcdb985ad, +0xf45122d2, +0x3b7cf8d0, +0xadb343ab, +0x38883a3f, +0x054033b0, +0x43f2c6cb, +0xda4321b0, +0x0eaa89f1, +0xbf224c83, +0x55aa7a96, +0x0417287b, +0x9415280a, +0x768e9766, +0x8dbbd9cb, +0x25f16474, +0xfea6e7af, +0x896d3651, +0x6c394180, +0x9ad43595, +0x3bc4a08b, +0x44768855, +0xd7647a48, +0xdf3b1256, +0x4a240b4b, +0x0b76bd9e, +0x109d3ad0, +0xf6131379, +0x7aca26e1, +0xc945707c, +0xc806d4a4, +0xc3b3f8e1, +0x3da14166, +0xe65c1f1d, +0xc4756d40, +0x8d8fbf1f, +0xf6ba406f, +0x9b69120d, +0x3f08a726, +0x5b5aa770, +0xe34ca541, +0x0ddb0a13, +0xf7054946, +0x6173af22, +0xdad62cf8, +0x74d4b3aa, +0x8eb0c9cf, +0x59881771, +0xb5abc461, +0x080aa15a, +0xd17041f5, +0xeb2b7969, +0x2793bb0d, +0x511b3430, +0x488e56f7, +0x91869022, +0xd1efdbd0, +0xf53bdfdc, +0x91902166, +0x2277ec59, +0xcf94d090, +0x829eb13f, +0x1e58e4b1, +0x661d5e0b, +0xbaa4334a, +0x364e900b, +0x5f9e4c73, +0xc184dad3, +0xfb31bdbf, +0x363d10e6, +0x47557aa4, +0xbde760e8, +0xfe7873b3, +0x9f86f167, +0xe6d9bc1d, +0x8f984c99, +0x20d62932, +0x3c309ed3, +0x0e496072, +0x235e4f40, +0xc1ea1c0a, +0x86131f3b, +0x0e59d03c, +0xc6c612f1, +0xfcd69a53, +0xfde4d4fd, +0x58c711b9, +0x8e8659c2, +0x508e25db, +0x724cbc67, +0x535d0059, +0xfbb59287, +0x4fb4780d, +0xfa17b9c6, +0x051862ab, +0x16200801, +0x3096e484, +0xfe0050db, +0xc0c18783, +0xf79b706d, +0x526233df, +0x8ca8d032, +0x97e3f102, +0x1ae313e1, +0x77c9586f, +0xf596031f, +0x0d7b8161, +0x315ee46b, +0x4c118d9c, +0xa32e0d36, +0x538f0696, +0xb60d520c, +0x1047b6e2, +0x00659b71, +0x300d7c7d, +0x0046708d, +0xfd067562, +0x25be0bcb, +0xc272d13d, +0x68980367, +0xc0d8b89e, +0x4d8cab94, +0x015812ca, +0x115bd466, +0x59b099b0, +0x60c9d232, +0xdb34fd69, +0x1405b1b9, +0xf644be12, +0xdbf2282d, +0x40a97679, +0x8fe19874, +0xcaccc4c1, +0x72d31c5d, +0x86fcbd01, +0x7e70157f, +0x230da90a, +0xd1f310df, +0xcc95bf39, +0xb7088ed0, +0xb9703ba5, +0xe0865951, +0x0173ad3d, +0xfec563cf, +0x503147e1, +0x780d1213, +0x5490f036, +0xe74ec3f2, +0x1ccc4b7b, +0x982af8f9, +0x1302eb0f, +0x45a8653a, +0xf99e8d5b, +0x3225ad9a, +0xeac5e8b0, +0x3e743df2, +0xcb0f3de1, +0xdc78b043, +0x45d0c96c, +0x2009974e, +0x2290de50, +0xaed92f09, +0xb7446089, +0xe962bd16, +0x099d7cbc, +0xcfb6221c, +0x38d67b5c, +0xafb4df8f, +0x0bb81f91, +0xe4b1c22b, +0x006fc972, +0x207b2465, +0x665767fc, +0x8235e9cf, +0x24efe809, +0x7b951355, +0x90e53d49, +0x3fe5e7e5, +0xa4e98a1b, +0x04cffe15, +0xdcc9094e, +0x89af42b5, +0x1b34c024, +0xc7ad349a, +0x4f4e0762, +0x9331220f, +0xf9e391f2, +0x984bc489, +0x8cf0bb63, +0x42956595, +0xad562c2c, +0xcb7a3aec, +0xd6ebd7ed, +0xef6b214f, +0xe9bb87b9, +0x8d4c2c30, +0xdc62c5b2, +0x8d907d9b, +0x8b6ce973, +0x2a209a15, +0xe19f0bdb, +0x54f73df1, +0xf3d25207, +0xe693838b, +0x2ba0ef94, +0x0bb452a2, +0xf83e1d1d, +0x395a2f6a, +0x093310d7, +0xdf4c1d0e, +0x95d26e03, +0x6fe7a7e9, +0xfb50e75f, +0x282b4da9, +0x14e97a01, +0x162eb3ca, +0x490d3658, +0xfba99168, +0x3615d328, +0x9503457b, +0x43472e75, +0x9969dea9, +0x4eea5d33, +0x55eb0ac1, +0xb8020b25, +0x8fb7c223, +0xc9f0b3ae, +0xfcf89b7b, +0x649b4870, +0x8dd3a766, +0xc65a34b3, +0xcb7b8305, +0xb05c7f03, +0x884c93c4, +0xdccc4570, +0x482417a6, +0x7108d671, +0x09ecf412, +0xb1b85ac2, +0x779bdb23, +0xa9c4b5da, +0x48a0af00, +0x1a6ae9cd, +0xfe8b687e, +0x2897ac0a, +0xfd993c4b, +0x9613bd88, +0xb0e11e2f, +0xce1843e9, +0x0b939c34, +0xab44cf65, +0x88113cf6, +0x4c9ca57c, +0xcf28db0f, +0x7fad7f33, +0x55f643ff, +0x944ddca0, +0xae581071, +0xd270e34f, +0xb5d95a78, +0x83ad40bf, +0x17954b68, +0xaa52670a, +0x5592232d, +0x8960081c, +0x0beade2e, +0x822efe93, +0x9a58cc54, +0x07e5c8ee, +0x8a1e6a5f, +0xabf39200, +0xa122cadd, +0xddbf4ad7, +0xadfeb22b, +0xb12f0507, +0xa40cc11c, +0x194830bd, +0xcc9dd239, +0x8f36e28a, +0x37337951, +0xbb7f45d0, +0x1b5294f6, +0xb98997d8, +0xee2efef5, +0x7f22e3db, +0xa3fdf921, +0x62d342cc, +0x11298f0a, +0x4cc2336f, +0xd8efa144, +0x443af92b, +0xa7a93531, +0x7b11b707, +0x955bbac3, +0x44f97fed, +0x26a4d0dd, +0x84abdc0c, +0x02417fd3, +0xdead2212, +0x4359deb4, +0x81bcc9df, +0x1f327859, +0x20932644, +0x4db16205, +0x2a785eb8, +0x5420ff75, +0x10150ccb, +0x86ebf7f6, +0xf399ee9f, +0x847a9fdd, +0x26de3af8, +0xdebb56a0, +0x5bac39c9, +0x262c04b8, +0x0bf88afa, +0xc1cf2756, +0xff4e3e88, +0x711e073e, +0xbe14680e, +0x066a4945, +0x6f0beb49, +0x05845d0c, +0x5197b79f, +0xe642415b, +0xe3911bf1, +0x7a0bee15, +0xae09f0a5, +0xb0b0a8e9, +0xcb75c72e, +0xdb69ca5f, +0x08d20dc0, +0x4d11a1c5, +0xc40949cd, +0xab01b7dc, +0xcb802a86, +0x83967d46, +0xefa7d0b5, +0xb90922d5, +0x13ffe8ca, +0x9131788e, +0x2f085ec6, +0x8c585d9b, +0x237df840, +0xf5aff34e, +0xcf3df92f, +0xce62cb42, +0x299c92c2, +0x58f7f0c5, +0xe13f8864, +0x485b5478, +0xf052642f, +0xfba5b2d0, +0xc47ac9ec, +0x5b23e25c, +0xd3b5c82b, +0xce2c7d14, +0x913d167e, +0xb49f4af8, +0x88f4fe81, +0x195d67cf, +0xcbb382d3, +0x52a4d8ac, +0x0d383990, +0xda010414, +0xeca87e25, +0x520ad047, +0x85b99cd2, +0x9a20a714, +0x439c97cc, +0x4541a338, +0xe21a761a, +0x8afbaa0a, +0x153dc205, +0x9de944f7, +0xb0a9381a, +0x0d5ca361, +0x617d3344, +0xde5e9713, +0x75f9e0f6, +0x84051565, +0x901b3001, +0x876c2c1f, +0x614be9d8, +0x62b8eda6, +0x99707050, +0x4b7c43d0, +0x05714508, +0xc95c1e54, +0x97d0b937, +0xf4b35fb2, +0x3345e63f, +0x46c8524b, +0x67fb51f1, +0x638c300a, +0x36e4cd9e, +0xb8b7670c, +0xea8dd8fa, +0xcd49730e, +0xe47fae0d, +0x11860075, +0x324ea3d2, +0xe2e8a031, +0x66aec258, +0x920f285a, +0xf3c5f89a, +0x88880879, +0x5a455aa5, +0x3bd2b456, +0xabc8ad14, +0xcbcc72d9, +0xad3f44ad, +0x5cebd2ee, +0x5bf8b9a4, +0x5c9d699a, +0x09bae2c0, +0x40158883, +0x6cd882b3, +0xa7aad017, +0x716cb5be, +0xb21ae805, +0x331878b8, +0x5acda090, +0xca236828, +0xb65b678e, +0xf5429897, +0xe563627c, +0x212a6a49, +0x2ef3bd88, +0x20d53f50, +0x335716b0, +0x92cdb878, +0xf907689b, +0xa7ccb87f, +0xc8026293, +0xb5b1f661, +0xce9854fe, +0xeb57f212, +0x0b945bb8, +0xc5d3796c, +0x8ac699c5, +0xc31e6fee, +0xd8031ed4, +0xf47a7318, +0x4a154993, +0x42065bf2, +0x49a07959, +0xa8670a58, +0x86345e69, +0x4955f003, +0x1439207d, +0x688d9ed2, +0x706d7c29, +0x9da9de59, +0xd8ebc7cd, +0x0649caf7, +0xb141b1c6, +0x010ae00c, +0x7e0cac04, +0x8d4feb44, +0x7c01db5e, +0x703467e4, +0x77666f9d, +0x02fffeab, +0x03cdc9d1, +0x9029b00e, +0x670faa10, +0x570ca087, +0x0eb6120a, +0x31b6ac60, +0xe0d9d716, +0x8da0f80a, +0x79e57dff, +0x061b460c, +0x33756087, +0xfb575228, +0x9ef4634b, +0x8f1b7b3b, +0xfb520b42, +0xbad548ae, +0xf74aa538, +0xbb1e4fc3, +0x7f272a43, +0xed74bf00, +0xf2cb9cf9, +0x7b19bc40, +0xbadabb45, +0x06d79b5d, +0x4b58e211, +0x12e380eb, +0x8d2f6b1e, +0x4f2ed028, +0x0360ea6c, +0xc57ac1a9, +0x3b4b34ee, +0x459ce9e0, +0x0138859f, +0x952debf8, +0x2d8a96e8, +0x2f21b38a, +0x79ffd2fb, +0x15c7f4fa, +0xf76fe6b0, +0x7c197611, +0xbe58b2b2, +0x7e580d07, +0xf33449a9, +0xf6b1caf9, +0x37f2b139, +0xb6917c5b, +0x2a676c50, +0xcb750f1f, +0xcb2b232e, +0x7d2ff468, +0x22e0691e, +0x17c2bbb0, +0xc68dc16d, +0x72eee347, +0xab607077, +0x189469d0, +0xedfd3b9e, +0xb6d470bd, +0x762aaf2a, +0xf3afbe64, +0xbe37ca3e, +0xbe86273d, +0x6e6913ac, +0x7c7be32b, +0x4a37d4ce, +0x1b5681ee, +0xdec3fa9c, +0x1cd25652, +0x40c3843f, +0x2140db49, +0x5e791b76, +0xb37c12fe, +0x5beb726f, +0x5966d35e, +0xc28bc5d2, +0x61fb7dea, +0x97a39530, +0x3cfccd56, +0x188c5ee9, +0x06e18dde, +0x98dd5442, +0x1172014d, +0x96ce10a8, +0xf292f9a5, +0x21e7b784, +0x93990456, +0x81ef3332, +0x89bdae18, +0x209d8204, +0x736d60bc, +0x81860ba4, +0x057bee94, +0xf51956ad, +0x1f7df41b, +0xb3d03fa9, +0xc15d106e, +0x092be653, +0x6ee91a0a, +0xbced8f7a, +0xe0c3a102, +0x1f938eec, +0x485b65bd, +0x4127fce6, +0x68bb8d87, +0x44cba840, +0x0fadacf6, +0x5b4a1f97, +0x0f9d8f5f, +0x6369f5b8, +0x883cb9c9, +0x3dd17527, +0xd462d787, +0xd3380f0b, +0xda4268a5, +0x136f896c, +0x9f13f72f, +0x0d9f9ca6, +0xab64e0e2, +0x27cd5967, +0xf8237373, +0x0a0f6f4a, +0x464825a3, +0xaa315828, +0x339eb0fe, +0xe1a864c6, +0x2fd058bf, +0xd4613eb6, +0xdbb352be, +0xef42767c, +0x993bb093, +0x76519537, +0xc2ecb820, +0x1b213f8e, +0x6581537a, +0x3239a431, +0x653227bd, +0xc54225fc, +0x8a5944ee, +0xcff2755b, +0x8f0d7983, +0xc054758f, +0xca295a74, +0xfb4360c7, +0x247e0e2b, +0xc6e4de4c, +0x53d08ded, +0x7b1eccf7, +0x8a1036c4, +0xeeac2fda, +0xb2be9708, +0xe092cf82, +0x56972636, +0xa1dc60a6, +0x1a1b45f8, +0xaf24b3c8, +0x5f3e34d3, +0x7d59dba7, +0x7dbf94b5, +0x618b7070, +0x077de979, +0xf7e31d13, +0xc86584e7, +0x1c98d1a8, +0xf719e2b0, +0x27b93fc1, +0x8955470e, +0x66309ba3, +0x09c6f340, +0x2b4ad505, +0x08efc5c0, +0x702a12ed, +0x2d9ed152, +0x87ef92f9, +0xead3defc, +0x3a5b9f2f, +0x262035a7, +0x878f0e41, +0x71894d83, +0xfceeffe5, +0x2d3388e7, +0x71827122, +0xdc78e697, +0x7c3fddd1, +0xa041b6c2, +0x4e955b5d, +0xd516ae36, +0xf6237962, +0x2a9ebd1f, +0x1c7bfda1, +0x221af536, +0xddfa9de7, +0xd8daa971, +0xf893ed0e, +0xf1f7c81d, +0x4869b903, +0xf2422748, +0x6cbb1689, +0x2f645392, +0x551898df, +0x8d4b57fa, +0x63e79dac, +0xce4c7b91, +0x058f8d2a, +0x7d3a52ce, +0xca9e42d1, +0x65556cc6, +0x068d1fd3, +0x6c1a5490, +0xba8136d1, +0x3d88eaaf, +0x1cde7e46, +0x2c10159a, +0x67daf096, +0x85f7137d, +0xcc4ce4c5, +0xca17c86a, +0x21c0ca46, +0x35eec14f, +0x02f2c76e, +0xa6266597, +0x39326c6c, +0x7d86e73f, +0x0aea6f6a, +0x1e6c1e6c, +0x786d19bc, +0x9e8908e5, +0x87564009, +0xf7a37166, +0x007d8f8b, +0xad9a9387, +0x5a1afa15, +0xaa009c90, +0xe69a0bd2, +0x963f965e, +0x3b224d8b, +0x5ce6a289, +0xf027517b, +0x830c5280, +0xc9784570, +0xf3f52859, +0xd1f4f2f4, +0x514fa565, +0x6f22036b, +0xd31d184f, +0x02764c47, +0xa02f7d8a, +0x15fdd593, +0x757e6e00, +0xa7594f30, +0xfeb538b0, +0x218d996e, +0x90971ed1, +0x757731bb, +0x6daeb73f, +0x453da081, +0x670f7979, +0x5f0aa2d4, +0x218c59b4, +0xab2e872c, +0x6ed04555, +0x565dfa5d, +0x9906e57b, +0x3af0d127, +0x3c97561a, +0xc27e8d05, +0x1891c16a, +0x8c409fc2, +0xf2a999c6, +0xbcde5b6f, +0xba553ed9, +0xfc55ed63, +0x1318e78d, +0xe88e2558, +0x2d7ddd01, +0xe95647f1, +0xf8f0b361, +0x5fce3272, +0xa9d8903b, +0x2fdc845b, +0x11779867, +0x731580cf, +0xb988a3c3, +0x2cb923a9, +0xa66db714, +0xc003c724, +0x21a15bbf, +0xfe0add5a, +0x0c7f1cce, +0x480a15b6, +0x20070493, +0x71b66c45, +0x8fb85d5f, +0x7a92224c, +0xdb9b998e, +0x450bf09b, +0x6687cfa7, +0x14db2265, +0x98a90a8e, +0xb73ade7f, +0xe90d75bc, +0xdbcbaffe, +0x95d8e551, +0x91b18555, +0xbb293e84, +0x2cd2101d, +0x448a5ce7, +0x0135ade3, +0x7e8487be, +0xa075f381, +0x0b94c39e, +0xd72c097e, +0xd02c7259, +0xef1462a1, +0x5f30009d, +0xa1fabb7f, +0xb6d284a0, +0x9d52fad0, +0x5f33821d, +0xb3eaedec, +0xdb5bd7e5, +0x8260cf5a, +0x3cb5ec6a, +0x8396bf6a, +0x3dfd1c76, +0xf3c2ddb5, +0xa3448132, +0x41461e93, +0xb1b320f1, +0x538df2f9, +0x3eb32770, +0x5b5bf025, +0xc6ce27b3, +0x0c8417ce, +0xbddc60b0, +0x8635185e, +0x75741167, +0xe843911c, +0x2be682e0, +0x5852dac2, +0xe465d9d0, +0xf34a39ab, +0x0c9eb0bc, +0xc23ae7b9, +0xeb0f3c40, +0x06e62b48, +0x21ce52ed, +0xcb88b766, +0xa49a0f20, +0xbb536e55, +0x3231b2cc, +0x0308cbcf, +0xc0cc653f, +0x8f9b469b, +0x46fe6d66, +0x69d09ed0, +0xdf82977b, +0xadd34f8b, +0xb5bf2eb0, +0xfdd14e95, +0x0d67801d, +0x070b03a5, +0xc5446dad, +0x4f067855, +0xab8946e6, +0xff713f3d, +0xdef32cdd, +0x7e2ff4b3, +0xb71484bb, +0x1865ab26, +0xd8254d18, +0x92214483, +0xe4bd9bc4, +0xb1d1bf73, +0xff05f8ff, +0x03c6b746, +0xc35a5d81, +0xeac7c314, +0x4da4e7a7, +0xd8a9a856, +0xcff08ef5, +0xce77322b, +0xdac1016f, +0x07516ce0, +0xa477f904, +0xd3f847c6, +0x4dd6d266, +0x8d4fd8c9, +0x70f1a566, +0x3459ef52, +0x5b433e37, +0x80bc2f83, +0x76d4da81, +0xcc30c0e1, +0xcb470a95, +0xce5d31b6, +0xffe295b1, +0xdece3020, +0x6a124566, +0x81380546, +0x656bd150, +0xbbbcdc4b, +0x136911c0, +0x610e28a0, +0x1e10fc2b, +0x2dd33aa6, +0x05767192, +0x5f71c01d, +0x78567ac1, +0xf1e48a83, +0x33d2fb3c, +0x511417c5, +0x96983dca, +0x38f2fd77, +0x28424699, +0x8ff65c89, +0x170134f8, +0x323ea437, +0x9a44d4a5, +0x6262ba80, +0x9f74d010, +0x07ea7d5c, +0xe75f6654, +0x3af1fc94, +0xff047c0a, +0x136700a4, +0x50fae625, +0xe120b1ea, +0x531a3c17, +0xe6718f4a, +0x2d09f388, +0xd98581ab, +0x4c0fe298, +0x46d2c3e9, +0xccc044cb, +0xcba62a99, +0xa03103b9, +0x6ec879a8, +0x35d9caaa, +0x8ec8a8c9, +0x4634cf69, +0x33cc41ae, +0x3c1fa787, +0x05149103, +0x778ec9ba, +0xaef10466, +0x9bf91132, +0x4eefed9f, +0xdade8468, +0xabc34c5f, +0x6cf597a5, +0xdb4da912, +0xf691b73d, +0x444f384a, +0x2700d1bf, +0x20e9c9b6, +0x994b3bac, +0x2b2de398, +0x7ee3bdc5, +0x750a1563, +0x29068fe1, +0x5d38f114, +0xb737f26c, +0xd3715563, +0x03aef622, +0x617a5f24, +0x06f06b92, +0xad021a96, +0x23fa6384, +0x042d67a4, +0xb0ec8b25, +0x078949ff, +0x3673ca61, +0x8b017b49, +0x9e14cd68, +0x0fb26ddf, +0x44d45c8c, +0x35ed6eff, +0x4909f797, +0xd6d210f3, +0x9c943f95, +0x468f1ca7, +0xc2d4f9bd, +0xe546f687, +0x25d9ee60, +0x887c5901, +0x9e8359a8, +0xd64d4d54, +0xfa106786, +0x00e0beaf, +0xace907a2, +0xf6449137, +0x82d0d2a8, +0x87c26d93, +0xef5b36df, +0x23ccdc77, +0x36b9bda1, +0x22356ce2, +0xab8e096d, +0x01998d5d, +0xe0297293, +0xecc7747f, +0xf4c8de6b, +0x70abf61e, +0x073f2592, +0x9e6cfc4b, +0x04d44416, +0x51ec51e4, +0x5b0dfb47, +0x907844a5, +0x271ed1c4, +0xacc635cf, +0x7fbe9441, +0xf763da94, +0x00622d9c, +0x2c96ffe6, +0x4ef091fa, +0x46ca9d3a, +0x969917d4, +0x9442b1d0, +0xcdcf5a07, +0xc57b86e5, +0xb4cafc95, +0xc6e9b4c3, +0xa778e205, +0x8e7c06c2, +0xeacbac75, +0x178a4c5a, +0x672ae481, +0x7704f2bc, +0x882b4b25, +0x875466eb, +0x694a43a4, +0x453d3596, +0x8c12ed33, +0xe4383ba2, +0x6280eddc, +0xa7e8c723, +0x9b0236d5, +0x977b0fce, +0xa88abecc, +0xe72aabe8, +0x192f27dd, +0x274663a9, +0x6b0ede7a, +0x7939b535, +0xe0c69541, +0xbbf053ca, +0x1506f7c8, +0x824094a6, +0x55bd5416, +0x7a196d3c, +0xa933d2bf, +0xbb0df73b, +0xa40fb4d7, +0xee8a09d4, +0x51197219, +0x2e2f042d, +0xef9c6b75, +0xf1636559, +0x27751041, +0xd7042476, +0x2ba1cd9c, +0x16d23062, +0x98e513dc, +0xe2d39f29, +0xc269ee9b, +0xcfe9cc0a, +0xd80a1433, +0xcc8f0c25, +0x1d537445, +0x56ffc821, +0xbeeef2fd, +0x060e3124, +0xc2c7f11e, +0xc2636198, +0x17b27dcf, +0x20f399e7, +0x0d87a825, +0x9207ad89, +0xb873f9b6, +0xf5981b03, +0xe5b0d6cd, +0x23fd52c5, +0xc8b9af3c, +0x7e2bb172, +0x95f8d5bf, +0x5f938afd, +0xfc9da03a, +0xfdcd8389, +0x4acde91f, +0x5b88079c, +0xa786de58, +0x136236a8, +0x8a3405e7, +0xf44bf03b, +0x3fe64580, +0x5f9557b8, +0x5e1a2f26, +0xf39768ca, +0x2a908b7e, +0x039256da, +0xca1393f7, +0xc6e6be90, +0xff27468e, +0xe24c23f3, +0xcd92dd32, +0x4c29ecbb, +0x70d2042f, +0xec5fc3d7, +0xfbf732f3, +0x7cf325aa, +0x39d32741, +0xc5c491e5, +0x1057c319, +0xaf7cdd15, +0xccaaa39c, +0x047650d6, +0x11e1ee25, +0xca9edd4a, +0x423c4606, +0xec0b12ae, +0xeffa107d, +0xf38381bc, +0x059e42be, +0x245d5a51, +0x6d6386b0, +0x1afd4b52, +0x050356c9, +0xade68a49, +0x3d851dc1, +0x8c9bb940, +0x3021104c, +0x22f2575f, +0xe5da1c30, +0xe02d8785, +0x43c5ff5b, +0x8da501bf, +0x780325f2, +0x45bbb4ec, +0x7cc718d8, +0x8b786b3c, +0xa7691ceb, +0xaabfc347, +0x11a02db8, +0x577d89e6, +0x5156e8db, +0x368ee598, +0xbdef55ad, +0xcb848932, +0x81261d55, +0xca832a5c, +0xe69c7c43, +0xf66298a6, +0x2db5bfd1, +0xfb4a0965, +0xf0caccc8, +0x36d423c2, +0x608bb88a, +0x29f2e783, +0x2188ae45, +0x3c44769b, +0x81637e5d, +0xd27b24d7, +0x8ef98078, +0xc4ea880f, +0xaa90fc0b, +0x8bf357d0, +0x0dbc5834, +0x23a9e487, +0xaf2be7ba, +0xaf9ee176, +0xb7e832c1, +0xf8d2bc23, +0xd68b7bad, +0xeec4e188, +0xbebe23a8, +0x9cf17149, +0x5de68e07, +0xf710b5dc, +0x338e6e82, +0xdc0ac74d, +0xf4ff1c7c, +0x9d9f3f68, +0x31045f05, +0x0c6e823a, +0xec9efb67, +0xaad8832b, +0x428074bc, +0x6368e395, +0x89c5ca2c, +0x4056b9ac, +0x2b5d9233, +0xfac7055a, +0x678a7e06, +0x38d0292e, +0x79b93322, +0x106d48b3, +0x8ec3a3e1, +0x86643c81, +0x2bdc5d14, +0x152dfc4c, +0xcb7992c7, +0x7228b4be, +0x5a24b584, +0xa814cae6, +0x2d02e399, +0x0c15d5d0, +0xe6ebe63e, +0x74113f6e, +0xf26355a4, +0x19bb3b9f, +0x4d63c342, +0xdcce40c7, +0x97a0e0a6, +0x017f53b4, +0xc08a2bf1, +0x4eaf014a, +0x638d590f, +0x3a9effc5, +0x0d2d2b4c, +0xfc0d9f9f, +0x48bc8690, +0x501af165, +0xd218a575, +0x9c1c45b4, +0x093b4f2f, +0x64bd00f3, +0x23c7bde2, +0x1992f8c4, +0x4be1f5fc, +0x2402781a, +0x717a04aa, +0x95ea0558, +0xd4a13175, +0x78799268, +0x5b3f5e1f, +0xf51914f4, +0x576486d7, +0xa954be14, +0xb4f40b0e, +0xd31a71f3, +0x6a865993, +0xc829e931, +0x203c2a8b, +0x694ae272, +0x0b5103ed, +0xd24807bd, +0xddacf855, +0xec91192d, +0x6aaef963, +0x6e10c7b6, +0x7013854c, +0x48e9937f, +0xd5757c52, +0x8ea172d5, +0x00e7f323, +0x57035076, +0x99b483ff, +0x68c603da, +0x5f581f0b, +0x173ad32a, +0x56df0809, +0xd32efe5d, +0x38dfd741, +0x085e1421, +0x2fec2a56, +0x1ffb21d3, +0x4eb56a96, +0xa30ba8f1, +0x47704400, +0x85f252d0, +0x4edfed5f, +0xda35f1aa, +0x6379e1ce, +0xef908b5b, +0x6fe7786e, +0xf6cae797, +0x9997fc79, +0x1010fb22, +0x9c8ed155, +0xce55b68e, +0xf30d9fef, +0x8c2bba56, +0x7cc58dfc, +0x895b8c0c, +0x4bb21bd3, +0xe4de8167, +0x60c96ed1, +0x99a26e85, +0x2850f884, +0x616b6866, +0x0be5f5aa, +0xcf71b42b, +0x8f8dc8bb, +0x71f8cdb0, +0x3934fddd, +0x3b142606, +0x6815263a, +0x47af6fa5, +0x83e952ca, +0x4eaa10f2, +0x9ee762d5, +0xc8947a09, +0xb04b9393, +0xe998a4bd, +0x5a4c5b26, +0xee8e7d81, +0xa34fe846, +0xf17a6de0, +0x2fab0e9a, +0x7d8f1a9b, +0x9ebdceb5, +0x7006ba31, +0xc4d032c3, +0x930b0083, +0xf9d1f3f9, +0x12a01ef9, +0x5fb463b6, +0x334344dc, +0x5484d2db, +0x2c47ec8f, +0x6096d5fb, +0x737c7bb0, +0xf9047801, +0x60ef2c9e, +0xca884692, +0x4b7de789, +0x67585427, +0xcccdd2eb, +0xdcd3d71c, +0x4cc83231, +0x1ec86d3d, +0x7b11b438, +0x67148f64, +0x3014a85d, +0x21876d8d, +0xfe659727, +0x50daab9e, +0xd51801e9, +0xbf3ee93d, +0x15eba193, +0xdc37f29d, +0xb24f8c88, +0xc71df097, +0xc5bd407b, +0x7adae72f, +0xae84315b, +0xc5e111e6, +0x96853e20, +0x4cc6dc0b, +0xc0f2fb49, +0x1365b27a, +0xa8a3fa12, +0x58dca766, +0x4cb892d8, +0x24205c02, +0xd660293c, +0x0ae5fd0f, +0x247d0e51, +0x26294a6b, +0x065b4562, +0xcbeb984d, +0x8bc1d193, +0x9a742aeb, +0x0d10a2ba, +0x3085a92d, +0x65fc243f, +0xb04e4ae4, +0x3693d549, +0x080c72e7, +0x2f8e4556, +0x98377c8a, +0x933d66b3, +0x210da13a, +0x7e231a17, +0x7b722600, +0x71acda8d, +0xef4db403, +0x0d35dfd0, +0x8587d096, +0xf5d917c5, +0xfd3e556a, +0xcccabf27, +0xf9ca7e8e, +0x7fa8e997, +0x7a5061a8, +0x4e5901dc, +0xbb2c6082, +0x60b3269f, +0x799e1e95, +0xc4a4e68e, +0xbab5e24f, +0xb094f2cc, +0x7b02324c, +0x7fd2f8b3, +0xe934c299, +0xbecbd0f5, +0x00e396b7, +0xf04d9588, +0xad5689dd, +0xe89d0cac, +0x956bc811, +0x6873a48c, +0x3a87d578, +0x8961876f, +0xeab17073, +0xa1ffbc48, +0xe04ca1f1, +0x52aee5a3, +0x72f5c911, +0xddb8777f, +0xa5875fc0, +0x608a4d26, +0x31e8015f, +0x471c2b80, +0x27566d2f, +0x32ac5fb2, +0x306996b3, +0x320f76c8, +0xe6099e7b, +0xb26cc185, +0xaf66beca, +0x09fb02c4, +0xa1e25a8f, +0x5a7c4e90, +0x9b04e519, +0x6e246b32, +0x0e566036, +0x24bfedde, +0x7b1e7b56, +0x4bbd4c25, +0x01d055ec, +0xc412f404, +0x559e0a00, +0x2b587ba5, +0x03343953, +0xa38ad173, +0xb1e03869, +0x2cdea990, +0x83d82d60, +0x8e12ebcf, +0xaf10cab2, +0xd82081a2, +0x74b3d374, +0x4efce9fb, +0x8b825006, +0x70a92775, +0x8fa1cf75, +0x95ebf311, +0xe0f480b0, +0x066a0696, +0x58283e4f, +0x9a8ed495, +0x7add5dc2, +0xea9ec139, +0x79ab01bd, +0xa37607d1, +0x9cfcf418, +0x273ae612, +0xcbfd8994, +0xf1929040, +0x228cf6eb, +0xee704631, +0xb4b067da, +0x902f8736, +0x03812b5f, +0xfa875b58, +0xc0cac400, +0xe6884917, +0xd7264525, +0x5f1cf827, +0x7e5d049f, +0x5514941c, +0xe024c868, +0x0497d592, +0x64c3a0e7, +0x41a74082, +0x2f15f832, +0xaa42042b, +0x252dc39e, +0x4f58879b, +0x00cb8b54, +0x32682cba, +0x6fed769e, +0x7b2fd98b, +0x2493e344, +0x987a5987, +0xc65eb751, +0x56a7f8c9, +0xd8a0f2f3, +0x399e281c, +0xc61c96b1, +0x68e04f1f, +0xb329b8dc, +0xa844e5f1, +0xd565c1d7, +0x76871405, +0xace1db80, +0xd550b04f, +0xe36863ca, +0x22dd666a, +0x7a618973, +0x0eb35698, +0xe53e39ff, +0x696369e8, +0x92d464a4, +0xea71d26f, +0xbc36455e, +0x0463aba2, +0x402a84fc, +0x3036cc18, +0xbe096500, +0x79ac8ed1, +0xebc46ff1, +0xaf159a2c, +0xe42194b1, +0x4d83b6ee, +0xb74251c7, +0x9030f8b5, +0x24022f2c, +0xa1c465c8, +0xfcbc2eb6, +0xd9f3d02f, +0x4245c7fd, +0xae627bec, +0x8b813d5e, +0xf4cbae3e, +0xc3243fe6, +0xf2e46242, +0x3534c232, +0xa654f1e0, +0x9f3b3565, +0xb774aaaa, +0xd41b8231, +0x95b27d05, +0x2efc1e51, +0x63628146, +0x5307ddc3, +0x8e7ba2b3, +0xfd296ee6, +0xe5c2d12a, +0xc37b6e93, +0x93461a5a, +0x76660ba5, +0x4fe2e12f, +0x9f9dad82, +0x5ae18107, +0x76cc5a53, +0x9c2febf2, +0xa6908576, +0x0639bb6d, +0x3be0eb19, +0x3fedc107, +0x3a884625, +0xa32ab52d, +0x5bf8a033, +0xa62112d6, +0xfd83510f, +0x6901fab5, +0x0f269b86, +0x4562d826, +0x56c4ae56, +0xb88e959c, +0xa111e1c5, +0xe7403a09, +0xa9bfa277, +0x47921789, +0x986fe00d, +0x05be0dc3, +0xbccc7308, +0x71f2e55e, +0x09c4e6f3, +0x04dbf1dd, +0xa0f372f1, +0xa9033116, +0x69cb6f1e, +0x4debe87e, +0x2bb40ac9, +0x95ab09e6, +0xdd4dac1a, +0x03f04a07, +0x6e822385, +0xd5f9b876, +0xacc4cf41, +0x908c5903, +0x379be6f8, +0x956caf4f, +0xe5ea7689, +0x58d0b678, +0x747f82ea, +0x88b7c475, +0x01d81f13, +0x319368a8, +0x97f8d449, +0x83c6232a, +0xe0e77317, +0x35a8d623, +0xf5ca88f1, +0x50d09982, +0x40ea384e, +0x1b6d44b4, +0x43128782, +0xcca0cb6c, +0xf8864b8a, +0x74002663, +0xa43d3532, +0xd2628576, +0x9c2eed79, +0x8a3348ad, +0xeda24311, +0xbbcb7814, +0xf0d58f36, +0xa95f70a5, +0x8d80bdf4, +0xc94ad80f, +0x8426e933, +0xcbf34789, +0x3b4ffd05, +0xc25633b6, +0xbd42a620, +0xd3d725a3, +0x2be1308d, +0x1eb996f5, +0xc7030acb, +0xda736a4e, +0x8cc5abe3, +0x11628526, +0x42a9640f, +0x14f80dad, +0xef4a4b8d, +0x515f3fec, +0x4733ae07, +0x5200f4f5, +0x49ab8766, +0x2509139b, +0x60bbd65b, +0xe71b75ec, +0x048ca24e, +0x62ec900b, +0xcf5834aa, +0xbc4b607b, +0xd2ceba62, +0xa8e4c53b, +0xd5733a4c, +0x23ad8555, +0x21357b23, +0x7e04b54a, +0xc857c861, +0x42d0e3a6, +0x588492e5, +0x31ba1a90, +0xc082143d, +0xa3399901, +0x72765d11, +0x85332fc4, +0x32c82378, +0xa095b9be, +0x760c0174, +0x40344dae, +0xa1fd7815, +0x37d18e3f, +0x26c14617, +0x08c6a53b, +0xa0a723d9, +0xf0017bc6, +0xe3303bf3, +0xb6ab6ef4, +0xdfd751f7, +0x9115cd6a, +0x7acfd508, +0xf4cc0866, +0x3f720659, +0x8151d292, +0xa266676e, +0x42c82d41, +0x495faf0c, +0x0583f9d6, +0xdcb63be1, +0xd71f0cf7, +0xed279122, +0xfaf1fc01, +0x261bf10c, +0x2fa9d1da, +0xaa4ffe0e, +0x43684dd0, +0x516ae7af, +0xcaff4ffb, +0xedc5936b, +0xe39bc3db, +0xa243eaa0, +0xa3bc789e, +0x66f3333e, +0x422a6f62, +0x8c0a08d4, +0xf3847915, +0xaaed7e0b, +0x611f4e08, +0xef882f17, +0x8e18343b, +0xe21e5a40, +0xc4398f81, +0xc6ed85db, +0xf8b137e2, +0x577865ea, +0xe1fac869, +0x559cd12d, +0x2bcb0368, +0xe9e8e68c, +0xcb26b964, +0xf3a0d3fa, +0x374166ca, +0x8aea641d, +0xb536914f, +0xae20927a, +0x0228dfb0, +0xb0b84f36, +0x2b83a9c9, +0xa4a182de, +0xa0ee9e4e, +0x706dfc15, +0x1ef98ccc, +0x74923f64, +0xdbd925f6, +0xfdf10127, +0x32308a13, +0x3ff0e988, +0xca9f7a1a, +0xa599614c, +0xfe5ca32d, +0x3559eaef, +0xf33dc508, +0x1981ff69, +0x4dcbe714, +0x47f2fdfa, +0xa2a0b94e, +0x05b5d3eb, +0x6e986d87, +0xf41253e9, +0x5a6bfdf7, +0x60da81ce, +0xb024a634, +0x56810d23, +0x71b99d43, +0xdb892000, +0xd4dfade1, +0x5300831a, +0x4f2eda3f, +0x1e6fa1b9, +0x1eaa771f, +0x835613a0, +0xd89fa111, +0x31af9134, +0xc45aefe8, +0x96bcf708, +0x017a1da7, +0x198825e3, +0x385ecdfa, +0x4e26427c, +0x26e5a615, +0x41add818, +0xe49536bc, +0x0893ff69, +0xd67175de, +0x47da0c4e, +0xd4aa77f0, +0xd7766263, +0x106f0819, +0x3c8a6e48, +0x0c646337, +0x41bea7b8, +0x197548bc, +0xaf5f490a, +0xede2d44b, +0x253a2067, +0xb7231ebf, +0x9430d6fe, +0xcf278991, +0xbce513e4, +0x7dd7c3da, +0x7e285ea4, +0x914ceb31, +0xc611f211, +0xbb17ba18, +0x3edca6f2, +0x7f8803a2, +0x4b0e15d8, +0x311e9d78, +0x366b4dfb, +0x3b12fb26, +0x66a04602, +0x254638e8, +0x558caf68, +0x0e908f8e, +0x892dd1a5, +0x324b09e7, +0xb4c65e27, +0x41b71cb1, +0x687b60e0, +0xd469bf7b, +0xfe74a3a3, +0x643652f8, +0xcfc40d38, +0x8e60629c, +0x8f94c5ba, +0x61f1fda7, +0xd2a97d20, +0x2414758e, +0x4462e6c2, +0xc3508af0, +0xaafbe19f, +0xc1190924, +0xef2175a7, +0x57292430, +0x4bad33d9, +0xe3eb6257, +0x52a0eafe, +0xa2755286, +0xf9076ded, +0xf80b1521, +0x9bd6a233, +0x634d9dff, +0xa295598a, +0x93195837, +0x040dae32, +0x1a390a12, +0x94ee38e6, +0x4637a552, +0x591eeb42, +0x6a5f3aa4, +0x8a9b6105, +0x3b25a0da, +0x2bc328d7, +0xa98ef670, +0x1fa18b6d, +0x9793f1d9, +0x3925ba9a, +0xc24884bc, +0x75110970, +0x4bc5e6db, +0x52462322, +0x9d7dcc23, +0xef09125b, +0x3fbf72e2, +0xad7fff5a, +0x49d8e97d, +0xae87c95a, +0x1f9eb5ec, +0x181ceabb, +0x4c056ed4, +0x56454893, +0xf315742d, +0x5071f45d, +0x3a423951, +0x6a4d2a21, +0xfc32d6b1, +0x869a4b24, +0x37b7b97d, +0xe43dd93b, +0x5a5cfe6e, +0x2a30326b, +0x27cb23a6, +0xf65fa6e2, +0x6f6e6604, +0x59269e38, +0xa01e2b8f, +0xcf1c9fe8, +0x59108cfb, +0x8c0f4609, +0xbc982210, +0xa34f046b, +0x7f1151bd, +0x39bc8071, +0xbc974d43, +0xd0e97d1c, +0xc86c136c, +0x5b2512ae, +0x8966ac41, +0x63c211eb, +0x26da17a7, +0xd905d39b, +0x620c13a4, +0x259b832b, +0xfa78e9d0, +0x9cd8a6a2, +0x37a647ed, +0xd618da36, +0x8afca456, +0x386b9442, +0x9bcefe3f, +0x4d0d76d0, +0x96029463, +0x35bacddb, +0x7feb073d, +0x965d98a0, +0xe4c8ffe6, +0x41bf594d, +0x3270a1af, +0x6abb2a9a, +0xcf29297d, +0xe0556911, +0xcd513f7a, +0xc7896c49, +0xb2e47d16, +0xdf6ea343, +0x18d52e87, +0x3f5095f4, +0x899c2841, +0xe5e07233, +0x368c578a, +0xccdc0d74, +0x96f82087, +0x916a8cb0, +0xfac7a9c5, +0x962d9e7e, +0x9a638898, +0x0650fde4, +0x22c5a7ae, +0x32b11ab2, +0xff0adab7, +0x9cfdf00d, +0xffbac230, +0x6f695bf7, +0x13e435e2, +0x07eefe47, +0x0c3205d0, +0x6ef2a44c, +0xda099df4, +0x14d10766, +0x1a71c35a, +0x99fb2a16, +0x9dfe555d, +0x393fd7bb, +0x94f0082c, +0xa1f0fff6, +0x7c5573ba, +0xd42c3eae, +0x3647aabf, +0xdd422e33, +0x2c55870e, +0x1f5abcc1, +0x77a156ae, +0x89acabd4, +0xf750045e, +0xd5d63b27, +0xc7a2dcf9, +0x070977a8, +0x398fb567, +0x9e6e6f9a, +0x5834b8eb, +0x8c789605, +0xe4f883cf, +0xe2f0f5a7, +0x17a5680f, +0xeaf16500, +0x032bb966, +0xa33d6908, +0x40b1bb9e, +0xbd7b196b, +0x6a5f0f53, +0x72dfb4bc, +0xb9d31d1c, +0xb88bef31, +0x87d08ff3, +0x45b34ed8, +0x241fd8fb, +0xd6138033, +0x252077ae, +0x284c8039, +0x82f84cbe, +0x62c4c18b, +0x655eb631, +0x25eb99db, +0x9a0ecc0a, +0xf2e3556f, +0x0bbd4d03, +0x7cd9f7e4, +0x89f9cbaf, +0xfd388df5, +0x255ab6a9, +0xb2dfbebb, +0xb4c3abea, +0xe62e8bfa, +0x85a8f060, +0xf493df4a, +0x9028bed0, +0x54e4f3f0, +0x1e67374b, +0x45fa5ca6, +0xfec98905, +0x85b0a5e8, +0x72221df9, +0x2596807d, +0xa1460d42, +0x9db8307e, +0xfb63174e, +0x0404444c, +0x97d81ed9, +0x499cc27b, +0x8ccac17a, +0x46f2224d, +0x01a16264, +0x10aa5511, +0xb5779343, +0x28e1b064, +0xac799137, +0xa07a6a7b, +0x725c8e8b, +0xe6be76d3, +0x1d03d71d, +0x2d645ea2, +0x6aeb607e, +0x6ae0960c, +0x330d699d, +0x326013f7, +0x5ab900d4, +0x988aa3c2, +0x37db4788, +0x3bfd0d6c, +0xfcc294d4, +0x0a67c3d8, +0xd2fdc808, +0xa817c713, +0x3f1f77fd, +0x6259252f, +0xd1cd80c1, +0xb0bf4c79, +0x3a9351db, +0x996c6b62, +0x18c49a97, +0x2c8ae060, +0xfc3d0fd5, +0x1567632d, +0xddb095e8, +0x409f0ee4, +0x856e8f71, +0xbc114921, +0x863ac5c5, +0xf6cd2585, +0xde328a02, +0xc4a68c2d, +0x54cd8e11, +0x753cd3b7, +0xc80d3a2c, +0x169d4fa3, +0x199b9937, +0x81a623b1, +0x11b22a09, +0x815d609b, +0x3ae7ae55, +0xd3e99cfd, +0xfcbdcf8d, +0x522b28e8, +0x29db4439, +0x1dada532, +0xb6413b50, +0xef1987ee, +0xbed230f2, +0x0cdada7d, +0x3a45be41, +0x85ddfda5, +0x408b1460, +0xbb432c91, +0x18a7993d, +0xcd35f88f, +0x05b9bee1, +0x7733ac08, +0x8482218f, +0x1a921d05, +0xcdf07507, +0x1386d2f1, +0xe66837b0, +0x58cb1af3, +0xddf4ee68, +0x353e1d67, +0x0c0fc3b0, +0xcf8c6d7f, +0x1348d312, +0xfd539e75, +0x09455afc, +0x19116d8b, +0xf2993e3c, +0xb44c45ee, +0x61753c89, +0xe2f955da, +0xe11ec52d, +0x106683c5, +0xed2372c8, +0x8f9515d4, +0xd5dade2d, +0x540d40d3, +0x8ab9b48c, +0x2094d1db, +0x9b4b165e, +0xe135ae9d, +0xfcca0f56, +0x8b7b7c43, +0x8352d104, +0xbddc7a7a, +0x8aacc0dd, +0x34869417, +0xbe582de2, +0xb434df7d, +0x4f8952d4, +0x915902db, +0xa0afafdd, +0x9b4f1acc, +0x10373fd5, +0x59bba2d4, +0x176dfc71, +0x21f414bb, +0xf817f058, +0x885f67d8, +0xe6f33244, +0x85d42de6, +0x06053b83, +0x86e8f6b2, +0x83d299d5, +0x1d15cf24, +0xf83aa19e, +0x4ef2ce14, +0xd964baf4, +0x4a84e5f6, +0xb52e5b3d, +0x66ff433c, +0x4a8865bb, +0x2a702c0c, +0x77a33cfd, +0x0560163e, +0x053f2de9, +0x01ebc4d5, +0x3a3ab451, +0xf93fbd75, +0xe07338d3, +0x2732057f, +0xccd1b0f5, +0x681595ce, +0xead232c6, +0x122bc6ea, +0xe1bfc976, +0x2f2cdc00, +0xae818254, +0xec19d1b3, +0xe066fc56, +0xab17571b, +0xf451ff69, +0x45d4379e, +0x61d98f56, +0xea020d40, +0xfa248209, +0xbdaa6622, +0xfeaac262, +0x72a20956, +0xd75e64a3, +0x37eb5fee, +0x1644c788, +0xd117328a, +0x1c5a8a0b, +0x54176d6e, +0xc83f7e52, +0x3a23da1c, +0x0af20d02, +0xfc778b37, +0xa5f00ed6, +0x5de8fbd0, +0x45260cdf, +0xbf30d8a5, +0x2cffb6e6, +0xe7b621a9, +0xbf5172ea, +0x49c7dd19, +0x06cb702c, +0x66569e49, +0x3356fb0f, +0x070a24bc, +0x7fa318fe, +0xdedb77f9, +0x11270239, +0x7e70b6ef, +0xf98d2d6c, +0x74ccec8a, +0xe7871459, +0x370d3428, +0xad6dae90, +0x09be509d, +0x5874fd16, +0x5a42b721, +0x45ef966e, +0xdad71a2d, +0x8f7db129, +0x7715966c, +0x062d7699, +0x8f79111b, +0x44988015, +0xddf9ea1a, +0x3a050570, +0xdd6316fd, +0xf567d7c0, +0xfdc54d4a, +0x7550d41f, +0x8488899a, +0x575a83fb, +0x7e1416fb, +0xe1b0072c, +0x24a666e6, +0xe11dd047, +0x651281bc, +0x53a580d6, +0x5945c230, +0x86d2e59a, +0xe75235b7, +0x025cfe1c, +0x1200b39a, +0x77dfaaae, +0x4c0cffa2, +0x4d9d933e, +0x57cb7049, +0x3ef26d58, +0x97348a19, +0x763a61cd, +0x70bbe444, +0xa3a91f38, +0x5ac188b3, +0x131c9e28, +0x5c7b24c0, +0xc4fc2e5d, +0x394429a0, +0xaa5d638d, +0x19487c55, +0xe4259b9d, +0xedd16d0b, +0xd6402cd8, +0xb9ca48fc, +0x918a073d, +0x9db28972, +0x48d1974d, +0x2e138a77, +0x6207ad49, +0x399d5449, +0x4e5e5492, +0x64472187, +0xce6b6ffb, +0x68ec1fc3, +0xfd358e87, +0xd01d3474, +0xeec949d6, +0x9364e60b, +0x43f19143, +0x26e5013e, +0xf1473d85, +0x8f6dd6ec, +0xc96babe4, +0xa9737ce2, +0x799bdd4d, +0x3ff042fd, +0xe115232c, +0x63648b5e, +0x88d39f0c, +0x260fea9c, +0xa532df49, +0x7d897bd0, +0x238e01b7, +0xcccdb67c, +0x68efb87d, +0xd7f75dc8, +0xc6e65c34, +0xdbaa943b, +0xf583d5c9, +0x44f0fa58, +0x8e8eac5d, +0x34b88965, +0x41b18d56, +0x639e1854, +0xeb573d6e, +0x789308ed, +0x3e53ec27, +0x97f4b698, +0xb22bd1ca, +0xd9f90077, +0x4fa761fe, +0x76c024e5, +0x0674282b, +0xd635f5d4, +0x6a30115b, +0x6f1ad3a5, +0xca7b68a9, +0x7600c16e, +0xe0a6c5f4, +0xc7e168a9, +0x08809d9f, +0x3b183426, +0x2c6d0a88, +0xef5964aa, +0xdb28b12e, +0x154f776c, +0xb4dadf50, +0x5a0f8b9f, +0xe8628ab5, +0x19cec3cb, +0xb83a31e4, +0x17d3b85d, +0x9faa5143, +0x9604c643, +0x13205449, +0x5217706b, +0x9633122e, +0x790fd87e, +0x4ce9fae4, +0x4fef5947, +0x058359c3, +0xebbe6f60, +0x0ba837aa, +0x4f203bec, +0x58f1cd00, +0x1f799d7f, +0x23172e35, +0x80c8683a, +0x61fdfa2e, +0x7885608b, +0x0e85b9a4, +0x65d62fe6, +0x1676b0ef, +0x1d9daf90, +0x1ed12a75, +0x09de4020, +0xc49fae5d, +0x25c24a28, +0x84cb9d78, +0xe66473d1, +0x5f62da2e, +0x8422c4bf, +0xe7bdb985, +0x085c21e7, +0x04b67bab, +0xbc36f701, +0xe2b82d58, +0x5ab1c83b, +0x2622476c, +0x4619eaa5, +0x1a940170, +0x72792931, +0x6de0b706, +0xb33ca10f, +0x9c9bdad3, +0x746bcd13, +0x064e25a3, +0x142e60c9, +0x81dddf41, +0x5dd1ef15, +0x0ccfe7b7, +0xb1116883, +0x54d940d4, +0xe2787fbd, +0x5696c72f, +0xbdbfd657, +0x5a3c9490, +0x0991110a, +0x2cbe9d9f, +0xb2645dbc, +0xf1924bb9, +0xdda2c0c9, +0x9e9cf2f9, +0x73ef66d4, +0x94641bb0, +0x30205d37, +0xb6cfc412, +0x57435674, +0xd42a449f, +0x2931db2a, +0x6f491170, +0xcbcbc997, +0x849eb949, +0xb6473e1a, +0x001d81bb, +0x6725f5ad, +0x114dbe85, +0x8281edde, +0x1c9c123d, +0xee1a9913, +0x8e5b8564, +0xcc51ab8c, +0x73ed33fe, +0x6a4e09a0, +0xc831cf7c, +0x71955635, +0xad4e51dd, +0x542c8338, +0xa90e3134, +0x2f95b16c, +0x334400e1, +0x4b943254, +0x333960c6, +0x3d26519c, +0x7c5d00e5, +0x6282ee9f, +0x1c10be2e, +0x3c7b9eb3, +0x75ce71d0, +0xf9757b43, +0x184166fc, +0x5c62d4fe, +0x414283be, +0x96d3e8cb, +0x97bfa0a4, +0xb4b12d9d, +0x6d0c96c3, +0x362feae2, +0x1fbf4b0b, +0x8e4f5e54, +0x0466a570, +0xd65d1cbb, +0x2fd5b6c3, +0xfd18398f, +0xc526c112, +0x6bce1610, +0x2aad5cc0, +0x2c64a94a, +0x14376821, +0xd24f982e, +0xfe4ed7ec, +0x41e8c324, +0x40b54543, +0xee0b54b4, +0xd2055fae, +0x8df84f2d, +0x6d027d35, +0x8dab5e69, +0x4e546c07, +0x3ff434a0, +0x0d5331b3, +0xfb45284c, +0x9cabb341, +0xa564328f, +0x9e089136, +0xbdc5656f, +0x2a80d964, +0x15952ba8, +0x82021217, +0x6f925a2e, +0x4609ea04, +0x31356a2b, +0x2bd526d3, +0x58744b31, +0x61f2aaa3, +0x62982498, +0x6965a70c, +0x81a7b2c3, +0x39443352, +0x462b5515, +0xb6b9e94f, +0x11365254, +0x2252e637, +0x23cbc2d7, +0x4009e76a, +0x3873254d, +0xa6dd510e, +0x929e316b, +0x8dd0c01b, +0x69f04aab, +0xfd6f690a, +0x65ca9522, +0x6968ddc4, +0xfba94af4, +0x76c95af9, +0x1289f4f5, +0x10ee91dd, +0xdb1e6b00, +0x331166fa, +0x4b8e99d8, +0xe074ad44, +0xe969e900, +0xbda4bcdd, +0x6a3daa8e, +0xb4138ec7, +0x17a1be30, +0x46aef632, +0x69ae88ac, +0x3577b63f, +0xdbdf708a, +0x7ffda6f6, +0x1371c407, +0x3bc5fe97, +0x3c543a84, +0x2ff97ed0, +0xa4101dcd, +0x15252e5a, +0x7c862371, +0x717491d9, +0x468267f4, +0xa815abcc, +0x4d8f9672, +0x1c2293e9, +0xe02541b6, +0x479e10aa, +0xaa143de4, +0xa2201a20, +0x27fa74d1, +0x762f6545, +0x4541bb92, +0xe2481aca, +0xa2fed12c, +0x99de1f93, +0xa2d40dea, +0x67865f6a, +0x7b80947d, +0x1093bb3f, +0x69fcc075, +0xe609fa8c, +0xf37064f5, +0x41613859, +0xd877cd35, +0x7e6632c8, +0xf3235141, +0xe91a4efb, +0x2aea1ef6, +0x344b940a, +0x98da79c6, +0x5f781158, +0x5eb480d8, +0x188952db, +0x1773025c, +0x34957c72, +0xf4532f71, +0x9b690e9f, +0x4856b11d, +0x225a5d1b, +0x5c26022a, +0x27508e3d, +0x170f5024, +0x83aace3b, +0xbdb048ea, +0xa9704126, +0x179e3929, +0x859badbf, +0x99376e0a, +0xbeb8d320, +0x12e6d728, +0xb3fcee1e, +0x7f9158ba, +0xf9e18c69, +0xb0ca6154, +0x4f241c7f, +0xbea21516, +0x3292f5cf, +0xc0cbc264, +0x5698fc70, +0x997f3a66, +0x1f7f6a3e, +0x51bc1d45, +0x1fe7e14b, +0x0a43ca9b, +0x8110305b, +0xe6e7a88e, +0xcc4dea39, +0x6caf1cf1, +0x8712884c, +0x641c12e3, +0x73b389fa, +0x0c5e7ff3, +0x919d5e03, +0x8588487e, +0x14db42e1, +0xbff8611c, +0x12f2d268, +0x88c5e6b8, +0x63b6a256, +0xf727eda1, +0x9ca27cb2, +0x99191ed0, +0x90a31c05, +0x56b70ac0, +0xea76c310, +0x3e363132, +0x734a45bb, +0xa5f0adee, +0x12e0012c, +0xfd4cab2a, +0x35e13ae4, +0xf8dd5b5c, +0x010bbbcc, +0x54c2a34b, +0x6fba5e24, +0xeb3f59bd, +0xebcdb6a3, +0xc7ebd425, +0xa70c906d, +0xee51c7e8, +0x8c2a859b, +0xeea310fa, +0x25e9442c, +0x21f51f44, +0xa7b85fba, +0x7e971540, +0x9c5d1bfe, +0x9e68e7a4, +0xd994a98a, +0xd5d6a8d7, +0x81cd7e70, +0xf6689b0c, +0x46f75252, +0x1901b06c, +0x30ef5b2c, +0x2bda88f2, +0xdefc8502, +0xc47724ed, +0xb17e298c, +0x2b7441e0, +0xc1ee2e2b, +0x0b7f2036, +0xaaf97dc5, +0x00a1bc00, +0xf81ee5b9, +0x710b65e2, +0x3e598abb, +0xcf9042c7, +0x8fcc8f22, +0xbb228f45, +0xba2da43a, +0x714acd62, +0xa00da203, +0x8fa0c16e, +0x76756a9f, +0x877e34d0, +0xe4d9341a, +0xd5f65c41, +0x35e8ab0f, +0x0cd0fb07, +0x639ac34c, +0x0cd1a0b1, +0xe19cd6e9, +0x985be637, +0xa6287a1e, +0xbc154699, +0xa6bae185, +0x9ec70d3f, +0x74e71c08, +0xbc7b188f, +0x5c895858, +0xb3760099, +0x84a2bd51, +0xec63cb71, +0x92b891e5, +0x66aa9f73, +0xbe2a8d52, +0x7aa5e354, +0xf4cb8dc4, +0x76510450, +0x776f96e2, +0x5d24be39, +0x713d60d4, +0x99d65da9, +0x345f8ac3, +0xc7426eab, +0x8f0bd6c2, +0xc4bf89ae, +0x53033a39, +0x02172eee, +0x5559a024, +0x49872fb6, +0x3d1c519d, +0x661fcff8, +0x201c91b6, +0x7fd51365, +0x4ca3f163, +0x1a04efe9, +0x266cbcce, +0x6f27e551, +0x60ee16a1, +0x3bca12f1, +0x61d8a4ed, +0x579c1700, +0x91ff803a, +0xb6df44f8, +0x2456c345, +0xbbf3f73d, +0x97441160, +0x8e534aad, +0x1de02fb9, +0x37674918, +0x8d439a2e, +0xe2f3d670, +0x05646b17, +0x64221a0d, +0xc9fe9fb9, +0xe1653ea8, +0x28876460, +0xa46ddb51, +0x31f95c50, +0x61a6fa1d, +0xaece5268, +0xd27f0d51, +0xa07c4cbf, +0x450bc835, +0x69fd98d6, +0xbf67c9f9, +0xe8004d7b, +0x36a57c5d, +0x8b49cf4c, +0x1afb1fa0, +0x6f2c770f, +0x16336476, +0xdf2f6010, +0xe0a4670a, +0x3b343a05, +0x004322c8, +0xea3619ef, +0x35c04eba, +0x7fb67c13, +0x78208075, +0x7e77a192, +0x208c6234, +0x8ff5f263, +0xf3442f4d, +0xaf291404, +0x5ffb31be, +0x7582694d, +0x1b3ce3f5, +0x114cacb2, +0x0a68465c, +0xa555427b, +0x82673adb, +0x408ad833, +0x5e4ce4dc, +0x0444c3d5, +0x912890b2, +0x01d727d5, +0xa1571352, +0x6e72c7df, +0xe2b998c6, +0xefafa220, +0x89075c0b, +0xcdca37a1, +0xe7f30d9d, +0xed298aea, +0x7c1abc42, +0xe5d40560, +0xb069aed0, +0xef486039, +0x8463d8f2, +0xfc9e44d9, +0xfef315c4, +0x9d4a569e, +0x38330af7, +0x483b8e5d, +0xdf75d387, +0xb0b90ecd, +0x236e1956, +0xf5f83a49, +0xaf237e80, +0xae042693, +0xfe168c72, +0x2b9bcd85, +0x502c3966, +0x454a22a6, +0x82fc4f26, +0xc476cb17, +0xcc829583, +0x9b11ed29, +0xd416de59, +0xf9c065c6, +0x18cbb29c, +0xe087eaec, +0x04821d71, +0x416d1fb0, +0xafa891ca, +0x7a04c3d5, +0x19fd6f68, +0xe4b82275, +0x311300dd, +0x18ef66e4, +0x75216d41, +0xfcf964f9, +0xde8cf03b, +0xaf3a38f5, +0x0e9e4717, +0x9f594780, +0x25612d85, +0x891f99f2, +0x77f682f0, +0xef688124, +0x699612fe, +0x64db3e41, +0x8ace0716, +0x8e309b30, +0x805e7278, +0xeeab81a4, +0xd52753c9, +0xe99359e7, +0xf222fa95, +0xed4d68e1, +0xc5088dc6, +0xdaa3ae22, +0x7472225b, +0x1e259dc8, +0x79a50157, +0x5fd36c9e, +0xc6fc17d1, +0x73c77612, +0x39347db3, +0x2dc17370, +0x7fdb04bd, +0x2763f7f9, +0x1516af11, +0x9b9ea1a1, +0x44a841c5, +0xc8d4b9f4, +0x1ea9afc1, +0x1c84f44e, +0x3b0de77e, +0x3378f9bc, +0x4f9655ef, +0x02d874dd, +0x53ee1d58, +0x7e08d7ed, +0x9bd25385, +0xc3df2782, +0x695551b9, +0x73486da5, +0x53508c53, +0x7a485705, +0x4bf5cf56, +0x61d8e52e, +0xeb883fcf, +0xe7aa5fd9, +0xa9d5d4d2, +0x7e0f38d2, +0xd767ab85, +0xd0c9efb1, +0x1960eb57, +0x3aec6b08, +0xfc5e14ae, +0x769a2a5c, +0xe636ffa1, +0x94ce0eb8, +0x5547466a, +0x48c74034, +0xbda9a9a4, +0x00928654, +0x4e221d36, +0x9b95844a, +0xcb2d5854, +0xe61f1c1a, +0x266b0cb5, +0xe243fa0d, +0x32d5e55a, +0x00e201e1, +0x802b0bf8, +0xb6b95c36, +0x56b984b6, +0x2f899e6a, +0xf2a5d45a, +0xef83fe80, +0x52011d77, +0x7f31aa14, +0x8c34be3f, +0x02e7904d, +0x9a50a367, +0x8580532e, +0xc3a71eec, +0x913b0487, +0x4b473c64, +0xe46057df, +0x1ea50f46, +0x57a8e719, +0x6dbed31b, +0xdaaf08e5, +0x2a63fc0f, +0xc856b743, +0x423c7e1a, +0x47358602, +0x9972a7ea, +0x967331e6, +0xbf2ea885, +0x835bfe58, +0x3e97e1bc, +0xb7d3a71a, +0x485b390a, +0x96913b3c, +0xb9aba8f1, +0x566a99ed, +0x1ee926f3, +0xfbc4ca22, +0xb5f33562, +0x07c39751, +0xba88ca5a, +0x25cea096, +0xc80d10f4, +0x2863fc4b, +0xbdd5e288, +0x11d7e430, +0xc95a03fe, +0x3ac72ed6, +0xc691ab68, +0x5e73c003, +0xa65dbbda, +0x72028558, +0xcc18b333, +0x7ae3d8ff, +0x576474a6, +0x7749e116, +0x96ca4c5a, +0x61937601, +0xdacac70a, +0xc07a35ce, +0x6695f25d, +0xc2de91e9, +0x87a265b6, +0x1b8813c4, +0x23d1c65a, +0x3780c614, +0xefd4964f, +0x2888e095, +0xf1c42b91, +0xc6215633, +0xbe6022af, +0x2b57f9ba, +0x07891322, +0x304b74a7, +0x3a8c7419, +0x1587b719, +0x5201f2f4, +0xc747dfee, +0x7bf6fa81, +0x7c45b069, +0x84425473, +0x6fb70b32, +0x18dd1baa, +0xd8c2c15a, +0x02d152f7, +0x2e55aa49, +0x9d9e6ede, +0x469ac1ba, +0x33a95014, +0xc65191dd, +0x28939d5a, +0xe8fb4f8a, +0xe89a03a1, +0x723cfc98, +0xb585e5f5, +0x9f6f9ea3, +0xacef9b06, +0xa6c32535, +0x11a4f5ad, +0x7d8d098d, +0x5bf0b789, +0x2f9bd474, +0x60999644, +0x290dab7c, +0xe37c3b36, +0x2aad395a, +0xcb3b4299, +0x14f78140, +0x183edae9, +0x2a358a31, +0xfda71aea, +0xf8e37d21, +0x9d099941, +0x9216ec46, +0x89e4096d, +0x1016f402, +0xa4dd49ee, +0xc6986209, +0x7d2f6820, +0x7ac4b060, +0x968dfe80, +0x3d0ac6c9, +0xea796a35, +0x633cf2b3, +0xfadb8d34, +0x2e7303f6, +0x19894f05, +0x085f2950, +0x63cc11e6, +0x1ab79393, +0xadcfe5e7, +0x73ebd389, +0x57a7a8de, +0x54f6b8cf, +0xba16b378, +0x987a39c8, +0xc3c8b2d3, +0xe3ad4017, +0x03045cb0, +0x24a17ab6, +0x43b3f186, +0xa557b906, +0x32666fc6, +0xb187551c, +0xe1f145a4, +0x34997c6f, +0x95ce0730, +0xbf2c4c55, +0x3ac3d8e2, +0x1de3462a, +0x82bc7f9e, +0x3eab9de2, +0xaacfa5ed, +0xfdc86c19, +0xcd9bcddd, +0xaaa5dc9f, +0x52409152, +0x305a2f5f, +0x316e1786, +0xf1e6d439, +0x83e2dce6, +0x3cf77ce4, +0x587a5906, +0x060f1e35, +0xa21b8cee, +0xf59da881, +0x6f577b44, +0xb6b98408, +0xabbcef42, +0xbcbc75ec, +0xe7615ce8, +0xe786195e, +0xf4390a43, +0xd1f0c90b, +0xc5e26cb6, +0x68de1aad, +0x8ef84e7e, +0x63e0979e, +0x8657fa79, +0x873f4f40, +0xdf18c4f8, +0x9e2ed6f2, +0xdce7a895, +0x38294856, +0x77245602, +0xf4c43d50, +0x777fe2be, +0x2769d3b2, +0xba626d5c, +0x931e60f9, +0x40706e25, +0x2c342a31, +0x54565282, +0xb6d867d4, +0x1c0a8d17, +0x84b2c1dd, +0x634f67fc, +0xdfdb7192, +0x5762e6d0, +0x18bef774, +0x95feb6ea, +0xcb3b00aa, +0x6e3d9ba6, +0xbf69b651, +0xeb189223, +0x0140200c, +0xf633643f, +0x3270dd7c, +0xe72859be, +0xebf18e53, +0x8b925217, +0x70c2b342, +0x3dcd2a7f, +0xbc957ad4, +0xcacb6386, +0x8ebf5be3, +0xe144b6ee, +0x76dc16b9, +0x59b9df67, +0x0c49fd9c, +0x97003343, +0xc134370f, +0x3f0c5959, +0xcd5e2522, +0x6cb4ae58, +0x63604b5c, +0x163c9b27, +0x92bacee2, +0x98f48ad6, +0x1d24eac2, +0xe11534d7, +0xc232c7ec, +0x96cc3857, +0xeb7598cc, +0x4d52fc99, +0x7d3d5285, +0x3b4bd0ec, +0x8dfcc885, +0x05b2b8fb, +0x598ddefe, +0x625279a2, +0x82cdfee5, +0x70b667c3, +0xaf9f4e27, +0x7cce8500, +0x98c5af0f, +0x16f427e4, +0x9ad9906a, +0xdf9a90b3, +0x595e78ab, +0x8b35169c, +0x623c20c8, +0x827e6aa6, +0x601d5088, +0xab13489d, +0xc0aad840, +0xd2cab785, +0x418a190d, +0x3cd6ca61, +0xd8baf161, +0xecfc0514, +0xa89f4a57, +0xe87b2e26, +0xcc7c130c, +0xa4e90859, +0x3e8de3ee, +0x3763b08d, +0x4c21f1a7, +0x45b842be, +0xbd1ae60d, +0xe44ae74c, +0x574f0f95, +0x38dbf60b, +0x42dfeddc, +0x5084dfce, +0xe5c8ead6, +0x33308a85, +0xb820f962, +0xe515db64, +0xf044ef67, +0x42fe791b, +0x82b8654d, +0x32351df6, +0x386dc12e, +0xc3b7bd38, +0x2c09d519, +0xeb12d366, +0x26983ba2, +0x33848f52, +0xcd5e7067, +0xa0424bfe, +0xaa800922, +0x94224c28, +0xcf961052, +0xb85b7dc0, +0xc634e33b, +0xe0d24b27, +0x310c1993, +0x5d1fcebf, +0xd14a83da, +0xb373cbc7, +0xcea5b1e8, +0xdb27cbf1, +0xa5f5d9ec, +0x7202a12a, +0x273ef35d, +0x8a0b55f2, +0x315e129f, +0xa572ec45, +0xc9b604b5, +0xd0c6eb65, +0x1b8ac7e4, +0x7b263f52, +0x93c599c8, +0x7525fe4a, +0x7f6539dc, +0x7f01279c, +0x03dad82d, +0xdd4a2a1f, +0xb4a6965a, +0x5ec42199, +0xce9eca63, +0x60fee5aa, +0x14c5c579, +0x4d79fb19, +0xa5f7fc2b, +0xf27d918d, +0x7cb12c71, +0x160fc31c, +0xa2eda1f6, +0xb257b20b, +0x757f0162, +0x54c2e3f1, +0xc5a18023, +0xb9732f8f, +0x47341141, +0x26814fcc, +0x0d433f33, +0xe991b137, +0x8f20fa59, +0xa3f55311, +0x445e04ff, +0x7d6591dd, +0x243f5bef, +0xda6daa41, +0x0008111f, +0x6b78bd5c, +0x3409f0a3, +0x01cf99a9, +0xcc57c354, +0xc4b6cb71, +0x11f8137f, +0x26d9b7bd, +0x009d65c0, +0xc1b1fa92, +0xfc159992, +0xd7df2b82, +0x4ee37318, +0x93ba5be9, +0x092e1678, +0xe5efe2bf, +0xbe122934, +0x285fc99c, +0x82b4bcc8, +0x8ddbb92b, +0x99ffb7e9, +0xf1cb574c, +0xced744da, +0xe4458a3e, +0x5fd08e13, +0xd90da808, +0x1f65362f, +0xfe8ed434, +0xeed91352, +0x31246104, +0x1cd97e76, +0x2ef92b77, +0x13986c03, +0x93c8a999, +0x8724d437, +0xec8b300f, +0xefc478d5, +0x2ef1cf19, +0x9d33b995, +0x98725b9c, +0xe2a86fd9, +0x8a821a2e, +0x0143b6fe, +0xf4d53a42, +0x047a4cf9, +0x9e3ebef2, +0xf801e84a, +0x1d017beb, +0xcf4c4bde, +0xfe853314, +0x3946e2dc, +0xa57c4d7e, +0xd705c223, +0xf04ba444, +0x16a6c0df, +0xf6e9e096, +0xad2a4ef4, +0x95d9df30, +0x8ce62b27, +0xd80d957f, +0x057e8485, +0x640e84f5, +0xb56d6882, +0x76039ac5, +0xc5129530, +0xa1ee8d93, +0x12221d42, +0x3eb7790a, +0xfed90654, +0xd942fde6, +0xef5d4ec0, +0x70595c6b, +0x8e96b2af, +0xf7d4f21a, +0xb92e97d0, +0xc5ada398, +0x79742b1d, +0xfa5630cb, +0xb0817c3e, +0x62970cba, +0xe56d57d6, +0x1b5638ca, +0xcca4e467, +0x2e96c11c, +0x7173fb37, +0x8e318afd, +0xd2aea7ab, +0xa06c80ad, +0x0df11650, +0xbaf243aa, +0xb605a7c8, +0x55a069ba, +0x33a7ba72, +0xa1781ee2, +0xde1776d5, +0x22653ebe, +0xb670c0dc, +0x91a844d5, +0x1c0fc328, +0x7abb085e, +0x20c00427, +0xff9592c1, +0xc87fb802, +0x280f945e, +0x8435e911, +0xf2f21efb, +0x6e6342cc, +0xfcb13a8c, +0xd5aa79e0, +0xd0b1ce8e, +0x325464b6, +0x973cc590, +0x57d67531, +0x5d822757, +0xb5ef6082, +0x7904140d, +0x21959a51, +0x4dfe6160, +0x9a8ea9d7, +0xf78d8565, +0x2893a53f, +0x54920c3d, +0x254defca, +0xca79c984, +0x33b561b9, +0x8245df6d, +0xf2541318, +0x242e72d3, +0x37201555, +0x3e4c169b, +0x3b52deeb, +0x65dd151f, +0x0c682ef9, +0x8708a0ee, +0xae81dfcd, +0x4aa1d0cd, +0x40f89694, +0xf6de91ea, +0xaedd7b6e, +0x3e9ad266, +0xf64b1ec1, +0x367ca3c2, +0xc9169ff5, +0xe9a8750d, +0x58e2a684, +0xb89dc280, +0x6e3089f0, +0x15a577fc, +0x8ed1112e, +0x169e6337, +0xa66cd251, +0xef17f223, +0x7aad54da, +0x30390dc7, +0x20bba316, +0x1f3a89fa, +0x7761081a, +0x0a5bfdb8, +0x6b447431, +0xfd4dcda1, +0xd7396f84, +0xaf6ec2e5, +0x66a36851, +0x258c841b, +0xebeea5ee, +0xf184a328, +0x3457cceb, +0xe6366432, +0x895a1e48, +0x4612983d, +0x167ef07c, +0xd1a035f8, +0x5d5e9c4c, +0x63e8e407, +0x8f45feab, +0x153c6fd3, +0x4ea819e3, +0xf8648a68, +0x3c0518b5, +0x9292a66b, +0x9a3583af, +0x2d3c1cb5, +0xe2237b6d, +0x48a8dbd6, +0xc786811f, +0xfb23ae32, +0xe8417907, +0x4d3f03c5, +0xa79562c0, +0x16b7b4d6, +0x8e7e4f7b, +0x5501454e, +0xeea86d04, +0x73e5cc43, +0x208811bb, +0x4653dbb8, +0xab411982, +0xcd7a83cd, +0x8091efc6, +0x4dd3eb28, +0x403786da, +0x352b82fa, +0x03e33ec1, +0xed1e859a, +0xb360e493, +0xb6af7d94, +0x364e59df, +0x1edb2563, +0x26825cec, +0xee24c50d, +0x7ce67e79, +0x5139cd39, +0x1cac2ec9, +0xcf6413ed, +0x18a583cd, +0x33f17851, +0x34723eb3, +0x5aa53c97, +0x93b8af65, +0x5e52190f, +0xbd2a2485, +0x4c6bc95f, +0x0c1bca62, +0x40b0c1e5, +0xb6297d53, +0x7223b1d6, +0x741f7635, +0x00bdf2da, +0xea767547, +0x87eeb521, +0x87019a84, +0xc0964b69, +0xb265640c, +0x419a8272, +0xca870086, +0x3b76bf9c, +0xb2ede83c, +0x46eac9c9, +0x75e5ed31, +0x662e581f, +0x21ec7db1, +0x2170d942, +0xcf41c42c, +0x1bab3491, +0xffadc96c, +0xbb4c310f, +0x939b3f61, +0x6e2d60ff, +0xcbf9d35e, +0x6db076be, +0x6a1e90e7, +0xc7096675, +0xe7d802ad, +0x0c89ab31, +0x654c1b45, +0x0343fbcd, +0x5f80eabb, +0x92faa8be, +0x735a40a2, +0xddf47195, +0x34fe4b1b, +0x3f059c32, +0xe95330c0, +0x5d5e95d0, +0x15b6dc5c, +0x252ad4db, +0x555798d7, +0x31d6bec5, +0x986e173d, +0xf8ee102a, +0xf44bf862, +0xf336e7f6, +0xef172579, +0xcb378a36, +0xafbbd81b, +0x2708a043, +0x6830bf67, +0x183d1e34, +0xd7696a1c, +0x17877369, +0x22bb135a, +0x0ba83765, +0xcb665dba, +0xbedecd7f, +0x918f4071, +0x3055ac09, +0xcbfa8637, +0x6f7f41cb, +0xdb383d1b, +0xeb60d739, +0x1c5c2ac6, +0xc60005de, +0xd0bf1ceb, +0x99f53a57, +0xbcd3d24e, +0x9b1441c9, +0xb7854d4f, +0xcf26a266, +0x1039d0dc, +0xd0778680, +0x39f32b2e, +0x5d9dace2, +0x49442e4b, +0x006766a9, +0x9f9580a7, +0x7d664e2e, +0x909dbf3a, +0xddf866be, +0xbf78fbd7, +0x60229886, +0x747e8ee8, +0xd718c220, +0xfa73ac45, +0xe0990d57, +0x0527f837, +0xefafcfbb, +0x56cc5fa4, +0x5c537939, +0x16c38ca1, +0x2d9db5e0, +0x57abd65a, +0xc551c0d5, +0xc3897549, +0xa07e19c0, +0x65b453ea, +0xbbc62366, +0x6f7ddff3, +0x8a091fb9, +0x2e1c54b4, +0x21d88570, +0xcaf02494, +0x80a7b831, +0x970d0413, +0x1e66f72c, +0x040b265e, +0x21d8a949, +0xaadce73c, +0x01989bf8, +0xfe6da61b, +0x7b15a797, +0x4ef9771a, +0xfdbda8eb, +0x1755e951, +0x1cb5a9c3, +0x486b648b, +0x6b98f974, +0xa269cfc1, +0xba8fd426, +0x1d02efa3, +0x2b092cde, +0x8c67304d, +0x88559f6e, +0x5c1c22aa, +0x503124fc, +0x8aa7e9ed, +0xa940a8b3, +0xa1305884, +0x01a4c9b6, +0x4e78069c, +0x07dc8342, +0x4f40e6a2, +0x08245794, +0x55f36e95, +0x6eaef553, +0x7e5fe35e, +0x47d9ba47, +0xea57f7fd, +0x5ca8ab28, +0x9692f502, +0xe942cd90, +0x8fef0d14, +0x66199585, +0x730bdbd9, +0x7b965e6f, +0x750c2b9c, +0xc36738b1, +0xa16282c8, +0xe2981a6f, +0x5684a389, +0xd04db301, +0xb8ab6ed2, +0x4c51a09f, +0xc84c9ee8, +0xb7774fd6, +0xac519322, +0x5878d1cc, +0x600c47f1, +0x54df6c48, +0x5de786cf, +0x2a19e93e, +0xa24ee02c, +0x21d9eb5a, +0xe47a1352, +0x9d312904, +0xbca35f3c, +0x74aa5215, +0xf6e0bd05, +0xde108db5, +0x789194d2, +0xeb160648, +0xd5bd51c3, +0x9c320099, +0x88f4d606, +0x21915d2b, +0x61e4ae58, +0x0f0ede3e, +0x69f62c16, +0x5fde6034, +0xcbcca0d7, +0xc673a10c, +0x9f357ec0, +0x69730ecc, +0x5a737cab, +0xf8db109b, +0x56cb3561, +0xeb55eea6, +0x9cf74b32, +0xa453b5c3, +0xb885fb26, +0x207de9f5, +0x2462ceea, +0x2d656c28, +0x0c2c7285, +0x3ad9707f, +0xca52eeaf, +0xc9daae02, +0x1a199a4f, +0xf0ecacd7, +0x7f6e3c3c, +0xce9ca21a, +0x94de55a2, +0x6a666a07, +0x4438944e, +0xc9779d75, +0x9923f11e, +0xca9e539d, +0xc1ab5ae2, +0xe3762edd, +0x9a2258f9, +0x29ae12f7, +0x9f40db79, +0x978ab59b, +0xbd7e3e41, +0x18cb0645, +0x67e1246d, +0x93fe3d9e, +0x90b30299, +0xf6f6e15f, +0xd657d728, +0xa4bd202e, +0xa1d3a010, +0x38b178b4, +0xd6764cc3, +0x5b527a09, +0xcedf7bd1, +0x6607de4a, +0x756e2d86, +0x29211a9e, +0x0b3d3871, +0xa279b084, +0x80aa79ee, +0xb1176731, +0x7b27087b, +0xc01e006c, +0xa1f8e255, +0xa8e740f7, +0x61c34227, +0xc9dfca1d, +0xb981b935, +0x4b50a674, +0xd394415b, +0xa905f170, +0x64b44a54, +0x84c405fb, +0x58afc52d, +0x62088b4d, +0xfc17d39b, +0xc4c32c91, +0x0b5b74ce, +0x7c7e2a6e, +0xa0304924, +0x026fa55f, +0x6e787648, +0x5755d7e8, +0x2c927daa, +0x8540fb74, +0x73500826, +0x41a9bc8c, +0x304cdf49, +0xfed24762, +0xe62ac7e2, +0xf57b0163, +0x91f0e287, +0xc22267a2, +0x23f44ac2, +0xac828222, +0xec162aea, +0x9e2d5471, +0x19738895, +0x83a50d48, +0x7d7cdc5a, +0xa0b72ba7, +0x77e1f95a, +0x8f0ae033, +0x8339e3ea, +0xbc0a52f3, +0x6e486b56, +0x24e4d74f, +0xee944768, +0xfa150e60, +0x7837a494, +0xe067aafe, +0x5938f7d2, +0x08ebfade, +0x7b2f101b, +0x968a1b23, +0xe1393194, +0x3c4173f7, +0xf34a6e75, +0xebfffad9, +0x4030e838, +0x92d642a6, +0x466a2aeb, +0x96234502, +0xe7d8a061, +0x8d1ef7ae, +0x0ef3952b, +0x40774b64, +0x1dd956c4, +0x859593a8, +0x6c0ecab2, +0x5d7c3e9b, +0x015c41e7, +0xaefab981, +0xff9f4899, +0x343972de, +0x57f7d02a, +0xeb5fc42c, +0x61e90127, +0xdfeb1b8c, +0x72fb171c, +0x764eba27, +0xe8873b0e, +0xcfa8b528, +0x4f3fb810, +0x90232d80, +0x83d18d2c, +0x96ed2e7c, +0xa2ee3dc5, +0xdd7d3a40, +0x4010ccb8, +0xaed63421, +0x7a1489d8, +0x254e332f, +0x4aa87d05, +0xb6cfa39c, +0x16edc813, +0x46e0136f, +0x75ea876b, +0xebda15d9, +0x98071880, +0x2109ab93, +0x2d80a933, +0x91f5b589, +0x66ee6fdb, +0x804d3ee3, +0xa260afb3, +0xe0f99a5e, +0x5b5d6da9, +0x97a67780, +0x54af0420, +0x6d13f85c, +0x6e570dcc, +0x5cd4784e, +0x23324cd8, +0x7a1d35a5, +0xec05d049, +0xbe3a2df0, +0xb9f0bc54, +0x5300c4e9, +0xc072f9b2, +0xfe92f2c1, +0x435e5d08, +0xbb6f2236, +0x9d6d943a, +0x77bce47f, +0xb8fe77c4, +0x083ff4fb, +0x1a10dd75, +0x86fa12e5, +0xc4dc13e3, +0xfa368d50, +0xba65bdb9, +0x29958428, +0x9ac1ceb0, +0x90c47231, +0xa472702e, +0x15d269b7, +0x87fb6796, +0x7c7444a4, +0x16e9b39a, +0xe8e9b82f, +0x39a2d104, +0x76050b82, +0x234d01b0, +0x655eeb24, +0xa0cbc457, +0x75efb4b0, +0x73f090c6, +0x2af9a71b, +0x50855375, +0xbe6056be, +0x6a3f60cb, +0x9da1251c, +0xa5891bab, +0x061bb202, +0x5dbff12f, +0xfb208f9e, +0xd44059f9, +0x36e4a9b6, +0x644e0ab8, +0x76800002, +0x3d60d372, +0x3acaa843, +0xe66883c2, +0x8ba21d44, +0x19aa26a7, +0xefb2d34c, +0x667c8688, +0x75ea0d7b, +0xd734f610, +0x13d7abee, +0xefab5218, +0x2a1fec5b, +0xd80b3eef, +0xaf41b8c5, +0x43ea947a, +0x346b11b6, +0xb5ac1c79, +0x9bece265, +0x07007dd4, +0x2da0f775, +0x8572a2b0, +0xbb035019, +0xd331d97d, +0x7282a803, +0x18aff941, +0x3ef35355, +0x0ad5e2a5, +0x3d4ec11f, +0xfc4c1951, +0x3f795ae6, +0x4f535db8, +0x97423cd8, +0xcecfcd93, +0xe2c514af, +0x1ebf6eef, +0x0dedab46, +0xae493854, +0xddfe4af2, +0xa71fc9d2, +0x3ad5a2ed, +0x778f8044, +0x1e2bc73c, +0xcf515d06, +0xee3a2e47, +0x4733b4b3, +0x60ac2daa, +0x7d754ea6, +0x21850d6f, +0xee07be55, +0xf590d235, +0xb3f9ab3a, +0xcf62e92d, +0x8cfc41a3, +0x82bbf88a, +0x5713f3a6, +0x379d0640, +0x80b9fe4e, +0x29e2d43a, +0x5a3cca89, +0xd2ab7a61, +0x5d3cc7c8, +0xcba9f8f2, +0x4b11b81f, +0xb6e71374, +0x1cecfc09, +0xbfcf0665, +0xde68415c, +0xe4b33ecf, +0x6b25321b, +0x604859ca, +0xc885aa77, +0x6718f799, +0x0fb8a47c, +0x7a0df3f2, +0x8544e4d4, +0x2bf961ee, +0x726e4ee1, +0x3719e096, +0xb535474b, +0xc2fca938, +0x15d60685, +0x2e31a350, +0x739f2f05, +0x90906bb3, +0xd6fcf776, +0x0cf27de2, +0xf3a6e59d, +0xcc5caa49, +0xeb87df33, +0x2428198d, +0x06ac17d2, +0xc17cc8c3, +0x996262ef, +0xa210d517, +0x4be47ac3, +0x8368c3e2, +0xd78dc08b, +0x508460ef, +0xb69ae750, +0x263723d0, +0x20f5dbd7, +0x895d3948, +0xc98fde90, +0x073ec35c, +0x9164b352, +0x6da3604a, +0x4ed5f20b, +0xc92a8b53, +0xb04d9710, +0x66503b98, +0x32e65467, +0xd78ff0a1, +0xa6e52116, +0xf911008e, +0xaf8507bb, +0xfad6d616, +0xbdc24611, +0xd03df595, +0xfe99d47a, +0x3c82edd5, +0x01ed4894, +0x60ae6ad1, +0x3b6bf39d, +0x8eef9ccf, +0x7b9be3f7, +0x2470bb86, +0xb67e9554, +0xa16984b5, +0xd5f16c24, +0xe865b248, +0xcd14e779, +0x67fe16f8, +0xb61fc80c, +0x9f0ef0df, +0xee437a54, +0xd2cbe65f, +0x91734405, +0x837643f0, +0x950c8323, +0xa3624716, +0x16fb1324, +0x9c37ce5c, +0x4a0a9aff, +0x24cf6caa, +0x3d86998b, +0x9861be75, +0x6d648022, +0x57958c44, +0x7ebb8489, +0x0f6206a3, +0x41154a26, +0x7502f1ab, +0xc5b846c6, +0xb9eee6ca, +0x155c8bc2, +0x78393433, +0x0c5f47af, +0x73492cd3, +0xda574508, +0x6ecff3e3, +0xee404bce, +0xef21f847, +0xedc2659f, +0x24d635e5, +0xcd919575, +0xe4eb0552, +0x967c059f, +0xfadc5f6f, +0x7f6d0fc7, +0x654d84dd, +0xf9ac0445, +0xf66fe3cd, +0x89a99118, +0x126d9e70, +0x7e967078, +0xf609546f, +0xfba27a11, +0xe3e075a2, +0x3877d982, +0x2eba6773, +0x07c06cf4, +0x5b8d2dd7, +0x20e8d0c8, +0xcf57bb41, +0xf5d36561, +0xa121cea3, +0xbf8a2a74, +0x22710c0b, +0xaa068489, +0x1aa10200, +0x4c530b77, +0xb0b0a32a, +0x1323c070, +0xd3b64686, +0x53cf24cf, +0xcd0678e6, +0x6a19e4b8, +0x98c1a641, +0x88db917f, +0x826dcadc, +0x561c749e, +0xdd8ca384, +0xfd58e719, +0x7ad5d7da, +0x4a453cbc, +0x29f32c39, +0xeec1db58, +0xc9daf694, +0xe047c88c, +0x75751e3a, +0x69cdeca0, +0x35554b6e, +0xf5581b63, +0xff6a0f03, +0x27b49b8c, +0xeab0a962, +0x0161b114, +0x057d77aa, +0xbdeaf931, +0x267b70fd, +0xf946943e, +0xf4122cd3, +0x6098b15c, +0x78aa8daf, +0x96302f22, +0x099f0840, +0x25286ca8, +0x53ace7d2, +0xaad502de, +0x3dc5fbbc, +0x42d3343f, +0x57e90faf, +0xabd55e90, +0xf803b66d, +0x50bfefe3, +0xf2d0b941, +0xdb12948e, +0x20c68675, +0x81e3089b, +0x56d3f792, +0xb7f55d2f, +0x5ddfb360, +0xba7bae75, +0xcbc5a945, +0x8aef8348, +0x1bb298ba, +0x839e48aa, +0x65ee417a, +0xeda82862, +0x571f86e6, +0xf9da2a7f, +0x922f35ce, +0xaf98e51d, +0x8c8f99df, +0x682afad9, +0x0ad8d194, +0x58a7e982, +0xabd890ad, +0x6d0f5f2c, +0x6c136052, +0x1a8f007e, +0x7a67fad7, +0xc8fdb6e5, +0x89c07166, +0xf8b6b74d, +0x914d0f24, +0x5ce067ca, +0xd9def72c, +0xe1ec3b8b, +0xd140fdf3, +0x2c9b5a74, +0x4d39e3ca, +0x47a2f94a, +0x362de89b, +0x7d9e9eb0, +0xbd8a8236, +0x412c38d0, +0x585c4ec2, +0xacb91bb9, +0x713d2541, +0xe1aa864e, +0xe465bc71, +0x18d1107f, +0x4d8cc828, +0x358374c3, +0x86c7037c, +0xf45516ce, +0x7ff6ea63, +0x5a8c19df, +0x7d6e5e12, +0x690c05b8, +0xa4f29455, +0x304c2304, +0xed6e66c1, +0xdac64899, +0x81027a81, +0xe94c2221, +0xfeb7b726, +0x1d5ef6e3, +0x32526872, +0xc32ca8f8, +0xdb4245e3, +0xbfc17c59, +0xeca69305, +0x13ffa3f6, +0x058106cd, +0xaaee9cc9, +0xb41e95bd, +0xe94ac349, +0x66c28be2, +0xe5637974, +0x542e46c0, +0x643c1015, +0xf6a59890, +0x59155292, +0xa23f248c, +0x2bccff27, +0x1776fdc5, +0x66bffd64, +0x4fdd60df, +0xe824177f, +0x99f7cb77, +0xac3b5c49, +0x4d21f8c0, +0x3ef66681, +0xaf12edea, +0xcf79b686, +0x8b426e1e, +0x0f23f4b7, +0xa340af83, +0x438cf3b8, +0x285a5a08, +0x1f404a99, +0x44650b36, +0x258f8a6b, +0xe203b6f8, +0xa6a26152, +0xa407a43c, +0x182a474d, +0xd874ac68, +0x82844556, +0x8b0c079b, +0x8174a23c, +0x80baff54, +0x2a6d6425, +0x5ad1a872, +0xf3b387e3, +0xd4f2a22d, +0x17b7cfe5, +0xaab60d27, +0xa1448341, +0x7ce1ce72, +0xf0cbdf4c, +0x60dcdb45, +0x1602647c, +0x28449079, +0x7731ddd3, +0x3bc6d828, +0x7b99a2da, +0xbcd57110, +0xd1f5ad7a, +0xcd210de2, +0xad713a15, +0x0f931054, +0x1fe8a517, +0xf704f37f, +0x22eac7ef, +0x99e8e9a7, +0xb5621a53, +0xd22f96c9, +0xb7c661af, +0x0ceb687c, +0xaba9fc0c, +0x5f0ac20b, +0xfcb30581, +0xd5243fb5, +0xda212375, +0x51c3bf7a, +0xfcd2d205, +0x050a5b62, +0xfda4b207, +0xea781c01, +0x6118be36, +0x678913ea, +0xc3bec947, +0x0475d63d, +0x5fb3bc27, +0xbedb150d, +0xf9a1198a, +0xff22042c, +0xc489359b, +0x2ffd76cd, +0xe8293afd, +0x478491d6, +0xbe57f562, +0x529731cd, +0x8031de22, +0x24d77292, +0xf2434092, +0x6b9d5ba6, +0x7795fdbb, +0x5df19c2a, +0x08f6a9a0, +0x39598ea5, +0x8c9da9f8, +0x6ea7820d, +0x0c024ad7, +0xbde54261, +0x11822f4e, +0xc4b7dc6c, +0xf54fc8e8, +0x6d8891db, +0xfe188659, +0x3dddc9c5, +0x5231de91, +0x54e6613c, +0x4ca44a2e, +0xd96851da, +0x81e17acb, +0xb58db5d3, +0x8e489344, +0xe3b6dbb1, +0x6570bc1c, +0xe9f6698a, +0x179606d5, +0x3eec3e1d, +0xd6104d69, +0x77a62326, +0x659335ea, +0xfdda6378, +0x3c3ca6bc, +0x6cbe98c3, +0x24ac4be8, +0x01879d55, +0x1f30868a, +0xb21da3d6, +0xdc1a9391, +0x3ffca284, +0xcc729a24, +0xb25d6e52, +0xa11aa87a, +0x57da45a1, +0xc7dd638a, +0x7c09f9a1, +0x86961280, +0xcfff1e04, +0x74779a68, +0x32b3e3ce, +0xbd332c94, +0x39a0218a, +0x51f3bf3c, +0xfc25d4ed, +0x7eeb5496, +0x8270f102, +0x8e020901, +0x6dcfff58, +0x22bc5326, +0x5dbc6ed9, +0xaea8edf1, +0x4b68a6ab, +0x761ba4b5, +0x6f6127df, +0x35c38047, +0xf4915d03, +0x1adff145, +0x60a53c53, +0x4d1fc35e, +0x6656baa4, +0xa1d1a7cc, +0xae73a67f, +0x5413233e, +0x8c07eaa0, +0x7af15126, +0x10116bba, +0x24f1f3d2, +0xd2b97898, +0x48e89af0, +0x4b0c838a, +0x90e03529, +0xf94a50b9, +0xdbcf50a9, +0x86ae3240, +0xfe98ebab, +0x65d0b8b5, +0xcff33958, +0xfa561235, +0xdf103e34, +0x645fcf95, +0xe8c3b4cb, +0xe859ccf7, +0x88ed8abf, +0xad6cc8c3, +0x94bb4c4d, +0xa190b62b, +0x52db3937, +0x5a986d51, +0xae4d4733, +0x604ecb70, +0x56d68ec9, +0xb87355a4, +0x23e60df6, +0x0d740fd3, +0x06806d8a, +0x7ace2d89, +0x91da3943, +0x6a9b586e, +0x135ec0e5, +0x21525424, +0xc66e07f3, +0x3794a373, +0xa19fea6a, +0xe1cdcf23, +0x4460c430, +0xf537048f, +0x39c0d95a, +0x16d2798a, +0x66b5c6da, +0xec8696e5, +0x467e4c35, +0x40323d79, +0x6eb52c35, +0xca4bc98d, +0xf3fdc2d6, +0x5b4d16f0, +0xbefd2fc3, +0x53e9f4da, +0x3fb38c7e, +0xd7a17112, +0x0c94ab9e, +0x03fb30a4, +0x37e86dc9, +0x07419c58, +0x7d763300, +0x581c1e9f, +0x35ece831, +0x232edf5d, +0x814810c2, +0x2008dda4, +0xb4860f9f, +0xb2187fcd, +0x42b49e94, +0x249e4eb8, +0xc71e70be, +0xb5849a08, +0xe9b73a5e, +0xb9070b20, +0x20bb4722, +0xea315ef8, +0xd81d9f6b, +0x94ac13dc, +0xa1fd3103, +0xef61a488, +0x561edde1, +0xcc54592b, +0x44c47fc6, +0x030ec1fa, +0x9c180b48, +0xd84921ab, +0x87733e62, +0x41a9976a, +0xc3087e13, +0xb52fb5c5, +0xd48a009f, +0xe1881b49, +0x30c1d3fe, +0x29482abd, +0xde15ed23, +0xdaa0ca26, +0x049ca581, +0x60bba1a3, +0x491a5c58, +0xd78aa621, +0xd3dbba76, +0xf1cd7180, +0xd24bcadc, +0xf0cc770d, +0xfd15f1e3, +0x49f5fcc9, +0x4c767003, +0xf6f9f4fc, +0x06e50a50, +0x7c6665fa, +0x1c82503e, +0x0d59ac43, +0xdd870885, +0x76654633, +0xe3ebc63c, +0x2235169e, +0xcbb01221, +0x0b490b68, +0x1e827620, +0xe7b79ab5, +0x02cff5cb, +0x4672e364, +0xa9ea3b34, +0xc390730e, +0x448e9212, +0xf5427fe1, +0x215d0d25, +0x2c189083, +0xe50f8bf4, +0x4c35a437, +0xae3cc33a, +0x176c3323, +0x2d63d068, +0x5ab2c651, +0xf78fa908, +0x8eac379b, +0xb9a898fe, +0xd1aac01e, +0x164474ef, +0x8439dcbd, +0x434899cd, +0xbc3f30e8, +0xc0be1229, +0xc87a1a9e, +0x21b11a82, +0xe2e5475c, +0xe102202b, +0x9dda82df, +0xb9190ccc, +0xb25727c8, +0x66d8ce0b, +0xfeddf081, +0xef1e323b, +0x26190db4, +0x5ae6eed0, +0xbbd598cd, +0x808af838, +0x66625f9e, +0x336afd5b, +0x480061c6, +0xa859eff7, +0x48207445, +0x199ef0b8, +0xb1b8b5b5, +0x3af037f0, +0xf46f4a5d, +0xfbca4695, +0x280f58a6, +0x7489884a, +0xf0d4be66, +0xc89eb40f, +0xae5f6378, +0x6424e06e, +0x349eadfb, +0x55abc946, +0x4628411a, +0x1f1cf980, +0xf5d42f3c, +0x3236149e, +0xf0c577c0, +0xb889e481, +0xec8b3268, +0x0b90eaf6, +0x39b8fe14, +0xbd16b5a4, +0x8106e688, +0x61dd72ad, +0x5b61a5d7, +0x9122d1a4, +0xab445e02, +0xcf9bef52, +0x9ed5c59d, +0x09256945, +0x033aa4db, +0x0d07d837, +0x5a984685, +0x5644facd, +0x6d7f6046, +0x4b61318a, +0x16f56214, +0xfa0719aa, +0xc2efa1ba, +0xa461c510, +0x88e07d10, +0xaa3b1f93, +0xc0733ac7, +0xde0a2bf6, +0xd8cc06d0, +0x0acd05f6, +0x5e9231d3, +0x8bf61b3f, +0x13b7377a, +0xddb1ed3c, +0x25885fdd, +0x6bab83f2, +0x22146a24, +0x18ebf5b1, +0x082eb2f7, +0x3980e539, +0x5c8157cb, +0x71b1aaae, +0x86a9cbdd, +0x6d2eb006, +0xe5c52df7, +0xdf52f830, +0x483064ba, +0x78d91d49, +0x582ee54b, +0x5e235e33, +0xd1574d7d, +0x7ff69318, +0xe0f9ee6f, +0xbd3a6e25, +0xaf76e3c4, +0x60501f3a, +0x72adf0bd, +0x98423366, +0x9ad5ae8f, +0xa6df4dd9, +0x2623cfb7, +0xe3ef032b, +0xe64af5b0, +0x7d2002b6, +0xdd655443, +0x1dcd24e4, +0x20832123, +0xf49fee66, +0x461bb2c7, +0x0ff3a32c, +0x65b3fd90, +0xdbb9814f, +0xe86f442b, +0x2cf3ffe9, +0xee84da9b, +0x926a215c, +0x8176f60e, +0xe9d90692, +0xc6790fc5, +0xb703a2a9, +0xd8f976af, +0x1d576c6b, +0x037c3364, +0x86f53809, +0xcad5870c, +0xda2c815d, +0x121dbc32, +0x753401aa, +0x9a8910a3, +0xb37dad82, +0xac784239, +0x35e20aa4, +0x554565eb, +0x2a8145aa, +0xd7b1a440, +0x9f447f7b, +0x4dd4aad0, +0x086c9a3e, +0x5544d99c, +0xed1a3d05, +0xb8f96c88, +0x305687b7, +0x574e5ac9, +0x9dfa6ead, +0x2f58ce12, +0xff39e1cf, +0x765a393a, +0xad56ef8f, +0xebe0f776, +0x7e412dd0, +0xc96dd477, +0x01e1599c, +0x98a90b9d, +0x82ebcd67, +0x28b8a933, +0xc801b25b, +0x200f4217, +0xc2cd52ed, +0x5f3d04b5, +0x5984dd6a, +0xd7be758e, +0x1259fdf7, +0xef373913, +0x9d794004, +0x36892f02, +0xad5e41e5, +0xc9d46036, +0x748cbe22, +0x1427dfd5, +0xe479a388, +0x2758d6e3, +0x16bf8a60, +0x024f2b02, +0x62ba0729, +0x45be809a, +0x4a0aeb20, +0x57f6d210, +0x58e4740d, +0x8b449de9, +0xe519d7c3, +0x466f33c0, +0x4dbcbb51, +0x71a94b68, +0x60a373af, +0x9aa18266, +0x6391dffa, +0x7a056cbc, +0x2cc8e6db, +0x778563cc, +0xa3bff5b7, +0x6110a009, +0x91379b54, +0xb2ffea5c, +0x399e5e29, +0x1dc3fab9, +0xf39640b8, +0x15a878f3, +0x2398ed87, +0xb9d5b04a, +0x557138cd, +0x61fdc577, +0x22bd04fb, +0x038270be, +0xc4626620, +0x0df6ffee, +0xfd6a78b3, +0x5743cc0a, +0x6d06dabd, +0xdfbf1d93, +0xa101a707, +0xa6533024, +0xb20d1b7a, +0x0a5a48e8, +0x3f4add7d, +0x3fe8aebb, +0x5d685f14, +0x05d0e2ae, +0x951c3740, +0x6388c8ae, +0xf4cfe627, +0x1fdda670, +0xb8b60a2b, +0xdb79ffca, +0x5692ebe8, +0x53ee0c39, +0x744b33ea, +0x8edccd42, +0x654e7691, +0xb4efd4b9, +0x0ab898c8, +0xcec77642, +0xd5ca86e0, +0xb5f291dd, +0x38ae1705, +0x142dba08, +0xf37674d8, +0x215f6578, +0xd6af409e, +0x4d6d57e5, +0xfecf2207, +0xd0cabee1, +0x92fc5225, +0x86af4a6b, +0x8e0efc27, +0x9cc0398d, +0x38974054, +0x0068c5d7, +0x995ef4ed, +0xeef74dc5, +0xd8b3c371, +0x590f9c73, +0xd748d287, +0xd4e35034, +0xb403fc49, +0xe56fdaae, +0x56d997e1, +0x23f1fdd6, +0x3a4b7e40, +0xa8ce4251, +0x289ed037, +0x386318d6, +0xbd73adcb, +0x80628b63, +0xc3656864, +0x8989a4cb, +0x9e61334d, +0x187c9875, +0x28679637, +0x831e1e68, +0x972563bf, +0x0e8a5630, +0xe28c8080, +0xe8ca1204, +0x2bacf89e, +0x479cf4c6, +0x7c579da5, +0x2223e0d5, +0x567b2022, +0x8a517d8b, +0x3fe605f7, +0xa60c28ab, +0x9eab405e, +0xbaacec4f, +0x8854765a, +0x77f828e1, +0x98c7f1a4, +0xf24dade6, +0xb7ebe5af, +0x0e2d1809, +0xc7d01af9, +0x7b1b9f2a, +0xc091a177, +0xa6bece12, +0x41831eeb, +0xd68cfeba, +0x4d4a7031, +0x29250b49, +0xa1ed6ccb, +0xb8ecbeb7, +0xd2670c9c, +0xfddb42d1, +0xb8349e04, +0xb86603fb, +0xf35f3a86, +0x728121e4, +0x74864509, +0x09eeaf35, +0x16f28f49, +0x31ef120e, +0xa3a67186, +0x231b237f, +0x7ca07c4f, +0x978b42d4, +0x7a721158, +0xe5f0c3d3, +0x26bc58d8, +0x032dacb4, +0x7d0d27ae, +0x5c85120e, +0x3826fbe9, +0xe57271f2, +0x8fe36a1c, +0xd1fa57bf, +0xaa58cbd6, +0xc654d1d0, +0x9de6d657, +0xd0752615, +0x7a4ff825, +0x4e0f5af1, +0x532a7c3b, +0x537eb539, +0x10e328f8, +0x4db11ee8, +0x71748307, +0xecb58296, +0x56cf50cb, +0xfcf29250, +0x21a7421b, +0xe5169ec3, +0xbac4c37b, +0x9e865665, +0x090b8f40, +0x93969096, +0xe8c7a6b9, +0x7ac27249, +0x0ba26cb1, +0x8cf242dc, +0xd66db22f, +0x2ec634dd, +0x717c97e7, +0xf03e8d50, +0x8356494d, +0x91bb3ae9, +0xfd40cb64, +0xad19a1f8, +0x27f8d3b1, +0x43d3c699, +0x584c97b5, +0xa0308c40, +0x7f50d11a, +0x2962d6a0, +0x6b6cfa46, +0x38953c0b, +0x4a9c69a2, +0xbf3a6af4, +0x55dc7a71, +0x45ac8fef, +0xcb1cae50, +0x11ea74f9, +0x8b2a0d1b, +0x1085c0a6, +0x86e302e9, +0x65df4f9b, +0xaa210a2f, +0xbfb1e0bd, +0xdbfcecc9, +0xb64c558a, +0x66e43f45, +0x91c0560e, +0xef58121d, +0xb6aece53, +0x2f8873fc, +0x0fde3274, +0x870a33aa, +0xfaadeea2, +0xc004f534, +0x54f3c05c, +0xa1b102b5, +0xaf9597e9, +0x3bcafc97, +0x66908656, +0xce636f7f, +0xeb5f0747, +0x313ba13c, +0xc4f2f61a, +0x245157d5, +0xb9ee9bcb, +0x329dff12, +0x5771767d, +0x35fb92da, +0xc42a9778, +0x8037e46f, +0x00be6fe6, +0x2e57919c, +0x9c219a89, +0x3c8e91db, +0x999b4f61, +0x1acfc11a, +0xce5729b2, +0x7c474ccf, +0x70db71e3, +0xdefb1b7b, +0xa96fce18, +0x11e5b8ec, +0x6c7fb31a, +0xed4c049d, +0xcd7271a0, +0x685b5b2b, +0x031ac0c4, +0x596dcfd6, +0xaf682089, +0x3b8a18d8, +0x4503ce25, +0xa41eecd6, +0x84dafcf0, +0x754b08d4, +0x16802d34, +0x5b4fe1ad, +0xa21ec71d, +0xc47c226d, +0x003a34cb, +0x6b9f9955, +0x73174612, +0xed421656, +0xb0a7f416, +0xfb32281a, +0x94c2fca7, +0x89b92b43, +0xd14baa55, +0x87c67d45, +0x409204ae, +0xcd86bf52, +0xed0d492b, +0x24e7c990, +0x8f864042, +0x8a99b9bc, +0xb0e46c83, +0x1db971cf, +0x30b3e4e5, +0x12f51f6e, +0x907091da, +0x8c1763f3, +0xf1233e43, +0xe9614e8c, +0xcd84c8a1, +0xc15865eb, +0xa9c7ffb5, +0x05022891, +0xe7da1295, +0x7a25cb27, +0xfa9776d1, +0x15b07f3b, +0x21070f61, +0x8e9a3ef9, +0xaa47d74a, +0x7f69a0d6, +0x1460ccb3, +0x1f555963, +0xf9797598, +0xba49c15e, +0x9317f7eb, +0x0815a42f, +0xb4ab899b, +0x433b5786, +0x4caa124c, +0x0f0a1e4a, +0x6bcb97a4, +0x8864f300, +0x05c58202, +0x56c0b43d, +0x2b0269a5, +0xf3569631, +0x02e0e24c, +0xaf03f9fa, +0x51fbfc0b, +0xe7b766e8, +0x826a67e7, +0xd6f8f426, +0x167a33af, +0x6327e3cc, +0x776bbcbc, +0x8894dab2, +0x33158d0c, +0xeedaa99e, +0x9e68df41, +0x4c41dfed, +0x2f20afa5, +0x8ed68f4c, +0xfb0dc1e5, +0xec2dce65, +0x1a815729, +0x114754e8, +0xa0eaf21c, +0xb68e11e0, +0xd5c9b79a, +0xab87f40b, +0x702d8a96, +0x125b8f75, +0x99992cfb, +0x0b1b25d3, +0x3baa808a, +0xbc9333a8, +0x5c907c77, +0x5a1b6132, +0xcc6f661e, +0x47a11745, +0x86cf5bc3, +0xffbc70c8, +0x1c0306aa, +0x1a408202, +0x0f866390, +0x2c4f524f, +0x503d39d7, +0x176b31fa, +0x86dab3cb, +0x6d138ef9, +0xe14eb9a9, +0xb59bcce5, +0x33c0ad08, +0x70ac7847, +0x4068a604, +0xde7d237d, +0x1a27e547, +0x52541b06, +0x12a8c898, +0xb856b0cc, +0xbed36cfa, +0x1ed0ffa6, +0x9919bea3, +0x13215dfa, +0xe7769dc3, +0x3eb29556, +0xcee9f3ee, +0x4b37ac97, +0x9d082989, +0x783af5d1, +0x36c444b6, +0x3f11daf7, +0xe27d38e2, +0x092acbae, +0xbe0a9227, +0x3ba89d86, +0x580f2e45, +0x4759e602, +0x87b5bb98, +0x5a65ec6e, +0xa1bb8c44, +0xc405c8c0, +0xbe99a907, +0x7ada7480, +0xb605fd77, +0xf19e7f9c, +0x8bd1fe8a, +0xceb3674c, +0x5351fe9b, +0x07c6a8a1, +0x28c3d6d8, +0x4149f693, +0xe3cb3570, +0xdd9a7eba, +0x3110058c, +0x3a021acf, +0xdd8c2c24, +0x2668a682, +0xc45589ef, +0xf9ffbb09, +0x369c5316, +0xaf995751, +0x2f3c35ce, +0xe9e642a3, +0xb60548c1, +0x59d49de2, +0x86bfe15a, +0xf716b62f, +0xf8425450, +0x306e57f3, +0x99a9e20a, +0x5dc2b585, +0x2cc44396, +0xb471eeec, +0x64cdafd2, +0x7cf7b53f, +0x74a086f7, +0xe8ff8f26, +0xa2d158a8, +0x1c0ecae4, +0xc705dacb, +0xc0f5102c, +0x8e0651a6, +0x18ee5cc4, +0x6a51cf52, +0x1a0bad4e, +0x6014676c, +0x5ca9aa5e, +0x8f78f7dc, +0x42ae70e9, +0xf56784dd, +0x0c6f5242, +0x4b6ba10d, +0x504fef4f, +0x2852e73e, +0xa9fb8d59, +0xbc601785, +0xd2814d87, +0xfa291bf0, +0xa2f16aeb, +0x1daf36a2, +0xfa5d68a5, +0xe1fcfe3b, +0xf2dcccea, +0x45a6c218, +0x8b107946, +0x51f0955f, +0xa0095462, +0x34d73fda, +0xd8543ac5, +0x285474de, +0x41da8484, +0xcedbb13a, +0x41ed4f21, +0x337afe39, +0x124cef9e, +0xb546c03e, +0x0295ebf8, +0x4768161d, +0x49ae2692, +0x19e0768b, +0x7bbd9cc5, +0x8877484d, +0x9f5a7479, +0x3ff40fe7, +0x6c01eb07, +0x05070fd9, +0x604b2b20, +0xd99b573d, +0xf93b3cc8, +0x3aafcfa4, +0x1a73b6fd, +0xae03b047, +0xbff69c9d, +0xac622775, +0x847839ab, +0x9c7bf8c5, +0x4c95a648, +0x2fedb9f1, +0x19a0a759, +0x8b4282a5, +0x57cc4204, +0xd5b0ac48, +0xb1535f21, +0x1978635b, +0xeefcb3b5, +0x8d51b49c, +0x569c7251, +0x09a6a8da, +0x38e2e022, +0xa0e4c830, +0x78020604, +0xd625554e, +0x505d366d, +0x8f5141f3, +0x1cb9fc2c, +0x4b9758da, +0x131e09e8, +0x4b087a30, +0x34de30b2, +0x90b4a83e, +0x5321c4c9, +0xd3154eb6, +0xeae95d37, +0x6ee19f4f, +0x8868db6c, +0x3512de95, +0x80269680, +0xad0e1c22, +0x8784a838, +0x4c317dd7, +0x50fff8c0, +0xc7c3244d, +0x68945cc9, +0x84bb1136, +0x7767a662, +0x94b3f7c6, +0x7ea55f4f, +0x53e8a795, +0xdce08bc4, +0xa75f176b, +0x45b0990b, +0x553cd2a0, +0x2179dccb, +0x09582c95, +0xcd6b4d1e, +0xd45bedae, +0x8c768759, +0x7e2e0664, +0x50b1f15c, +0x323a7d76, +0x25b7e0d5, +0x95c5e006, +0x7adcabd0, +0x2437d668, +0x9332ee28, +0xf8a47d67, +0x23bcbc65, +0xc5e77c49, +0x57185dfe, +0xfc663083, +0x93ec4d84, +0x9a3de002, +0x068adc24, +0x59b13ca1, +0x03c3fd34, +0x9154e206, +0xae180ff9, +0x0babb4c7, +0x31ad3825, +0xe67cbd51, +0xa74a820d, +0x15ac6b46, +0x5f00dc10, +0xec55b936, +0x334accff, +0x8a173997, +0x52ddf867, +0x4bb1dd86, +0x407ef0cd, +0x410a7e6b, +0x6a930b07, +0x949f56f1, +0xe5594fb8, +0xe5d8e567, +0xcd6aff8f, +0x5f0e5383, +0x70645665, +0x2082db11, +0x20668479, +0x31687d83, +0xd157e269, +0xef9497b2, +0x8ce20e32, +0x708d6464, +0x5475911f, +0x29ebbec2, +0x967ed531, +0x5526dc3a, +0xcbe38910, +0xe5de2cdb, +0xae8d0bdf, +0x989659e5, +0x138f8537, +0xd524c345, +0xfd9c17b1, +0xfde0794a, +0x87812f3a, +0x11437775, +0xe1798763, +0x269f986b, +0x6cae229f, +0x327d6291, +0xa851e2e1, +0xe0b08058, +0xbfdfab84, +0x5b379e61, +0xd314902c, +0x710f342c, +0xbed9cf92, +0x49d10908, +0x5e98bfa4, +0xcc3403ae, +0x232f444d, +0xaee96988, +0xb43e0543, +0x968a70d7, +0x7c30319a, +0xea93bf38, +0xb7900b19, +0x61eae222, +0xb876246b, +0xfeef4e60, +0xa299929c, +0xc8d9a702, +0xa6506834, +0x3c42263f, +0x619abaed, +0x491492c1, +0xe286a9f1, +0xa800becc, +0xf50043b0, +0xf655b46a, +0xb61c2f28, +0x0ebdd0cd, +0x65a5bc5e, +0xd65096ec, +0x4d9cf66f, +0x69797368, +0xf6bbf473, +0xb399deb8, +0xb019a7e7, +0xf1266b2c, +0x1f437642, +0xc4dc844e, +0x16e90c2d, +0x80255ccf, +0x57027d54, +0xe22229dd, +0x25f9cf79, +0xd10b1d01, +0xe65f2204, +0xa3e13697, +0x8ced3861, +0x80322270, +0xc79d8aa6, +0x086059df, +0x7fede2c9, +0x61f1edf8, +0x95716137, +0x34e4e66e, +0xf9e2cbf6, +0xd7dbb6d7, +0x960234ed, +0x3ac6121c, +0x948d9359, +0x927812a9, +0x89e68925, +0x3e5ab8df, +0x3ee7746c, +0x32f064d8, +0xc77ea234, +0x7a028230, +0x0f7f8e2b, +0x419f1775, +0x15fab8f1, +0x04e81039, +0x3125882b, +0x6f70c06e, +0x9169441a, +0x48bfea96, +0x83b2a8a1, +0xc584e4f5, +0x12cceb0d, +0x8fe562c5, +0x06dc3327, +0x2d6bdba7, +0x252d88ea, +0x70176903, +0xc1fa0f70, +0xa76a159d, +0x551a990e, +0x2570d78b, +0x807d9b44, +0x134c2d44, +0xc064253b, +0x2906c6ab, +0x152eb4fb, +0x696b9861, +0x57f30de7, +0xa9540047, +0x003fe175, +0xc3e25404, +0x3d658771, +0x6ca8ac2b, +0x7c208cd2, +0x27252f37, +0x79ba8c84, +0x333328d0, +0xfc46b28d, +0x0be1abfa, +0x35d8fef4, +0x1237ac1b, +0x6e0b3a72, +0x31c3718d, +0x35c916ae, +0x5b7ed39b, +0x5867714b, +0xb6ffd882, +0xbb433100, +0x97b1c324, +0xae4a4ae1, +0x247d90f2, +0xf8b6a564, +0x66253d64, +0x82ed4dc7, +0x15aed3f0, +0xe6d2993b, +0x857fcb9f, +0x24e5530c, +0x3a0c3fdb, +0x59c51118, +0x6408ed36, +0x783285f4, +0x971c7ee6, +0xa8bfd778, +0xd61d313e, +0x2a5ab0b2, +0xd7bb373f, +0xb55b645a, +0x0662e667, +0x42f43436, +0x29ccf426, +0x706fc203, +0xac1b2735, +0x6a1c161a, +0x72ee78c6, +0x5f9bb0cd, +0x8228fab9, +0x2c70d786, +0x95941813, +0xd06c9d75, +0x8afa3c67, +0x5251cb06, +0x294cb9f4, +0x31bc04be, +0xe95fddd8, +0x5e35f1c4, +0x915a4558, +0xe31c0421, +0x279ea98c, +0x6fe0e281, +0x62eba208, +0xe3b91282, +0xdf4478eb, +0xaa932467, +0x910d4ec4, +0x34daebf5, +0x68777f6e, +0x1b66bbd9, +0x9079271c, +0xc3e370ec, +0xfb8f8854, +0x86b582c9, +0xb08c9340, +0x56be3b5c, +0xaf6b3f9b, +0xd516df77, +0xe42b6067, +0x674c7625, +0x83b51f65, +0x7de9f81e, +0xf14443c4, +0xbd746a7d, +0xee74405b, +0x1424050f, +0x25140876, +0x5ef24639, +0x19531f33, +0x41becb9e, +0xa030ea28, +0x6c0d2d07, +0x9c4da935, +0x070d02a3, +0xf202bab7, +0x29d24437, +0x968a0f3f, +0x2f840ecd, +0x879e1267, +0xe464afc8, +0x5e7b5ee2, +0xbd4c3db3, +0x0d391dcb, +0xa9ea106b, +0x174ba59e, +0x5cc16021, +0xbe1d75e5, +0x0e4310e9, +0xaea520ba, +0xb3e5e069, +0xcee89241, +0xe8b1e944, +0x81884f69, +0x0949df78, +0xe8b97ec7, +0xa798934b, +0xa958fc1c, +0x71464ffe, +0xd605d536, +0xde846f15, +0x8cf5b23d, +0xac0f3c4f, +0x5ce696ac, +0x5d44a99a, +0xe5a94c89, +0xaf03f845, +0xea52f96a, +0xd1bcdaaf, +0xc39d190b, +0x1cafe75a, +0x9cabe2fb, +0x17a903d0, +0xc70bd001, +0xa1b203a1, +0xfc4af94e, +0x2ecfbf3d, +0xe92ab2b1, +0x0f9d87e3, +0x360a9d9d, +0xdf618f74, +0xded34ee3, +0x84c048ae, +0xc25dbb13, +0x892a1bd5, +0x8c3d68d5, +0xbdc698d5, +0x19611f2c, +0x4835830d, +0x36181639, +0xbf07ecf6, +0x0402fed9, +0x2cfb0c2d, +0x63f5405d, +0xb3e85634, +0x395f6da3, +0x18acd237, +0xfafec80e, +0x760803d1, +0x31426e38, +0xf1aa3a44, +0x101cafe4, +0x88964205, +0x6b080893, +0x121f8ac8, +0xf56fbe6c, +0x1d537377, +0x7aac3693, +0xa516ccaa, +0x16660249, +0x469b900b, +0x04523f77, +0x0bc7dc0c, +0x4e9b2cfb, +0xf0171339, +0x4cde13f9, +0xaec1f2d4, +0x0368a4d4, +0x0c04c724, +0x73cff468, +0xea3d2cc0, +0xcd4f6d5b, +0x8fa3194c, +0x1636b062, +0x0eefb720, +0xd18e5560, +0x61a4d0e3, +0xdc37afbe, +0x1202ccf0, +0xe4ea9e37, +0xbb1bf68a, +0x69b9c290, +0xff479f12, +0x3bdad20c, +0x62533a85, +0xc138adff, +0x6d36ea81, +0x51263258, +0xee8e12c9, +0x9529b63b, +0x23801254, +0x515352c5, +0x20d93eac, +0xa5e05a22, +0x42db9c38, +0xf51f5158, +0xd2f3e159, +0x9913d1a1, +0x3a3710c7, +0x8b5cd301, +0xba80ccd0, +0x1ded0b5b, +0x1ca85ca9, +0x466fe982, +0x262380a9, +0x67db41ab, +0x25a98374, +0x8261168c, +0x7bef00b8, +0x701b5d68, +0xc5a95bc5, +0x9806f272, +0x065d72ea, +0x37bb3a45, +0x5fbedf18, +0xf41c4a38, +0x76ce3d2a, +0x066c3134, +0x9a085a96, +0x6290b07a, +0xe72beedf, +0x84b5ee77, +0xf4b73416, +0x9d479e4e, +0x9176fc31, +0x72f371e2, +0x225fbc08, +0x4a1c384a, +0x67e14f0f, +0xc713a698, +0x389e94b1, +0xf0d36597, +0xbf33818b, +0xce4a6ace, +0x5b5b835d, +0x48399a18, +0xeba50a2d, +0x84bc46b6, +0xa3e5ba65, +0x468dfcd0, +0x06176d84, +0xdece4617, +0xbd0d9b64, +0xf76463f0, +0x4e31ecae, +0x662fd39d, +0xf09dc4d9, +0x2c36023d, +0xa5a23c2d, +0xbb83be41, +0xa5616a6d, +0x66678792, +0x83ece19f, +0x42a2ef53, +0x90a35065, +0x2836c8ed, +0x71c275d8, +0xaf2a8166, +0x005bda15, +0x00c715d4, +0xdd2e29d5, +0x5306fb06, +0x7edea926, +0x55c189bb, +0x447c3b46, +0xe36b1639, +0x5a35864d, +0x855ce6fa, +0x4c127842, +0xce61a45d, +0x1d5621d8, +0xe9885058, +0x546474d1, +0xc5368191, +0x0dc5e988, +0x3103bf17, +0xa43b42d0, +0x6b350fd2, +0x744b2eae, +0x2108c305, +0x75ec857b, +0x25ca1c63, +0xc8787d3e, +0x2c9e080a, +0x76e287d1, +0xb354f73b, +0x5a22a4a9, +0xaa90a5b9, +0x55086e32, +0x531c907e, +0xe4b42f56, +0x6c114e55, +0x68241bcb, +0x0b583ca5, +0x3f7fd88a, +0xa72bd330, +0xb89f8f80, +0xed2da4ef, +0x4e5a0a08, +0xb632ce20, +0x97dfc0f5, +0xfc00cd63, +0xf121e9bb, +0xa1285287, +0xe49e661b, +0x6b5852f7, +0x8976fda8, +0xcaeecb44, +0xe351ca10, +0x4b64b809, +0x5af36063, +0xcdf8767c, +0xba32e16c, +0x47044067, +0xbb76a8de, +0x74c2f35b, +0xa7d8e0d8, +0x92c40961, +0x0850bfca, +0x393e9db2, +0x0528f1fa, +0xdb562bd7, +0x7599a069, +0x938b7f13, +0x300ee17f, +0xee078b2a, +0x81d87dbd, +0xe6595378, +0xb7f23101, +0xab3a92a2, +0xd3aa9d7f, +0xe056627a, +0x2b635afe, +0x00cba5da, +0x4bb6716c, +0x60639bea, +0x0b626001, +0xf0bc0cc4, +0x3e6253da, +0x0f763382, +0x375afebb, +0x191c4f11, +0x7d89cc72, +0xa4966c08, +0x95092d8b, +0x4428945a, +0xd79c13ab, +0x02ad7027, +0x6508bfd0, +0x2ae855ab, +0x4642731f, +0xcdbf68f2, +0x206f1437, +0x3d5bb201, +0x14498d78, +0xa1b7720d, +0xc223c0f9, +0x1b0fda40, +0xe0184af8, +0x8d06b8d0, +0x2c1b5c90, +0xe1627ed5, +0x36a36c0a, +0x104bc56f, +0xa2806ca9, +0xb40e8e9c, +0x366aed52, +0xeafd4074, +0x451a56fe, +0x16aa6d0b, +0x97ec03e0, +0xa3a063dc, +0xaa67b57d, +0x1547ec0b, +0xbe6217f0, +0x04acce50, +0x1e604d93, +0xb9599e6c, +0x4da13b93, +0x4b575704, +0x073b59a5, +0x08b6f7ce, +0x7a24bb98, +0x8db057c5, +0xa1a30d67, +0xbe827ec8, +0x3942216f, +0x9ed97dd6, +0x33ae11cb, +0xadcebe53, +0xb976788d, +0x438cec38, +0x1cb8d317, +0xecf498c6, +0x9ac145fb, +0x741473c0, +0x9c183472, +0x7e26be0c, +0xf423959b, +0x77fd5508, +0x38c504ca, +0xf2ab6c47, +0x34e5c1b5, +0x0f58d8b0, +0xc91d512e, +0x17792042, +0x9d6620f5, +0x8ab91232, +0xab050597, +0x3223d5e7, +0xd9373444, +0x327a1b67, +0xabf4661c, +0x280b91ee, +0xdee5acaa, +0x9347e13e, +0xdc27a18c, +0xb2a4491e, +0xaa56c4d5, +0x33c867a7, +0x631538d1, +0x087be2dc, +0x51c24219, +0xe6d883a3, +0xe0732355, +0x619eff91, +0x4c67788d, +0xc5142d21, +0x85a8c90c, +0x4ec9d204, +0x7a51e18f, +0x21eb4b7e, +0x6e8e6979, +0xc4cd6b7c, +0x0749014c, +0x03a4e671, +0xf739aecd, +0x8088a30b, +0x608f7f19, +0x9af93aea, +0x3c1b8e11, +0xe54f000c, +0x09125328, +0x3de74139, +0xbe54f960, +0x49d840d2, +0x0ab6242e, +0xb9f9384b, +0x7a7556b1, +0xafc7779d, +0xf0a1ecd4, +0xad4f1305, +0x231aa80f, +0x1a21b6ad, +0x203e2b04, +0x7bd46623, +0xe3269b6c, +0xc021f7e1, +0x6b5bfa37, +0x60bd6312, +0x9653c9b3, +0xb77ce052, +0x96c9e667, +0x4fc892fe, +0xbf5a135e, +0x6e4a59eb, +0x83cc2490, +0xef3dec2b, +0x62dc657d, +0x146ed377, +0x831a6dc7, +0x565b1912, +0xdda058c3, +0xd1307e06, +0xfb653c8d, +0x334e861e, +0x080190f4, +0xed529063, +0x1ff1af71, +0xd8ffd1d9, +0x26574e3d, +0x0720c24d, +0x37d0a73f, +0x4c1da3ef, +0x13b23b6a, +0xf5bf5c37, +0x15ee2600, +0x773c4d51, +0x28f7dada, +0xc84a396f, +0x63cc47ef, +0x2dc347df, +0x3ca0cb9e, +0x026d82d5, +0xcb5cc70d, +0xf0aaa46a, +0x42bd36ed, +0xf71d7b9c, +0x0e19b2c6, +0xe0b4b4f0, +0xebaea66a, +0x5bba802b, +0xba05444b, +0x7b11d633, +0xcba45ab9, +0x2143bb5a, +0xa8746e3c, +0xc3192b44, +0x3f3e21a8, +0x94d40883, +0x8e9547d5, +0xd80cfb8f, +0x64e50f58, +0x171e3c76, +0x13653a2c, +0x7d4d685e, +0x2890b74f, +0x07c78d5e, +0xe21d47ed, +0x2a7bef0a, +0x850f5c03, +0x643a1d98, +0x417c48fc, +0xdf190d11, +0x883783c4, +0xe8fcfc77, +0x41ffe29e, +0x25781288, +0x71179728, +0x4fe3308b, +0x333f86f7, +0xe4014d86, +0xa9fbbd93, +0xe234fa19, +0x3a0c0e99, +0x4a2c587e, +0xbc5139d5, +0x88606255, +0xcacf77be, +0x9caf04ab, +0x90928154, +0x0567d262, +0x709877c3, +0xdd2c92e9, +0xb4d94ffd, +0x5b58c33c, +0x102324fd, +0x7d2cfff4, +0x07a03e99, +0x6c0f7f9a, +0x0a5fb71f, +0x490e7f08, +0xa1f423a3, +0x7a6989bf, +0x7ad6a0b7, +0x66afd3d8, +0x2112f4d9, +0x95376524, +0xe4e949c7, +0xd4ffb013, +0x90f1606c, +0x57bb861d, +0x8770c121, +0x1351bac1, +0xea24a7c3, +0x0cd6eb82, +0xb9f0ae02, +0xde2feefa, +0xc67dc785, +0x1cbc6f37, +0x3008cbca, +0x85b1b370, +0xdf1208c1, +0x1af0f53d, +0xd319c360, +0x3763c673, +0x9069ea98, +0x79e7e7c1, +0x96405bb6, +0x250c373f, +0x3eb541fa, +0x336822ea, +0x78d92d28, +0xfc997b76, +0x539951b8, +0x0ee4a617, +0xbf2868d0, +0x2e53f0ce, +0x16022620, +0x1225f4d8, +0x26a33ec5, +0xee700a0c, +0x59c6896f, +0x1b5c9ff0, +0x224aa63a, +0x8b372f4f, +0x1786551a, +0x1ac1507b, +0xe342cd57, +0x8ec21f08, +0x3b690ee6, +0x5bf601a7, +0xf3e95813, +0xa9c7ad37, +0xdd9c3b7b, +0xa8644861, +0x29baacee, +0xd55de0b0, +0x1e7eccb4, +0x0fb6ac5f, +0x956a83ff, +0x7cc6ab28, +0xfbd3358d, +0x64e057bb, +0x4adadc1d, +0x7e9eb4c5, +0x03d49e55, +0xc6d6e19f, +0x762cf42d, +0xd7248ccf, +0xca0fa1fb, +0x442dee4c, +0x8878c694, +0xdeac7b47, +0x1512f809, +0x06bc1721, +0x9d51372d, +0x7a460c25, +0x2a61f097, +0x502a3054, +0xafe70549, +0x5c1dfbf8, +0xf020eec3, +0x5fd4e6b5, +0x7cd0e11a, +0x941e0387, +0x9c7d3d63, +0x0367510e, +0x3036840f, +0xf47c81ed, +0x030001b3, +0xd11b9a9f, +0x8fceba56, +0x879cbbea, +0x993cbb47, +0x73c2f3ca, +0xcd3f42e0, +0xf82e7067, +0x104382f5, +0xa1582e60, +0xbe3049f6, +0xe3165bf1, +0x70d28ee5, +0x7ca9bff2, +0x34cced05, +0x69d60938, +0x0e1766a0, +0x389ff069, +0x49a90f21, +0xc7c9603a, +0xe0a79e75, +0x6b5e3c87, +0x617a0e31, +0x9922dda8, +0x28f71018, +0x94b449a4, +0x6e1ae71c, +0x748594c7, +0x87a2b655, +0xfe84f6ed, +0xcf9da189, +0x47b3c434, +0xfb3a024c, +0xdfce16b8, +0x7096c0fe, +0x2dfe8d68, +0x33d67674, +0xcdbb28fb, +0x2f445751, +0x96bc9b28, +0x11620af9, +0xd33b587d, +0xac4286ba, +0xdb8a8695, +0xd5fa61ee, +0x133033b5, +0x182edd07, +0xf7a92090, +0x8f52762a, +0x4f71724f, +0xac11b508, +0xb947cc4c, +0x95bb2627, +0x012d339a, +0x93168d5a, +0xec09f7b6, +0x4313f9f3, +0x60547bce, +0x27b776c5, +0x2ac40c21, +0x5c1a89f7, +0xe16b7351, +0x5f6a77ca, +0x61a8241e, +0x9134dd04, +0x6879ffcc, +0x658aa51b, +0x4f90b21a, +0xed909d52, +0x41c489dc, +0xb0ffd9c0, +0x06430ed0, +0xb7a71637, +0xab0183d8, +0x33395228, +0x0e7f273b, +0x296333bb, +0xcf9be3c2, +0xdbc413c3, +0x1e1b3784, +0x4908f66f, +0x975951ef, +0x6e1cca58, +0x0c5e8cbe, +0x488f11bd, +0x771210ec, +0x5ae70360, +0x663c33fc, +0x2bfa9b94, +0xb48756d0, +0xf30d6c71, +0x00d80271, +0xca6dc6a7, +0x25b8ed49, +0x09f4b50b, +0xc69dba98, +0x186e2840, +0x625d702c, +0xb4ab93c4, +0x8b5ce272, +0xb991de1d, +0x2e5c07d7, +0xc80be53a, +0xfbc5b50e, +0x8b3c1a9c, +0x4878c5f2, +0x4aa0645a, +0x34b15ce7, +0x41db5b1c, +0xda0ec321, +0x7dc6701a, +0x95ee2e86, +0xd6fea0d9, +0x9d818fad, +0x10579a48, +0x754c201e, +0x6c67ba50, +0xacf0c595, +0xdbe11e92, +0x98f9c142, +0xc1c6bbc8, +0x7c167bb1, +0xd4efec54, +0xc986be7c, +0xdcabded7, +0x2e6a100d, +0x61e19b9e, +0xcb098dcb, +0x30d992ca, +0x4b99b588, +0x591cd5d0, +0xd46f29ca, +0x2d09e4d6, +0xa9a1fa01, +0xa5467304, +0xfff92fa8, +0xc3208367, +0x96ce47c5, +0x067fd5da, +0x500925b9, +0x0aabc4b2, +0xf68e03b0, +0xb07550f0, +0xeadc7202, +0xaf22ba32, +0xabf7c7c9, +0x300b3e5f, +0x6498c5f9, +0x7f30e60f, +0x177b0448, +0xa021489c, +0xaf1ddc28, +0x8a31e5ee, +0x8d5af1b4, +0x877a9798, +0xfd2d5dd1, +0xe710cc9c, +0x4c3b828d, +0x08d29bfc, +0x859fadfb, +0x41ae2f68, +0x2b4d1684, +0x18f8ae17, +0x1dd6e6a6, +0xec366a16, +0x5750d376, +0x1bd43a2f, +0xa8cfaf27, +0xb3cf6e9f, +0x63c2b9fd, +0x5a14ba58, +0x86cc7bc7, +0xf9de9ef3, +0x9948bc17, +0x45a79935, +0x01b8e59c, +0x254633c4, +0x21e07d7e, +0x15fa20a2, +0xf0b8e163, +0x88b5f666, +0x17ad7ade, +0x5b92f4a6, +0x51110794, +0x75ec43ee, +0xbb5fe1f1, +0xb37f009e, +0x575d9bf7, +0x205bd19d, +0x01fc1929, +0x87bde658, +0x78204517, +0x7805ef9a, +0x02f2b0bd, +0x9a74576e, +0x77edf265, +0xf8c4b06d, +0x81adcca1, +0x588dbadf, +0x4e138861, +0x398d08e0, +0x6f163d0f, +0x11797c9a, +0xb59a6655, +0xc5132912, +0x4dcf36b1, +0x7037bd9f, +0x77e14ab6, +0x37033d2c, +0x15be4e0d, +0xdf49773c, +0xaf5806ba, +0x68c1e164, +0xc0fa49f0, +0x5e38cdfe, +0x413f3865, +0x83a7fe5b, +0x18d8ab74, +0x9be76af2, +0x2216e24a, +0x85a0703e, +0xb5e4a9a3, +0xc899c1d3, +0xcb9baa4f, +0x12a917b9, +0x121687f6, +0xe51c2f44, +0xadd56ea5, +0x0ba274ea, +0x45fb9989, +0x74a3dc28, +0x290da4a8, +0x3459e5ff, +0xae0c706d, +0x9e10314d, +0x1eb778f4, +0x57d67c8a, +0x53846719, +0xe03da6dc, +0x258e1182, +0xcdc430d2, +0xd1d49ba2, +0x25754656, +0xb7e7fe72, +0x79b61b11, +0x1382a409, +0x2e33f005, +0x2f76b444, +0xee20123e, +0x3dcdfb90, +0xe6c1f227, +0xc4aacdb4, +0x2652d9f2, +0x759ec333, +0x0977d8df, +0x7826a59d, +0x22a6fbbb, +0x84966924, +0x678b0c9e, +0x711305f8, +0xa16d3740, +0x2f1e5b7b, +0x5fe16ada, +0x1ac4e24a, +0xd512b61a, +0xba65b6ec, +0xd2a6209d, +0x60b99cdb, +0xdb12bd95, +0x23d88ec9, +0x2ed79498, +0x8d600a85, +0x6ed637df, +0xd6df859b, +0x0a28870e, +0x3d4bf87b, +0xc933fa68, +0x3c516c11, +0x47512a9b, +0x6822b931, +0xb10e84a1, +0xe2f98075, +0x4ff4cc74, +0xe376bb9c, +0x49fbbff9, +0x00132965, +0x285060a8, +0xb8028c76, +0xb8242524, +0x688a6563, +0xc8c76ce5, +0x94566cf1, +0xb90c8be5, +0xd9cde793, +0x23b9b8a3, +0x7485f6eb, +0xc1daf8fb, +0x6649d7af, +0x57b66aec, +0x601eb4f5, +0x875572aa, +0xa4b61c8e, +0x77b1927b, +0xaa82c198, +0x95bf1b1c, +0xb33f36ae, +0xbbba7cd8, +0x071a2c90, +0x9c036c2b, +0xb4c2ab26, +0xb934d2f7, +0x16717e67, +0x6fe8675f, +0x979cb052, +0xd8b15ac1, +0x0abc4005, +0x28dd2dee, +0xde434385, +0x13a39d39, +0xa55e465b, +0xe4722e62, +0xd6af1d9a, +0xded8f05e, +0x66c87fff, +0x8a01a4f7, +0xebd5972d, +0xff1167b4, +0x9363f5b6, +0xbc67c1ae, +0xe4461efe, +0x45bf03be, +0xbae73b5a, +0xddcb423d, +0xa0e8046f, +0x41028843, +0x56f8426d, +0x93c2f148, +0xd6a5dd86, +0x05530343, +0x18adfd8f, +0xaf82573d, +0xdb0747ee, +0xc09c9348, +0xed6877b0, +0xfbcb6b47, +0x5cdcc193, +0x10496a78, +0xd84d7bb0, +0x36b80458, +0x8269136f, +0x010cda83, +0x17c5cc5a, +0x35feae72, +0x4f1a6462, +0x330d711f, +0x1465617d, +0x932a4c97, +0x17949611, +0x4bc7ada1, +0x3437031f, +0x9712802a, +0x563eeebc, +0xf1817510, +0x535b18ad, +0x282fa596, +0x130b23fb, +0xb65d4d0e, +0x120ea1d0, +0xd3fc9108, +0xcf44685a, +0x9b9f9b94, +0x9d041f07, +0x9d571de1, +0xbfb46e6e, +0x4547244d, +0x41821970, +0xcbe72adf, +0xf35f0602, +0x191137aa, +0x8a506f62, +0xd35909b0, +0x9ef32931, +0xce83348b, +0x78a043d4, +0x208bf588, +0xd4807d4c, +0xe0efed69, +0x801510a2, +0xa734e8cd, +0xd5e510be, +0x9e9a0ba4, +0x16f0afaf, +0x8c506b9e, +0x233afc67, +0x178853f9, +0xd605a61f, +0x8ac43f4e, +0x62ae1451, +0x260423f7, +0x31877994, +0xc37b9ee4, +0x2fe4c527, +0x74a9c978, +0x027783c9, +0x34f9ccbf, +0xbf20d46c, +0x905795d2, +0x14057495, +0x7624525d, +0x73635014, +0x1b4a65b4, +0x1c23df84, +0x0e4156c4, +0x148b8e4a, +0x3effbc1e, +0xd5e9edf8, +0xe7d177f7, +0x437dad4b, +0x1236b960, +0xe2629e27, +0xd331f8bd, +0xb5d63c2d, +0xe0ff9c03, +0xc53ef27e, +0x0bb99da4, +0x0e4bbacd, +0xf377c04b, +0xbed943a8, +0x99367ed6, +0xfe1a8bcd, +0xaf3cdf2b, +0xa6741eaf, +0x85182c0f, +0xa4b7419f, +0xd9f9c5c0, +0x156cbf14, +0xdd44fd80, +0xb6d8c832, +0x2925ac62, +0xf4cde627, +0x86d77f1e, +0x6dc79cd1, +0x4ecde88e, +0x0ea260b8, +0x6ae0fcee, +0x29c3f40f, +0x1fcf5512, +0xc9e250ea, +0xe315b6ba, +0xc0ea4e08, +0x72549ccb, +0x75066248, +0x779b3497, +0xd595a271, +0xc9f9d5e2, +0xab69bf1d, +0x0a02e20e, +0x7993a0a9, +0x66b1cc08, +0x9cb76a32, +0x8be8d34d, +0x76299155, +0xe46264b8, +0x4a558b5e, +0x475b39ae, +0x94aacc25, +0x4444f37a, +0x80d250f1, +0x5ecf04d6, +0x98edaf99, +0xe4ab82a3, +0xd17f0fe0, +0x8b52fd93, +0x1a5cf762, +0xebe6509c, +0xef564cf7, +0x3b97b680, +0x8ec9da37, +0x3acacdf9, +0x11b0715c, +0xbdf9ce74, +0x08ba1fb8, +0xbaee3a8f, +0x4016edd6, +0x199595d9, +0x7e119350, +0x0486e8ab, +0x4287c6cd, +0x7d36c4a1, +0xd3c019e6, +0xc9bc9a6d, +0x4a0e4ef5, +0x52fb9d53, +0x0d82b906, +0x802c0f73, +0x0a045755, +0x933e82f6, +0x9d37ac83, +0x865507d8, +0xf30f269c, +0xfb66bffe, +0xf119dbb6, +0xce437abe, +0x93935795, +0x7bf4edb5, +0x94af550d, +0xa4d67713, +0x34a7834b, +0xdd44a7e8, +0x687159ba, +0xec3bc62c, +0xeba6208e, +0xb77da774, +0xb3ac5f0c, +0x56f3b259, +0xaec20d02, +0x3521b28c, +0x63cfa502, +0xa05151fd, +0x68b3f2f3, +0x3b312303, +0xc1a4418e, +0x147c0ae2, +0x16be914f, +0x5bdf53dd, +0x992ceda1, +0xb60719ea, +0x8a89f25a, +0x27239a96, +0xcfb8e523, +0xec682bd5, +0x17eab877, +0xe54cfea7, +0x11c7e409, +0xe9c22380, +0x1f365b97, +0xed5467c4, +0x4c34fd00, +0xcb435a58, +0x2f92068e, +0x47aceba2, +0x8508fa90, +0xbb86d6eb, +0x3f7c927f, +0x2362af38, +0x366bf6a4, +0xc27cbc1d, +0xe47b68e2, +0x9b9e8eb7, +0x7a488564, +0x4bb074a7, +0x8fd26d15, +0xf71dbfac, +0x4ab513ab, +0x25839b8e, +0x7d3a692f, +0xa194a093, +0xd480407a, +0xf6fef2a8, +0xd03ef77f, +0xeebc81a5, +0x9abbaefb, +0x9c626e1f, +0xe4c73c42, +0x4222ecb4, +0xc2099e5e, +0xd0df3c67, +0x26a19295, +0xe4315507, +0xe4aea8f2, +0x0aa3f37c, +0x244a8a41, +0x1dad41ab, +0x795891c9, +0xd2586975, +0x45175769, +0xe3b70d5a, +0x34519ec3, +0x42f2e392, +0xb96cca1e, +0x03975a23, +0xbe3c755a, +0x38647292, +0xbf5274b0, +0xd71bf721, +0x1f302d08, +0x64898225, +0xeb439e37, +0x3a50ec3d, +0xcd052c90, +0xd4576b82, +0xf9358344, +0x9b284f4d, +0x95f4822c, +0x22184154, +0x7e74870a, +0xd37f9bdc, +0x0f6b5602, +0xfebe2527, +0x37940c8d, +0xe2181d53, +0x8356bf9c, +0x2a54d0b4, +0x65d9a902, +0x03bb847b, +0x99e5766b, +0xe24cad63, +0x6cd471bc, +0x42020dfd, +0x828ee5d0, +0x708ff5d1, +0x3215e381, +0xc2c02516, +0xd8b1e804, +0x81cce402, +0x96ded889, +0x09ecc24b, +0x9c2f05dc, +0x87cfcf51, +0x37e32ac7, +0xe824a38f, +0xc83feac8, +0x57cbcf9c, +0xa38c3193, +0xaf77fb14, +0x48d0b028, +0x7dd2ad85, +0x5bf72f77, +0xddc20a6c, +0x6a41c1e0, +0xd53639fc, +0xe0120b8b, +0xfdf917d6, +0xdb3b9171, +0xbcc01614, +0x66281927, +0xfdf18a97, +0x5163e596, +0xcac4b2a2, +0x9d41da54, +0x1ea4c345, +0x9d050307, +0x1fb84d51, +0x932d7a9b, +0x2db7be12, +0xe6881627, +0x20c7fd1c, +0x45437e8a, +0x71deaa72, +0xc49a30f1, +0x4b07437d, +0x72ea81a8, +0x7e4b55af, +0x06ea47fb, +0x2d18189d, +0x94a5d7c5, +0xebf158a5, +0x5d335a9f, +0x5b629219, +0xd0d27049, +0x654b4426, +0x98303121, +0x3fe09ae9, +0x26209046, +0x7890d6f2, +0x3b11c939, +0xdbba5daf, +0xa37c4252, +0x2cd18754, +0x5d5f5832, +0xb82505fb, +0x64c01963, +0x04c32bda, +0x9275c3c4, +0xc6b67a77, +0x25b93fde, +0x67a6bde5, +0xf622af23, +0xc1166cd0, +0x1d074957, +0xa923274f, +0xf49d7649, +0xc144fd38, +0xad37d057, +0x96a65f4f, +0x380eb4f0, +0x21e971e2, +0xb1684029, +0xa13c4e3e, +0xaa4d3b66, +0x74aeef37, +0x579cb260, +0x226bf145, +0x48a56170, +0xfe81cd70, +0x981e507f, +0xbfef67b1, +0x5660f0e3, +0xacc0c8e1, +0xd3624e6b, +0x174c2072, +0xda40a848, +0x9d523aa2, +0xbed6374a, +0xa9ee0a75, +0xf2affa26, +0x34acf66e, +0x0dacea9a, +0x54e3f170, +0xdb85cff5, +0xea1d7f2a, +0x2f548790, +0x2ae335fc, +0x8a5dd842, +0x11eb28cd, +0x2f136cc6, +0x0f738f9e, +0x1c22260b, +0x60a2a936, +0x5dd4204e, +0x8a7008a8, +0x322ba657, +0xb7724a56, +0x00d52440, +0x9a1e1655, +0x99d4e1e1, +0x30ed4e2c, +0x0d384f5c, +0x150ab2d1, +0x3a4fccae, +0xedac4ed0, +0xedcdaa7d, +0x4c93778a, +0xae9df567, +0x98de6d63, +0x4b0dfec9, +0x0e82da0d, +0x7af94b2b, +0xe3e3c08c, +0xda363e32, +0x06e2a961, +0x992d7743, +0x16fe88cd, +0x5d52336e, +0x75dac95a, +0xe9c58f87, +0xe2e65d4d, +0xd9b935ba, +0x7ab2eb7a, +0xbed8c941, +0x730ae718, +0x430959ea, +0xee479a37, +0x89138406, +0xed20eed7, +0x57fa0818, +0x6f18c4a0, +0x4052a0ec, +0x90596d48, +0xb5eb8deb, +0x86d6b456, +0xa0a6cf14, +0xbaa1f49c, +0x03d9f7f6, +0x67b6d212, +0x6626bd5d, +0xa2f0f56b, +0x027b1720, +0x2a53293d, +0xe8141b56, +0x02c0b099, +0x2eb15484, +0x9258e5cd, +0x39282158, +0x5cfe304d, +0xfba0b499, +0x64c8f9a0, +0xc492c199, +0x5697325d, +0x95c534fe, +0x18b9f34e, +0x120965e1, +0x83097041, +0x5c402771, +0xfa6384f7, +0x1de0a773, +0x6d329bea, +0x531e2f7f, +0xabc89f3c, +0xd8cf188e, +0x187c181f, +0x7c650c9e, +0x583aa7c8, +0xe80b7a41, +0xdce1a1a9, +0xc96719dd, +0xbecb9d8b, +0xa1393d2f, +0x78db9169, +0x86304c76, +0x6ef151c8, +0xab7390c6, +0xc1234e3d, +0xd85c7c27, +0x47d1ebfa, +0x0d11515a, +0x97f5f6f3, +0xb243b93f, +0x4b088206, +0xa8892c62, +0xf6d5afcd, +0xd6cbcdb0, +0xa990e28e, +0x218068f7, +0x7e461f5c, +0xd0e4d5b4, +0xe33ae4a8, +0xba42f613, +0x22577bf0, +0xde4009fd, +0x9776dd29, +0xd269a667, +0xbfa091e6, +0xfa4f60cb, +0x8a655b19, +0x06e05baf, +0x50a5b362, +0x5f28692e, +0x4534ef05, +0x85122c25, +0x1962de8d, +0xd0bdcba5, +0xeb231adb, +0x0a0c89ee, +0xb667c6a2, +0x103f6e37, +0xd3ddd58f, +0x2159bc90, +0x8c47dc0c, +0x9ef80571, +0x3926c509, +0x8fb9050c, +0x17fed053, +0xc9b2b56a, +0x38f26055, +0x71e19447, +0x71809a98, +0xc4ad9a29, +0x4b3047b9, +0xf8a7ccbf, +0xb45220d9, +0x66837163, +0xf1adab36, +0x4454e20d, +0x9927b274, +0x551f2b0d, +0xe7a3ff5e, +0xf4dc107e, +0x600c103a, +0xd4a843cd, +0xb342c84a, +0xb8ab7202, +0x11c23493, +0x6541114b, +0x6e8ddf6a, +0xb3466d0b, +0x2a307323, +0x341f9808, +0xe6433de2, +0x6e44ebd7, +0xf8a7609f, +0x2ce078e6, +0x7bc0ccc8, +0xcaadbe9e, +0x96f4b4a7, +0x27c88c2d, +0x1d9596e6, +0x61d3daa6, +0x5e9a4691, +0x6c15d838, +0x1632c5e7, +0x45ff7adc, +0x94f7e628, +0xed3621ab, +0x254e9663, +0xed371313, +0xf783d020, +0xfde197d6, +0xfcfd7fcd, +0x7a948c92, +0x6b87c54e, +0xd31c083a, +0x306d0338, +0x76a8af8d, +0x03af5c14, +0xd64b2659, +0x5173d943, +0xae477f4f, +0x616886be, +0xf16dbe26, +0xc61c291b, +0xa0d48c1a, +0xfd9a6cd5, +0xabee9a7a, +0xe0cbb14b, +0x87394e7f, +0x4b6d002a, +0xf57a5272, +0x3ab13519, +0x2b80760d, +0x800c83de, +0x69bfd132, +0xf43c72c8, +0xe80fdcbe, +0x1dec28a0, +0x5c163c81, +0x0e092ee6, +0xd238630f, +0x19a0391b, +0x3b3c9009, +0xe62fff53, +0xf5123e53, +0x857b466a, +0x4441cf60, +0x976504d2, +0xa9e82bf4, +0x25f59a35, +0x1d9a3c9c, +0xe32468b0, +0x5fe92578, +0xd2a04121, +0x5b81e40e, +0x0eda52d9, +0xd6049516, +0xffc76357, +0xfffe4141, +0x21b230f9, +0xdcc37996, +0xe632b07b, +0xee30fc6a, +0x84a64bd8, +0xef04b133, +0x30082c56, +0x3f77cfd3, +0x62da6aad, +0x14197441, +0xd09d76da, +0xb1005347, +0xfd8c3612, +0xe0743493, +0x4a5fb1f1, +0xc195635f, +0x0b7eb7c4, +0x44244771, +0x13ed5d2a, +0xb3ab6241, +0x90c7b452, +0x408c4848, +0x340f7d37, +0x17531839, +0x49b5fbae, +0x2fc277f7, +0x5b117cba, +0x0ae46413, +0x46d15c60, +0x930073d3, +0x02fccbb1, +0x3a8323c9, +0x4e5a9e25, +0x1e1d3c43, +0x2d695f44, +0x4cc606dc, +0x208923e2, +0xa21145cc, +0xf40247d9, +0xdbdbe0a1, +0x084fe8f3, +0x646e80d2, +0x27cc26d4, +0xf8c6069b, +0x9c23a14a, +0x920b06f3, +0x4cdc13b7, +0xa1d832be, +0xac6fe12e, +0x5acfc7b0, +0x74400187, +0x639072fb, +0xf1c9e408, +0x640fd737, +0xdf48bb19, +0x4fe2307d, +0x99f5b638, +0xfc204df2, +0x327de955, +0x164db9a0, +0x360cdefd, +0x00fe1527, +0x04d7bcc3, +0x6500fe7d, +0xaa7a3497, +0x3389b242, +0x31f98c5f, +0xa0a576aa, +0xa9adab5b, +0x8aa8e60d, +0xcec190b6, +0x7c39c18a, +0x9825756b, +0x23a45dbc, +0x568f0968, +0x87a6495a, +0x31338ac9, +0xb4526eef, +0xcbec504a, +0xf3c63489, +0x33b59d44, +0x1bee5736, +0xbfd43209, +0x3edc523c, +0xa183c559, +0x2b81d5d2, +0x97a69fad, +0xe4fffd67, +0xa7b615e2, +0x64b4e82f, +0x93fd17f6, +0x5431c1e7, +0x027eaca6, +0xc5e820d4, +0x641720f9, +0x8e84c25c, +0x04864442, +0x51b6fce4, +0x45af7b7a, +0xb1ad6d90, +0x813964fe, +0x496d224a, +0x9699a69e, +0xdf46a9b4, +0x1feffdc2, +0x1d1ed0ea, +0x48377acd, +0xac006e20, +0xc3fe2534, +0x4ef4cc07, +0x55250c46, +0x6428e180, +0xe6310dca, +0x9ab66de0, +0xf94bcbef, +0xd9b2fd02, +0x0d8a4bc4, +0x372f7dd9, +0x63d59ee1, +0x3c3cc888, +0x663b70d2, +0x5cae54b2, +0x3da9049a, +0x6d4cfe8d, +0x9831cfb7, +0x43e725b6, +0x040f0c16, +0x86ff195a, +0xdd28c62e, +0x140bed89, +0x394c1f9e, +0x0c79fac2, +0x68edd9d2, +0x38fadd92, +0x39da1aec, +0xfc8333fd, +0x4c68cc6a, +0xf213abcb, +0x2929c112, +0x5c2b13b2, +0xff7d7b79, +0x221d36a0, +0x3edf55ab, +0xb3d358b6, +0x3378e2e1, +0x49c41105, +0xc8de7dec, +0xf6dd1dfe, +0x1a814b3e, +0x2e85a528, +0x828654a7, +0x550e4631, +0x1d0e8702, +0x9dd32c6b, +0x9d514aed, +0xb0155104, +0xfc4091f4, +0x4110204f, +0xbd72861b, +0x9cd32e01, +0x98cb9c80, +0x408c2c69, +0x04e9b7bc, +0x5bd36aff, +0x495fbdf5, +0x591d6a61, +0xef55a90f, +0x7c27f79f, +0x86ec01ff, +0xa9dfdb07, +0x9cb108b6, +0x414ee668, +0x168ba7bd, +0x7d1f06ba, +0xf466570c, +0x81dbe5ba, +0x6f80d54d, +0x3b5045a9, +0x2c07ba2b, +0xd2acc9af, +0xb3dd4783, +0x0b71b684, +0x1c9991c4, +0xa388bb66, +0xfdea9166, +0x50a313a3, +0x0b4133a3, +0xe264874a, +0x1d130093, +0x2d083faa, +0xa9decddc, +0xaf6d3767, +0x1fc47ef9, +0xc69e63ee, +0x664dd4a3, +0xcc3ce555, +0xd329fc9e, +0xbe222535, +0xa323f48c, +0x4c9d78af, +0x983bd5c4, +0x5cda02b6, +0x5a1b3f27, +0xbbae3f5e, +0x1c016dc6, +0x176f6812, +0x66d52929, +0x40107d85, +0x39dd1e61, +0x3d4d1a14, +0x62122bde, +0x0fa03bd5, +0x965b8842, +0x5aeb6136, +0xdcd45e5a, +0x728ce55a, +0x92443354, +0x8a778300, +0x26f6d292, +0x303ac6aa, +0xe54e0c25, +0x6d662e01, +0xcb14fafc, +0xa38fb1f1, +0x37229290, +0xf24cf5c2, +0x0362c784, +0xf174c0ad, +0xda5864df, +0x83d1de73, +0x69d40e59, +0x2d456524, +0xd6c638a0, +0x6b03f1e2, +0xc71f33da, +0x776d6fd9, +0xee27db93, +0x59ecec15, +0xebc2a05c, +0x047539fd, +0x9683255d, +0x6c1be12e, +0x9cf66ec1, +0xa21a55cd, +0x16860c7f, +0x4533ee64, +0xf50e2f4d, +0xf936def1, +0x15cf11aa, +0x7f659c34, +0x57b6e08d, +0x45a3f69d, +0xa7d4936e, +0x0932acd8, +0xbe0691d9, +0xbb0b4c53, +0x0a6f99da, +0x786a51cf, +0x1fb602c4, +0x8c868b1c, +0x2bf7378d, +0xa5812dfa, +0x5389e8e2, +0xe45a4024, +0x0ebdf6cd, +0xe25fa211, +0xaaf8a601, +0x1384e3ff, +0x41036d51, +0x4d4c812d, +0x393052b0, +0xa687612b, +0xbf93c923, +0xcbb93e79, +0x60463388, +0xb70048d6, +0x75b9c4c0, +0x78d14443, +0xf0107b5f, +0x83fa0906, +0xecc841c0, +0xc1caf825, +0x6ff122b1, +0x13648562, +0x1fcf5cd9, +0x6b299a2f, +0xe76626a4, +0x4a3e7c25, +0xb2ad8ab2, +0xb038837a, +0x2bd29cad, +0x681e75d0, +0x8c5096d6, +0xeecd8fea, +0x0935d616, +0xfd8586f7, +0xa850a3c3, +0xdd1f2444, +0xf5f044d6, +0x38562388, +0x0dd471bc, +0x7a985574, +0xdf84d78e, +0x4a42e516, +0xaac83ebe, +0x564e3012, +0xd538bd67, +0xcfa6c38e, +0xa6777493, +0x20d775eb, +0x9d213909, +0x5c834562, +0xbe7f1660, +0xffb5a049, +0xdc17ab74, +0x345aa7f1, +0x92cada6f, +0x52b1a934, +0xc4f0fd53, +0xbfc0c072, +0x9bb58929, +0xf4544f47, +0x60ac75a8, +0x609084da, +0xc4d8de62, +0xc4574112, +0x7cf0b53c, +0x9fcdc4b2, +0xf29d8cc6, +0x639cb2b3, +0x3c5d11b7, +0x3ebaef2e, +0x37ea19a6, +0x988441ba, +0x6007b14f, +0x721f4d8c, +0xc556c891, +0x2e5451fc, +0x56f22385, +0x801905de, +0xd2251ba3, +0x5379d31f, +0xaf3ca564, +0x8f8d1fae, +0x0c2ca132, +0x6b6b78fb, +0x2d2c9ae2, +0xd4229fc0, +0xf0b41310, +0x03c91a81, +0xf13bc17e, +0xf3ce63b9, +0x64c1d90f, +0xb08c9c3d, +0xed86e6bd, +0x0ffe0be5, +0xfa0b6e0a, +0x6218b24b, +0x92b213e9, +0x18e62ad5, +0xf42d456d, +0xa52eac10, +0xdad21991, +0x462bc62a, +0x83218b84, +0x1a05cc7a, +0x3badbbf0, +0xcb9b457b, +0xb9425e61, +0xc1cad92d, +0x92c64289, +0xa0e29be6, +0xbe6da138, +0x8e8ba0a7, +0xad0db579, +0x3b11edf3, +0xbf795637, +0xf003227f, +0x93fa0a59, +0x856aaad8, +0x779ab693, +0x0f82bf33, +0x85e381c9, +0x912c4fcf, +0xf4d06520, +0xbf6a203c, +0x36793118, +0x75bf482c, +0xede9f6bd, +0xdf52cbe5, +0x94de1221, +0x8171bef2, +0x22a5722a, +0x5543f51c, +0xb11ec839, +0xb14b9d2c, +0x8925ed9e, +0x7835c558, +0xf12bed38, +0x985c9736, +0xafcd284b, +0xbd1f9cc8, +0x6e52b974, +0xdea84e75, +0xedf42365, +0xe017c22c, +0x858d1e27, +0xeda5efc1, +0xd09f198f, +0x18772646, +0x04a2e5c8, +0x37048980, +0xf4a14938, +0x9a9cd41f, +0x738f42f6, +0x56369c14, +0x95a70c78, +0x23792993, +0xee7088fc, +0x589a4368, +0x5e1abb3e, +0x70dfbb2d, +0xbb9ebcc7, +0x2b730654, +0x35a10b55, +0xb3f58f0e, +0xaf595888, +0x2f569a7d, +0x197355a4, +0x7c1a93a0, +0xae25e983, +0xbbf32d6f, +0xa41b5f1c, +0xf64c8020, +0x707597d6, +0x839bb826, +0x0c4ae66e, +0x1ca9e2e5, +0xae23ab57, +0xc97cd49a, +0xcc2601bd, +0x539c25a6, +0xadd8fb99, +0xc4234470, +0x314dd007, +0x7b6cfc06, +0x8c841434, +0x8f422634, +0xbac46200, +0x927e4ee5, +0x8a0eb00a, +0x29306238, +0x170b03b5, +0x1737eeba, +0x4d64a015, +0x8546cef7, +0x67ed5587, +0x2ece5586, +0x82e573a0, +0x458e8bed, +0xc4a9fc68, +0x42b96eeb, +0x372b892b, +0x8de5e6ea, +0x52aae75f, +0xd593a7b0, +0xd380b739, +0x6172ba6b, +0x69b787f3, +0x974b9c70, +0x1f7f623b, +0x7bd9dfd2, +0x7e5bf598, +0x185015aa, +0xac7ba9b6, +0x81de371d, +0x48317585, +0x033936ea, +0x00525f5c, +0x158a2303, +0x18262b2b, +0xe861927d, +0xc82bf4e8, +0x48ed6ac0, +0xec1ee3b5, +0x966400df, +0x69d6bfcd, +0x752dba69, +0xefa1bf89, +0x6de6fdf5, +0xcd5f72f5, +0xb2801923, +0xe78030fe, +0xcb7fe32f, +0xb934ad67, +0xb3c84f43, +0x531faa77, +0xc88909d6, +0x46139da8, +0x754f7ba6, +0xe1dea65f, +0x1af362c6, +0xe4fafa65, +0x917eaa71, +0x17b27e81, +0x227fb192, +0x33c0280f, +0xd34b2402, +0xdff9d047, +0x4df56a7a, +0x3c1b7224, +0x30840426, +0x97bd703c, +0xabcc471d, +0x22bd1539, +0x17b28988, +0x42ab391a, +0x118172e2, +0xccc4bb24, +0xc344680c, +0x430e0351, +0x152a9cf8, +0x2192718c, +0x32aa6f38, +0xf9e9599b, +0x3965112f, +0xa7b99d1e, +0x30d1906e, +0xdef985eb, +0x92915b3d, +0x4df0ccdd, +0x9a02f751, +0xf25e4741, +0xd71d3261, +0xe316025d, +0xcae22fb4, +0x5cd89dc1, +0x668e5863, +0xaeec964e, +0x086b76aa, +0x5134aba2, +0x796c42aa, +0xc5a1f8ce, +0xac60cb19, +0x2b6aad04, +0x66bb9fd0, +0xc3c0ee85, +0xf8debf39, +0x9e09109f, +0x7bd996be, +0x643844f6, +0x826ab02d, +0x9c8c92a0, +0xb813058c, +0xa5eb344d, +0xf811e0b4, +0xdc81393d, +0x4c415c59, +0xf9af0a7a, +0x0ecfdef8, +0xe33f4086, +0x28041410, +0x49838505, +0x1f56b1cc, +0x036244fe, +0xccb7fab2, +0x7af4f69a, +0xbbc5c879, +0xea093110, +0x023b9095, +0x63e3dc10, +0x23df4d50, +0x756707c2, +0x147cb731, +0xcdcced24, +0x4baa47e4, +0x5c154eeb, +0x2b81ec69, +0xb8e862cc, +0x1eb1f729, +0x6f962c61, +0x06a0fa70, +0x1db10d58, +0x7ef58c69, +0xafd19b2a, +0xd1cdd7d5, +0x66b1349c, +0x92080177, +0xedc342e9, +0x4f2d084d, +0x4c1667e8, +0x364b6ece, +0x22624111, +0xe024ef38, +0xb15f3e2c, +0x024368ec, +0x8043d520, +0x3f520a66, +0x9289479a, +0x841d96b4, +0x5340e54f, +0xa56eb723, +0x49ba3c87, +0x7d9c0d1f, +0x76a20367, +0xa3fdf1d5, +0x127031bb, +0x775db2fe, +0x2a611335, +0x73d20266, +0xfbaa0900, +0x1d26147c, +0xe8004159, +0xec561eb5, +0x62b771be, +0xcf68b175, +0x19845e76, +0xce982b4f, +0xabc51fa5, +0x0cc75568, +0xf496bb14, +0xe2a7d5a3, +0x48662056, +0xaeec04ab, +0x134113e1, +0x90d6a402, +0x34be40ee, +0x79268f3e, +0x564cea16, +0xca67a088, +0x832557cd, +0x8f225098, +0x008a8320, +0x102c4e23, +0xb44045fb, +0x5e60363b, +0xab086abf, +0xd087e90d, +0x49808ec9, +0x099afc53, +0xefdfcddc, +0x1a7b65a0, +0x3b7769ee, +0x1904f6f1, +0xdb63a909, +0x5cffcf90, +0x66479969, +0xa426094c, +0x8b72ecc3, +0x776fa5c3, +0xa3d14dcd, +0xf01931d9, +0x47b45b82, +0x7a67c9e5, +0x61bb3c2c, +0x7c06ac25, +0xc3ac5435, +0x40ef8048, +0x9dba23d0, +0xedf80706, +0xaf3f7d33, +0xbbb38409, +0xa5244000, +0x84eaa2e0, +0x66f246f9, +0x3d1bbc79, +0x7a264f39, +0x6006c5e0, +0x26d16bde, +0xb99c6c3d, +0xce84c5ba, +0xbd87fe06, +0x1468faaa, +0x7d546061, +0xfe381a7f, +0x7f143805, +0x43cfcee0, +0x931398e2, +0xc6ae3124, +0x5a20d886, +0x61af1216, +0xf94bdbd9, +0x870a98b2, +0x531275b6, +0x6723889d, +0x3232cfff, +0xe36c1ff6, +0xaa794860, +0xd56447cf, +0x0f57aebd, +0xe9c79a6b, +0xd29b88b0, +0x1be5dbfd, +0xeda2230e, +0xb9548835, +0xe1ec4a75, +0x975ac7f8, +0x935af012, +0xb4572cae, +0xb7a122cf, +0x5dcfb0c8, +0x3219ec63, +0x26715919, +0xe63237f9, +0xb55712b0, +0x44890ebf, +0x45ba022e, +0xc94638ec, +0xf096666d, +0x7fdaf56b, +0x4e27d2cf, +0x5cf59e19, +0xcc58032d, +0x972aa76b, +0x10f7b321, +0x6988ef7b, +0x3ebdfc1d, +0xc92310af, +0xa5ec8f93, +0x20ab968e, +0x3d3b96ad, +0xa2d43289, +0xcd4967d1, +0x3299a65c, +0xfc0da019, +0xc6787f59, +0x98983635, +0x8b76ca33, +0x96810936, +0x97d81ebd, +0xcca0dc01, +0xd5aaf545, +0x373b733d, +0xe3d89c75, +0xb3891a0a, +0x7f036a54, +0x3b2d6b15, +0xaba4910e, +0xeb94e761, +0x8577da37, +0x493c9343, +0x5cd578a6, +0xf5464d89, +0x50a60771, +0x8736893e, +0xe899a4de, +0x38ad7ec3, +0x5e130a45, +0x9629e110, +0xebcee12f, +0xb42133ad, +0x2531e5a2, +0x8b20fe57, +0x60ba95eb, +0x08dddab4, +0xe9e46729, +0xbccdffb5, +0x803bd9a3, +0x85fa2554, +0x8b70d518, +0x9058817a, +0x77a57481, +0xfd3a42dd, +0x33ca37e8, +0x8e480fd6, +0xc2c2708e, +0x6f000c4c, +0xc0b3b3f3, +0x961aaae0, +0x6dc02695, +0x0d70ca41, +0x91042126, +0x35f5ac8b, +0x0663effb, +0x255fd4a3, +0xc5514eaa, +0x2a874e2b, +0x1356029a, +0x18d03622, +0x4afc6a0a, +0xfbb23434, +0xb7cc6622, +0x69b03c5a, +0x6f0d158b, +0x01daa5ab, +0x7eaa8e1b, +0x44d116c7, +0x2d0d2985, +0x427fdee3, +0xb1acccb4, +0xcc3484f1, +0x392b45c4, +0xd1240989, +0x90a1b633, +0xa7b11bac, +0x1d228752, +0xcfe8f3c5, +0xbbca3a82, +0xf39a8141, +0xad8704e5, +0x2f9aab86, +0xacf0f857, +0x9503120a, +0x1ad32118, +0x48bf1231, +0x4443f1e4, +0xdf8b7e7b, +0x1f915156, +0x5fc4b561, +0x4e9b7ebe, +0x8ab5585a, +0xb9cda00e, +0xd4151547, +0xef767270, +0x8f22a01a, +0x0215dc98, +0x6877c2e7, +0x7bc3629e, +0x285468a3, +0xa91d9aea, +0x0a7dcae5, +0x35d43f73, +0xed520112, +0xddb4efe1, +0x439a7fcc, +0xe3baead1, +0x6766fae4, +0x08e88ab9, +0x9cfe4d5a, +0xc9a4513f, +0x14fd24d6, +0xfeedd95d, +0x488e4360, +0x98d7bf90, +0x3ff83258, +0x4552ab9f, +0x642804ac, +0xdc1cefbf, +0xa4faff59, +0xfce81bc9, +0x2eff4496, +0xfb33ea4c, +0x92ca55a4, +0x4013f35c, +0x33cc9a69, +0x294a9d3f, +0x9cd6a338, +0x0394cbc1, +0xbda2c64e, +0x9f15ce80, +0x112f3ef9, +0xa94e9a56, +0x2b0f5a56, +0x85d0a68c, +0x366948f2, +0x49f51d49, +0x9c7381b6, +0x8ef54eda, +0x56e90519, +0xde867be6, +0xd28e811f, +0x443b512b, +0x5bb1b11f, +0x9141eff7, +0x42d4cdc6, +0x7e59a5bf, +0xf997f3aa, +0x29277a59, +0x9969984b, +0x1e4d421c, +0x8d169bf5, +0xd88bde01, +0x5a40bc34, +0x632a1251, +0xa54cade5, +0x847b9b25, +0x2ddc2375, +0xa28dd1c4, +0xdbbee235, +0xab6c8a08, +0x18bf6ad3, +0xbddbda86, +0x5744f256, +0x36448d54, +0x61842eac, +0xe05792a1, +0xa4f8dc4a, +0x51ebc218, +0x1a3136d4, +0x310d3e28, +0x26b259be, +0xbddb80bc, +0x8ef8afaa, +0xb63108b2, +0x0a1d105e, +0x121c4021, +0x5d628094, +0x57ecb82e, +0x73fcf9ba, +0x3319c504, +0xa91e031e, +0x3e2e4bdb, +0x3c993134, +0x1b20197c, +0xd62f7efc, +0x7ee0476c, +0xe2c50e30, +0x79a6bc10, +0x0a5408f3, +0x49b6ecd0, +0x88ca0866, +0x939f5322, +0xceb8d621, +0x982c745d, +0xf753cd17, +0x14e8e2f9, +0x79cbc8f6, +0xdf340d23, +0x606fcd47, +0x7d5815d8, +0x40dbc8e2, +0x0d8dc7f6, +0xe5070c6b, +0xcea90fdd, +0xe9ddc51e, +0x02edefc7, +0xeb5d4032, +0x30b856f7, +0x943c80a9, +0xfea394b0, +0xcb435676, +0xb1245d32, +0xe46087c7, +0x5ae3a17e, +0x4f1c19d6, +0x4510b035, +0xf5db9099, +0x5c824025, +0xf99f6b6e, +0x716703f0, +0x1ce8636c, +0xd6e032e6, +0xe670b4ed, +0xef6fbf58, +0x0f2dfd05, +0xd7f38859, +0x599fd22c, +0xd722fbd3, +0x79b8ae09, +0xa5903d6e, +0x480b0545, +0xe425eafb, +0xc639c2bd, +0x13aa6723, +0xb63b63af, +0x1cef4e07, +0x3ff53f41, +0x888a8100, +0x035e6a79, +0x88af985d, +0xb8952027, +0x67aa5ce2, +0x053b65d6, +0x5584ec0d, +0x203bb5a7, +0x6c27bbd1, +0x3369b825, +0xc355bd1b, +0x15dc7082, +0xef8fc504, +0x07973e8b, +0x81326d2c, +0xc59fb7d2, +0xa9ec2c4d, +0x07e6a0d2, +0x112b8c88, +0x86a4f3e4, +0x5f7b5188, +0x4927b46f, +0x436fe4bb, +0x2bbcdbc0, +0xba747e88, +0x90175b7b, +0xc8fdf0f9, +0x531b861f, +0x0fb0ee1d, +0xd81a1aa0, +0x270a60f1, +0xa7e9a5bc, +0x16560fd5, +0x02de41f1, +0x989acb64, +0xc1059be5, +0x21059d91, +0xe5707d22, +0x0a1124c5, +0xa7be5d1e, +0x3f8536b2, +0x3fabee22, +0x67fe8c37, +0xadbe357b, +0x33b38f8e, +0x86c17ca6, +0x9003c04a, +0x684e801e, +0xef64f942, +0xc4e4eb19, +0xd0bce3b2, +0xb2dfe355, +0x7ba1d94f, +0xe02b6dd2, +0x8e91d932, +0x49999d82, +0x46783fba, +0x1f4813ce, +0xaf41b8c9, +0x174e5ac8, +0x509e65c8, +0xbd049520, +0x028aa804, +0x15d367bb, +0x4eb8b159, +0x57ee78c8, +0x5a9b44cd, +0x27240dc9, +0x189db93a, +0xaac2a407, +0x00f2d209, +0xdf6610c2, +0xe74107bb, +0xa14dfddb, +0x618d2c1f, +0xa91ee26b, +0xc82b79c6, +0x42d43ce8, +0x1528a757, +0x16ab8c97, +0x6c284496, +0x8773516f, +0x1be7fc7a, +0x3990d613, +0x33d4a81d, +0xe5cbc65d, +0x10014bd5, +0x57a91adb, +0xe6c9189c, +0x100c370c, +0x15c98742, +0x0bc16583, +0x0c52cdd2, +0xa48473a2, +0xddf06d34, +0x208b9479, +0xcd8a623a, +0x67f17264, +0x4ca02d6b, +0xd8480e59, +0x4b97a2cc, +0xa546d903, +0x3f8ce106, +0xb83a26ff, +0x9e1edee5, +0x2c4bc55c, +0x76b5e51c, +0x880608d5, +0x8726c370, +0xee1d3111, +0xbf73d60c, +0xd6208629, +0x6381dfba, +0x05d5bdfd, +0x53cf5ea3, +0x81d5dcb2, +0x53041bd8, +0x4e1d9ec3, +0x5e5be39f, +0x04107422, +0x1f4d4a9e, +0x653a4fca, +0x279659c8, +0x94782376, +0xef81c91c, +0x167961dd, +0x4caa45a3, +0x1bf2c06e, +0xe208aae6, +0x47dca413, +0xfa3a7c3f, +0xa01a666a, +0xc349ea84, +0x4b6b7a70, +0x396ef635, +0x59bcfda9, +0xe5985848, +0x7f8323a2, +0x80d0b797, +0x44243ffe, +0x6acf23dc, +0xf1e4d09d, +0x66fc1ff1, +0xbc1d8df3, +0x33592350, +0x6a08a879, +0x07b8ac09, +0x95b95f0d, +0x88fd6840, +0xaee5ddfd, +0x2eade849, +0x5f6789ce, +0x8ceb4789, +0x7f0a1966, +0x6f590250, +0x38a4d383, +0x9c7c9299, +0x028b0b8f, +0xd465e7e2, +0x741d8af2, +0x6434fa12, +0xa4103244, +0x8b85904c, +0x8ba8bda7, +0x4d7e6e51, +0x1116886e, +0x4c2d3afd, +0x20762a2d, +0x052268c7, +0xc4415e37, +0xf18bb6cb, +0x2ed1a38e, +0x4318aee1, +0xd15abace, +0x9c93d6a6, +0xa940cc4f, +0x0f0237c0, +0x6a57ba70, +0x582577ca, +0xa0b59684, +0xfd8803b7, +0xe72f5174, +0x2d165307, +0xfb2d545d, +0xe1c635fc, +0x45e0acc6, +0x569ad9f8, +0xd6122116, +0x04af2c14, +0x1905a3c9, +0x74beeff2, +0x70148ceb, +0xb94f1e04, +0xc172160d, +0x899245d4, +0x59a59e6a, +0xe25b08ef, +0xfb3cca3b, +0x4fb4457c, +0xb2802cfd, +0x8dbaff34, +0x5c1f1665, +0xfb65c0f1, +0x01fc46ea, +0xde77698e, +0xb8707694, +0x384c12a9, +0x5893ea7a, +0xca20cdfc, +0x8761d749, +0x4e008017, +0x9381ccd3, +0xa091080d, +0x883d2bd2, +0x83d7f80b, +0xd8bebd72, +0x74d19445, +0x9a1a95dc, +0xa2fbf7ae, +0xccd48344, +0x51a17f8f, +0x9fae7986, +0xeaefd9ce, +0x9c94af90, +0x56ccede7, +0xa414cf48, +0x8bb7d785, +0xf294dc36, +0xb585cac6, +0xefe1058f, +0xf18cceff, +0x01d1424f, +0x2a609aec, +0xe4cfcf44, +0xdcdd0a5c, +0x8b90203c, +0xd3237e3d, +0xdbbf39c8, +0xa59b0611, +0x4fec7dff, +0x9b3edbb3, +0x8cef0dc2, +0x4b315226, +0xcdce127c, +0xd84d30b8, +0x56b54c62, +0xf7fde086, +0x0a6b2658, +0xa8f67a4e, +0x16437adb, +0xf3ff9aa0, +0xe9335f26, +0xc0e9b926, +0x8b4bd17c, +0x714cdde0, +0x77f3b27a, +0x67e0c693, +0x851fb77d, +0x00e7dfdc, +0xe44693fb, +0x988ce9f8, +0x415204bc, +0xca62018b, +0x40c3b5a6, +0xf50dfbe4, +0xf97f137b, +0x468a387a, +0xc10e031d, +0xf80f1705, +0x107ee01d, +0x8d8bcf24, +0x9c865044, +0xd04dd036, +0xd7c4c2c6, +0x233504f9, +0x55e70f2a, +0x7c144bab, +0x662c92ab, +0x33aee493, +0x0e4f7d06, +0x6329b00d, +0x3c83b8d2, +0x0886baec, +0xfde46ab5, +0xaf0c1ec8, +0xe230cdb9, +0x0d0ee5b8, +0xbd40a999, +0x09ee0184, +0x09b8451b, +0x66d1c705, +0xe4502cf4, +0x1e7ef750, +0xa6f9d2c1, +0x88babf6e, +0x2d6cfb59, +0x671109de, +0x017c3ef2, +0x395a7f5c, +0x0a2b3be6, +0xd72cd626, +0x5a28b40d, +0xc159c344, +0xef5f9438, +0xc401c7f3, +0x3d07bbbf, +0x92e344fd, +0x5f66f8f9, +0x64998549, +0x86b3696d, +0x99bfa60f, +0x5aaceb63, +0xa2186db6, +0x34714061, +0x00d4e47b, +0x4ed9d224, +0x0c7b11f0, +0x2e5940c0, +0xbf5921e5, +0x3d507083, +0x3ec466ce, +0x993cfce8, +0x98b86bf0, +0x2721f7ab, +0x8c6ab3fc, +0x1a2387a1, +0x35c83b02, +0xdfc3b03c, +0xbd1a6916, +0x488fad16, +0x4bbf7ee3, +0x5252b634, +0xaad0d5cb, +0xba53e73a, +0xc7e26657, +0x364ac77d, +0x3a6057cb, +0xd745ffad, +0x5166c813, +0x29acd468, +0x3be23de0, +0xa52c377d, +0x5d6a2718, +0xf6b7370e, +0x45e12eca, +0x1436ad87, +0xb6928712, +0x382deb80, +0x5926277a, +0x0da57281, +0xf8ed6055, +0x4d4a4848, +0xe9a6e14d, +0xaff03f77, +0x49c4dd1c, +0xcd1fecf2, +0x19780c40, +0xe15c876e, +0xab4820a5, +0xe32f08f2, +0xb04f9e9e, +0x05c63182, +0x58cd8780, +0xea9d3748, +0x247615bd, +0x8b587a4f, +0x2cebd89d, +0xef511bfc, +0x71107b2c, +0x5df6c473, +0x8965e53d, +0xf20bf04e, +0x644c31af, +0x7fcd41d1, +0x06358c59, +0x736091bf, +0x75da09a5, +0xf464d35b, +0xae895b13, +0x2e99af91, +0x7002798d, +0x3628285e, +0xe184dc17, +0xd2154229, +0x6261090c, +0xc54056b7, +0x0a560d7d, +0xdaca957c, +0xbf7216f4, +0xd2015990, +0xa65a6f76, +0xc8c0a8fb, +0x5bc45267, +0xe4066c73, +0x01ab2094, +0xe3c53004, +0x5c674199, +0x5bde4126, +0x1fc056a0, +0x7d60994b, +0xf2806bd8, +0xd6ad8d91, +0x6c6196d0, +0x1b4db87f, +0x5e47e963, +0x3c3133ab, +0x9fa7070a, +0x7e69b168, +0x889c4e71, +0x0291a18f, +0x5255db9f, +0x6596f8a8, +0x6a6bbb26, +0xa14bcb80, +0x9c5cec95, +0x0b6a9514, +0xc7f088a5, +0x899851cc, +0x22ec79f5, +0x4b9311e0, +0x1b41b89e, +0xb1b208f5, +0x245c1915, +0x285978fb, +0x46d9ee1d, +0x6f83b9dc, +0x279a7893, +0x0606a55c, +0x41750d41, +0x8b228f72, +0xbfcb6bcd, +0xfb1f89a0, +0xc99b6213, +0xcda17b36, +0x455ebd5c, +0xbf8477d6, +0x1abfc3b4, +0x9c144b5b, +0x2e7a267c, +0x3231abe1, +0xd9312e33, +0xdfc1571c, +0xba4ee77f, +0xd887adf7, +0x6cc124d3, +0x358b8823, +0xa892825f, +0x40e07917, +0xe3f859db, +0xa2af54db, +0xed0c518d, +0x247c80d9, +0xba4dc96d, +0xcdee96a1, +0xcc148b2e, +0x59a3737a, +0xa93595ad, +0x6f39784d, +0x7acc7013, +0x8ff62a5c, +0xaba738ac, +0x4d9591b5, +0xfe483de7, +0x5ef94e67, +0x4c906d94, +0x5f877edf, +0xa23f905b, +0x61a6726a, +0x3294d62c, +0x747a52b2, +0x4a5025dc, +0xf8915873, +0x52bd4983, +0x17b4a6b0, +0x3e864ef5, +0x55ddad00, +0x6b823fa6, +0xc5b2263a, +0x26650192, +0xb96c645a, +0x12e6fef5, +0x441e95f8, +0x10446b22, +0x50c8b6a3, +0xa8521e53, +0x8ffce052, +0xa787b628, +0x6ab3c06f, +0x3f53825b, +0xbbe3f36e, +0x459c1b31, +0xc591556e, +0xef65d626, +0x772dc5fd, +0x1950bf3a, +0x617c24d5, +0xffb6cc7c, +0x17720128, +0x9dc57b8d, +0x4f103020, +0xe8968ef5, +0xb7143642, +0x17f7e139, +0x8c4177bc, +0x15a431d5, +0x7bee8014, +0xd4474216, +0xdb5e747b, +0x0e542a16, +0x834afc12, +0xa9d710ea, +0x0522f7d9, +0xe227788b, +0x69292535, +0x8d07d3d4, +0x35fcdcbc, +0x8e875ae7, +0xd9203f71, +0x805def33, +0xfdb005bc, +0x482d3975, +0x9ac431e2, +0xc3f42799, +0x6ee76d68, +0x523a728c, +0x10c29a28, +0xead5c41c, +0x10140bcc, +0xe25c518e, +0xe9e73c13, +0xca67bae6, +0x87d09a26, +0x9fb4de99, +0xde797c75, +0x74125645, +0xf3258fd2, +0xe380c123, +0xa4ef103c, +0x00fc33d9, +0x82d79fec, +0x694aa523, +0xec983659, +0x58fdfe16, +0xa1995a35, +0xeabe4f09, +0xeeb91a85, +0x9a888cf5, +0x1ffe9744, +0xadd42f9b, +0x183ee63c, +0x7dab2df9, +0x3e62bad6, +0xef1f2b7d, +0x7c73245d, +0xf995b68e, +0x47a0a480, +0xb55cbdf0, +0x89ec374f, +0xc264621d, +0x6d127bbe, +0x265ab60e, +0x2ed9e063, +0xb5c89845, +0x38e2a7ee, +0xe505ab96, +0x7c929d5b, +0x079be002, +0xa2266088, +0x5deee4db, +0xf9874508, +0x85140ff7, +0x00b68983, +0x24f78bbc, +0x3da0b85f, +0xc1830b6a, +0x1d9f6dce, +0x0bb4bc08, +0xd7f41b81, +0x7b2b58ec, +0xa1015bcf, +0x7853b565, +0xaaea7385, +0x262883ff, +0x8ea8b529, +0xcf56b865, +0x49a6df72, +0xf36900d2, +0x24137a9c, +0x71fa2248, +0x91156496, +0x814cd7a1, +0x082cf4ad, +0x6c201563, +0x2e6e5d56, +0xd8758b3b, +0x53f57760, +0x25bc8388, +0x56bb186c, +0x524c2cf7, +0xf799a4bb, +0xc1aab170, +0x2afdd100, +0xcefe5450, +0xfa64c8ed, +0xe0e095be, +0x1b0876bf, +0xe2c9613e, +0x5c98b15d, +0x149d9f2f, +0x8ca9a664, +0x903bba05, +0xf587f339, +0x224b31cc, +0xe2ffdc16, +0xe13a5a50, +0xc2651cdd, +0x6cfe9a05, +0x5fd44632, +0xc7c2f8c0, +0x395f8d19, +0x5b2a6aba, +0xbf9220e7, +0x2dda8c2b, +0x3e48a803, +0xe19bc82f, +0x400ffc52, +0x5503337e, +0x2931b6de, +0xbd1a9503, +0x076b7278, +0xa0014380, +0x26562dc7, +0xa88477f6, +0x80324c82, +0x9d7bbc8d, +0xaf8a774b, +0x9d8dcec7, +0x6baa7ca2, +0x2fa2fd66, +0x80f51af2, +0x000a996e, +0xb386efae, +0x244dffdd, +0xc02a9660, +0x9d8b238d, +0xe36abae7, +0x81f05850, +0xd5191aa7, +0x15285092, +0x14925614, +0xc4f170fc, +0xf4394211, +0x0b4c1556, +0xc84e8cd7, +0x028fec9b, +0xa2aa07e5, +0x5be3a4a2, +0x2ba3193e, +0xedd1fef8, +0xfa6a4f1e, +0x715095d2, +0xf75593e8, +0xc1c41c37, +0x6b3acb48, +0x9143eec0, +0xea09d698, +0x6a2a456a, +0xc6358d63, +0xf97210bf, +0x09868fbc, +0xc627a8ef, +0x5ad67703, +0xda6c5484, +0xc8901ea6, +0x0e0281f4, +0x47351a81, +0x779c0125, +0x8191026b, +0xccafb2cb, +0x3cc35bdb, +0xaf2dff01, +0xfc847bfe, +0x08b38786, +0xc8e216c9, +0x5b8515c6, +0xa4faa672, +0x1dec196d, +0xef39323d, +0x5200c5cd, +0xfe10ac8a, +0x2086580f, +0x19661ac3, +0x7f44da73, +0xd14897bf, +0x760d04e9, +0xaa4b621e, +0x80957959, +0xad2b7fbf, +0x29f921d7, +0x98524ed6, +0x6f09b020, +0x793b4f8f, +0xf1a71128, +0x34d93270, +0x5cedc03b, +0x6b42a20c, +0xe1012892, +0x3fb456a3, +0x5d1b0edf, +0x0e591e08, +0xb2575f48, +0xdbace920, +0x153ae576, +0x07f72644, +0xb35727e0, +0x30829dae, +0x5262354b, +0x40543db0, +0xea54fec6, +0xa3332e7d, +0x0a8f3607, +0xee09cf31, +0xb0f9b0fd, +0x3c6d5fc3, +0x999889d6, +0xe4fe3c73, +0x326b638c, +0x1022e327, +0xb9ed22a5, +0xcc5d9d33, +0xf9fe3a7c, +0xf3d85711, +0x4a5fa7ed, +0x02a16037, +0x54adf459, +0xe677998a, +0xaff65bc4, +0x69093073, +0x6d046710, +0x4dc5058c, +0xd183fd71, +0xe79c7d3f, +0x82beab72, +0xe4f1ffb8, +0xd51c0fae, +0xca33f970, +0x062525c2, +0x8b5990cd, +0x45e46f34, +0xa1b5acd4, +0x4789a35d, +0xb8e2267d, +0xe2c87b84, +0xf48ab5c5, +0x068799c1, +0x5e054444, +0x7c5bafce, +0x61eee84c, +0xc99f4295, +0x60a84cf0, +0xd2c674d0, +0xe726a322, +0xcf345981, +0xe70c200b, +0x4711f4f5, +0x0eaad13a, +0x55c45efe, +0x1d7e2041, +0x852d53a2, +0x030e347c, +0x7eba6bcc, +0xf2673da8, +0x242e819d, +0x8013c203, +0xc5232245, +0xdd8528cf, +0x63097b1f, +0x64b39e92, +0xd30c3b68, +0x75acf773, +0x49fb5fac, +0x73591d4f, +0xba902163, +0xe31f7a21, +0xefdd6ad9, +0x62fd6c47, +0x3dd21957, +0x51e51160, +0x758a18db, +0x202782f5, +0x8bbc74ea, +0x2e97e8f0, +0x3be077d9, +0x8e7485ee, +0xf59f5571, +0x0a8fb4f3, +0xc641161f, +0x96853c33, +0xc8d04f3f, +0xe61d81b7, +0x310e9dcf, +0xb13cf2fa, +0x25287f5d, +0x9addf4bf, +0x35a26fbe, +0x3ad60230, +0xb7e2e657, +0x13ed9d5d, +0xb4deb536, +0x3d52f62c, +0xf98e23cd, +0x44822e44, +0x3cfef56b, +0x354c1381, +0xd628aad6, +0xd29ef439, +0xfc1b5d24, +0x6243e959, +0x00637168, +0x2af153f0, +0x76587fe7, +0xee70bd66, +0x821a1f4a, +0xcaee2fe0, +0x12576b00, +0x9bfcac6c, +0x2050368c, +0xd3d2d095, +0x5023e600, +0xbc119991, +0xd1a88755, +0x1fa90dd9, +0x641596a2, +0x0619986e, +0x8e84e7d3, +0xbcf63f6c, +0xc8e3b0a5, +0xf3e3272b, +0xaaab4bf7, +0xaad5e978, +0x500ccbe3, +0x88484205, +0x336a85cf, +0xe2314977, +0xa31f507a, +0x93424f30, +0xf00867e9, +0xcad19949, +0xf9cc1277, +0x52cf5621, +0x8f6cd023, +0x9d0c3ea6, +0x9522f87f, +0x844f82dc, +0x3bdf04b3, +0xe60127bd, +0xe071882e, +0x01dc8e92, +0x04a93285, +0x93b2c425, +0x03f2c829, +0x6aa15fb4, +0xcdab77db, +0x2d582dfe, +0xa30f221e, +0x64d3bd32, +0x45b56412, +0xeeb3cf83, +0x2f95430d, +0x7b5b422c, +0x25650f6d, +0xcfdcf465, +0x1ca4f1f8, +0xc305d611, +0x8f5acf96, +0x4721df8d, +0xb97219c6, +0x36184dca, +0x1eb5d32d, +0x19d2ae6e, +0x05ef6338, +0x9bafba73, +0xf2694bed, +0x70453a24, +0x6d41c179, +0xb2b6258f, +0xb613a68b, +0x05dba78a, +0x88a32780, +0x5eda4b98, +0x82de5612, +0xcba526c1, +0x60c89fbc, +0x859eb828, +0x9e38b918, +0xd2c26af0, +0xffdc48e6, +0x54775922, +0x1e7b08a9, +0x88cafd3c, +0x6f727f60, +0x06a1a2ce, +0xf7143905, +0x8d86d435, +0xb7992fab, +0xab4a3f68, +0x8123edab, +0x77c9450c, +0x6c90a09b, +0x1b481ecc, +0x6f3a2a22, +0x55758e92, +0x61c520e1, +0x97568824, +0x1ad3d710, +0x37e39467, +0xe2e50aea, +0x774ca8a6, +0xb650ec5c, +0x9c345384, +0xd80850c9, +0x7cd55a83, +0x5e691bcc, +0xb62f3391, +0xf6d43ef2, +0x4a8eb1cd, +0x90f4e8e4, +0x6b68579d, +0x33332ef3, +0xe342414a, +0x09ba318c, +0x1d73fb8f, +0x81e946ba, +0xc6a1871b, +0xd08bdaf3, +0xeee187c7, +0xed3367a1, +0xdcb146a5, +0x123427b4, +0x36312562, +0x6084d071, +0x0229d2e4, +0xac5ebaaf, +0x32ef0810, +0x8ceefa6e, +0xd3f99b80, +0x74889161, +0x8fb33e7f, +0x5b0358f1, +0x41411cfe, +0x9396f2a4, +0x8aa6a2c8, +0x1176fee8, +0x47520446, +0x71393091, +0xc309723f, +0xfc21ab2c, +0x260e7a1a, +0xa45b2582, +0x49b7765f, +0x6d61c684, +0x987b4d14, +0x85606d3f, +0x03e3eec6, +0x5dfcab65, +0x7b75f114, +0x9d51c0b4, +0x33df8888, +0xdd92273f, +0xd48a84e9, +0x6bded2f6, +0xfb220d6a, +0x07c5b703, +0xc0a4bc2d, +0x0503b898, +0x07fd1aff, +0x53373e6a, +0xeaa5028a, +0x9f7ea4fa, +0x1109e641, +0xcaf934b6, +0xe47a7300, +0x572415b9, +0x9debe3a4, +0x9063588f, +0xdc659a56, +0xa77f3eae, +0x23af1ba9, +0xbd2459ac, +0xffcec413, +0x397726c3, +0xb39d8735, +0x15319531, +0xaab6775d, +0x2de6f3ff, +0x38ed3c68, +0xe735b6d1, +0x0667bf1b, +0x48c0e3d4, +0x7537a5e7, +0xd79ee698, +0x75aa86a2, +0xcfdf136c, +0x09f48674, +0x397e6653, +0x95d52688, +0xd8ab2cd6, +0x67c093d7, +0xba57da9a, +0x2927c3fe, +0xae6d0190, +0x3e9178ca, +0x3f94b92d, +0x0cb6d45c, +0x509d2e8a, +0x18957946, +0x5afd8b17, +0x1a84f3f7, +0x65a60dae, +0xe8e88e55, +0xf72f9f8e, +0x2f6fc13b, +0xa299485a, +0x72ccb5d5, +0x86fa3acf, +0xd862e95d, +0xaf5b79ea, +0x54520b69, +0x032cccad, +0xcfd134f6, +0x4a15fb85, +0xffffbac6, +0x2f0cda0e, +0x66ae74c6, +0xb6f083d2, +0xf857913f, +0xdb108ceb, +0x042abe18, +0x704c76e2, +0x0b133013, +0x25697b53, +0x37ae7d5e, +0x659643ca, +0xe3772121, +0x7b025cb4, +0x9839274e, +0x6aed06f7, +0xacda8263, +0xb48053d6, +0x2e8fb3f1, +0xe4d095ad, +0xe7340d04, +0xc7159474, +0x6f52989f, +0xa45c051e, +0xc4cb176d, +0x2eafda82, +0x4cbf52c5, +0xd32a6401, +0x05bbab6c, +0x2205ebe8, +0x2471d885, +0x90eb7674, +0xa6a805db, +0xeb096770, +0xe1842949, +0x0c6f045d, +0x6de8e801, +0xc191590c, +0xda98c07a, +0xcc86d9e0, +0xe764e9ec, +0xd963466d, +0xadfd6c9c, +0xb3ce3a91, +0xb4b08a4e, +0x6ad4698d, +0x26f1ba75, +0x2820133a, +0xcb144a70, +0x675e52b1, +0x5d788ed8, +0x363ada30, +0xf3e9151f, +0x5612fbe6, +0xf78a3678, +0x3186ac52, +0x9917e8d5, +0xc0823b29, +0x0cb68f3b, +0x7458dcea, +0x05a7ea21, +0xb1b808fe, +0xfa8d2744, +0x03cff955, +0xe6c54482, +0x13732eea, +0x5ba3f8c8, +0x7537dff7, +0x701bcf21, +0x45c2655b, +0x53a08d99, +0x8ae48047, +0xe496abf6, +0x8dedc258, +0x20d5a646, +0xbbfc0bec, +0x96d9b118, +0xb23dc8c1, +0x1eb38568, +0xcf153346, +0xc53ff5e7, +0x8c61d818, +0x0adfb7df, +0x275d1d87, +0x69eb2df3, +0xfef1390c, +0x1cf5e15b, +0xa17c555c, +0xf392881d, +0xe889889a, +0xd76e8fe9, +0xc39cba6b, +0xc8c4f753, +0x272fbf63, +0x841beb67, +0x79e6d267, +0x61d1a208, +0x48e2153b, +0x661d7352, +0x22d00585, +0x91e1cdec, +0xd5d4a2c9, +0xcea22db5, +0x396e7dc6, +0x5a9b30c7, +0x93153930, +0x4a4e7b3c, +0x74357f9f, +0x7988c929, +0x200833ca, +0x60112b50, +0xf2c1b10d, +0x71048650, +0xd88b8d4f, +0x99df6793, +0x5e518d69, +0xdb18c7ca, +0xe28b0f1b, +0x0257a571, +0xaa9a719e, +0xdcec43e3, +0x5f09e791, +0x1f6bf1fe, +0x2aebc8cc, +0x20dcc7fb, +0x169729d1, +0x1b0c7f85, +0xc38dad5c, +0xc5ad6b34, +0x95983bee, +0x3ec2ea4d, +0xeeca1640, +0xe4a81d8b, +0xa3a7f5b5, +0x6b889af4, +0xcce72692, +0x437bb83d, +0xa47c32b6, +0xf1d8ef92, +0x725d0403, +0xfeb9211e, +0x5058076e, +0x885c9a45, +0x79558c1a, +0xc0803c15, +0x495ea137, +0xfe4193f9, +0xddcc4032, +0x90e8dbe8, +0xf47d641c, +0xbf56c3aa, +0x27aedf7d, +0x3e3c8ab1, +0x9c903155, +0x247f8bb0, +0x843ea6fa, +0x4df0053b, +0xc1ac8229, +0x004b418f, +0xa395c9c5, +0x00074ad8, +0xabbee125, +0x7f7fc7b2, +0xe0d99119, +0x34c06720, +0x2631755a, +0x180cd479, +0x7841c337, +0x86bcc602, +0x9ea55d7a, +0x2245d3a4, +0x59b3a62d, +0x96a292b6, +0x92ee510d, +0x45de3b75, +0x449a14ac, +0x5623a05e, +0xdeea0f0f, +0xe7d7550d, +0x034d5228, +0x3c7145c9, +0x58d5bdfc, +0x9568d490, +0x59aa1b0a, +0xbb98a30d, +0x94f3bf33, +0xb03a414b, +0xe944dd15, +0x47be7d4d, +0xd238d5c8, +0xaf6e436a, +0xfadd8095, +0xcf23c698, +0x241acdc6, +0x344c7193, +0xfb86c431, +0x58bb0276, +0x6b74f23d, +0xa5b6c20f, +0x2c3c6189, +0xdebb0ed8, +0xfed0dc3d, +0x987c26d2, +0xc8cfa383, +0x06e8d0b1, +0x074bec2a, +0x6efdb39e, +0x74b978da, +0x979f28e2, +0x2390db65, +0x3ef9c2db, +0xd810d7f7, +0xee50d7ba, +0xf879366e, +0x6f5b64bf, +0x0d84c4f4, +0xb41c1a3b, +0xa18be93a, +0x7cae53e8, +0x2769571e, +0x41155a2e, +0xcc27305f, +0xb69553d3, +0x4df37a77, +0xaa7a5aea, +0xa0a56f8d, +0xaef7ac8a, +0x3e327155, +0xf80e1de9, +0xd987f87b, +0xe3ad0c7b, +0x42b83853, +0xb3601f3d, +0x68ba3691, +0xb9407929, +0xbeaca55e, +0x4d358c68, +0x913b4068, +0x8f9d5882, +0x14d2267d, +0xf2dc421f, +0x0e5aae65, +0xacafeaaf, +0xde9183e2, +0x7cb69cba, +0x21a48489, +0x9eede891, +0xffeb1230, +0x43a3b065, +0x1e132c3e, +0x65332651, +0xdf9fa69e, +0xdb53e515, +0x2a17e7fc, +0x383a11ec, +0x6357c25f, +0xdf4eafaa, +0x1fe4fb89, +0x92bbb077, +0x28c049d1, +0x89d822d8, +0x3ef68fe8, +0xe81c0d79, +0xe1090d19, +0x065b05f4, +0x3ef2c843, +0x8a314406, +0x683820b8, +0xbd72c75a, +0x0a877967, +0x65941840, +0x6b563ec5, +0xcb86955c, +0xcdb5bfb2, +0xf4e61822, +0x662ef57e, +0x2b6117d7, +0xea03dd98, +0x0b294d18, +0x0a915fef, +0x09d81dd0, +0xa1dddaea, +0x7b036e61, +0x6705a0ea, +0x71abe6e9, +0x833ec33b, +0xa1a043ec, +0xab8a3e2e, +0x19e105f8, +0x3a8e9f15, +0xb51e7676, +0xcf712f55, +0x520b0615, +0x2efa4caa, +0x89809e25, +0x9dd59118, +0x839a6f44, +0xc63e9d28, +0x0ebadf08, +0x5433918f, +0xc1ecc27a, +0x8bf9fea4, +0xff364ca7, +0xa88d9e5b, +0x30ffaba5, +0xf63892ef, +0x2bd9ffe6, +0x64a83474, +0x3a4f5219, +0xafb6ead4, +0x268726ac, +0xe94c1e6e, +0x91884d6e, +0x52317e38, +0xcef1cfe5, +0xc4ab1597, +0xc54baf5a, +0xd971181b, +0x1b3ad2e7, +0x6df71058, +0xe124bb82, +0x99616758, +0x9eb56545, +0xe35aa07b, +0x9c07c109, +0x3e8222fd, +0xc7241c29, +0xffd015cf, +0x0913f10a, +0x8ab655e9, +0x8040fa1c, +0x45e6c3a5, +0xb4d58629, +0xec5858b1, +0x091667ec, +0x7ca2e8ec, +0x2e42bb90, +0xdd994194, +0x5073b695, +0x69f66d28, +0x04ce3aea, +0xe40f1432, +0xe173dbb3, +0xc7473587, +0x0d5ad0cd, +0xf51e796e, +0xe6d6e78f, +0xffc00be4, +0xc88c8f25, +0x8c37c610, +0xfa094e22, +0x6f556092, +0x4965a15d, +0x6527fd48, +0x020690b6, +0xfda2eee9, +0xfd7d21a8, +0xf242cf16, +0x19a703f8, +0x84781f3e, +0x4306cfa3, +0x16dd0da4, +0xc338de24, +0x685a5f6f, +0xb61f5cdd, +0x1381861f, +0xfddbce32, +0x2459b50e, +0x0ae5cac2, +0x3d3f04f4, +0xb5030d24, +0x857fc1f8, +0x6602276f, +0x5aaea26e, +0x289f0596, +0xc8512848, +0xa54cfbff, +0x59429e8c, +0x63ae8d3f, +0xede045d2, +0x62d903e2, +0xd76ff2c4, +0x985f8d7c, +0x9c225c83, +0x7a0a42ba, +0xd59763a8, +0x7d3e4df0, +0xcb162c8b, +0xecb1a042, +0x2fc97278, +0x0f943851, +0xe5ed2cb1, +0x0eaa7623, +0x95315620, +0x2b1f6d97, +0xbfa64150, +0x882c96e4, +0xb7ee989c, +0x42b89afa, +0x43474f6e, +0xbeb0aa37, +0x05b99b87, +0x91e60da6, +0x4b9ee817, +0xc2c1447d, +0x3e956000, +0xcb8caf91, +0x6753a340, +0x50a68921, +0x3fab04d6, +0xd40f1572, +0x1a457a78, +0xb12dbc12, +0xfe1ef9b5, +0x4dab91c5, +0x4f541f97, +0x827145c4, +0x5c92bfc3, +0x6fd0acd1, +0x7a2ddaf7, +0xc2461c4e, +0xa6219a30, +0x30847595, +0x7f9d5730, +0x1e800701, +0xe386f69b, +0x7ffff43e, +0x8158898e, +0xa76d2431, +0x8cdf150f, +0xa67c0181, +0x07de843a, +0x0567a8e7, +0x72589f41, +0x395479ac, +0xff5e640a, +0xd8dde499, +0xe45bec02, +0xcb75025b, +0xd5d7b9b6, +0x382bc28d, +0x87c6b8b9, +0xffe10497, +0x48cbd979, +0x8281c212, +0x26a4d249, +0xf916c2cf, +0xec5ab61e, +0x91fc0603, +0x1ec98c55, +0xf4f2367b, +0xbdafcfc3, +0x3d46c30d, +0x90b384e8, +0xea8057c9, +0xc692b1be, +0x98b47b1c, +0x97ac128c, +0x7ebc4735, +0x1c9bb3ca, +0x5881ed4c, +0xf0d96aea, +0x52db1685, +0x4850f9bf, +0x2e6358e1, +0x90e63e5a, +0x8138e719, +0x6dd2f769, +0xcce1b1f2, +0x5abf29a5, +0x1d4d080b, +0xef119c9c, +0x65b1a9c3, +0xa54559ca, +0xd75cdf95, +0xb348dbbf, +0x04def65c, +0x2f0c5639, +0x7ad02029, +0xc0e3ca3e, +0x697b6a3f, +0xb1809843, +0x7fff69f1, +0x2d990687, +0x54760a65, +0x94de7e83, +0x33fcfacc, +0xb316434b, +0xba34c070, +0xf2fe599b, +0x6b59f717, +0x63e87623, +0xc4659f72, +0xfe3a7c82, +0x585eb698, +0x7eb793a5, +0xe966393a, +0x2882662a, +0x0445a7bd, +0xd8fd9fbe, +0xd51d07aa, +0xcf1e005f, +0xc8d6ab35, +0x4fce5458, +0x5badbfb0, +0xbea9aea0, +0x67fb078b, +0xe6f1a8b2, +0xb250b9f3, +0x6a89469e, +0x7849f8a4, +0x11572030, +0x956cc152, +0x55f21d00, +0x3909b80d, +0x040ae17d, +0x882e403d, +0xe853e846, +0x7396fd3a, +0xd891ad07, +0x773c8a84, +0x7d1632d9, +0x495cbaac, +0x05a32841, +0x85d722f0, +0x0c5e94a4, +0x010f30bd, +0x942a07ce, +0xd9b9e130, +0x9f91fb9a, +0xdd3a8aeb, +0x9d098dc3, +0x0663a0b8, +0x0b77e3d1, +0x8246afe6, +0x2303fb6a, +0xec97b4e6, +0xc2d4a583, +0x02bc236f, +0xd170b54c, +0xdeb0a34c, +0xbe646145, +0x37fcb95f, +0x62c5a425, +0xb4cb3ee1, +0xdd0ba7bd, +0x7ee0fe05, +0xe8e05881, +0xf37e9c71, +0xc1a7f42e, +0x6ca8a52b, +0x21fe73ca, +0xf4940a13, +0x36c98c4b, +0xbd2233b6, +0xe2343473, +0xa4cd3586, +0x4764d4d7, +0x4c35bfb5, +0x7e8d245f, +0xaa805d0a, +0x6c6e237a, +0xb06d4324, +0x7efc950c, +0xc8bc33f7, +0xc0355665, +0x2cd26299, +0xd527a5ea, +0x43e77cce, +0x40e1ca98, +0x2de15600, +0x9aae195f, +0xa747c6ab, +0x7f414496, +0x4dd0e74c, +0xe35cd5ba, +0xe69ec420, +0x00b70a5b, +0xa25f7595, +0xbf232d16, +0x51ea2624, +0x35a33122, +0x4acac499, +0x2d6a1842, +0xfc0568b3, +0xabd57b39, +0x4ba64db8, +0x7c64409e, +0x7b744b40, +0x277e9df8, +0xf6da8e54, +0x5ea21a77, +0xa36fcef9, +0xd651a44e, +0x5bf90955, +0x18593a59, +0xfa3af7a0, +0xdb7df72f, +0xd97e3dcb, +0x21d9d5e1, +0x25a3252c, +0x11531e56, +0x22385a56, +0x24dfe7f2, +0x0287db2d, +0x226b4b61, +0x5342bb09, +0x616b81a8, +0xfdec0dcf, +0x2a041098, +0x75d62f7a, +0x98f6db3e, +0x938e976c, +0x47b441d1, +0x61f76cae, +0x2cf78e83, +0x2271dadd, +0xb3e2e53f, +0x11b8f95d, +0xfbd4c9a5, +0xbce18b89, +0xbebf40f5, +0xff52373f, +0x10bab61c, +0x0e13815d, +0xd81e7691, +0xb51d4ec7, +0x8c136b50, +0xbdc197da, +0xd7c9efaa, +0x9f19a9ae, +0x9b1988c4, +0x34f84a1b, +0xf95a0602, +0x36fc3ac0, +0x12e01cbf, +0x1777ed40, +0x1fba366e, +0xf8df0446, +0x7612ac9f, +0x9fc83c9f, +0x2f7fe4fa, +0x9764f341, +0x3d9ac611, +0x71daada1, +0x6719dc7e, +0x8119bca0, +0xc7d2910d, +0x876f5b85, +0x9f52c15e, +0x98dad6f9, +0x8e98f383, +0x6a1af917, +0xf7f2abcf, +0xa45ec7ea, +0xc23b26bc, +0xdf54e43b, +0x62ae6668, +0x4aa9da07, +0x457fa4b0, +0xe046b599, +0x440a346a, +0x4fee8bad, +0xb4ab9802, +0x94a137c9, +0x4e726164, +0x3d4de740, +0x92f82ec2, +0xe3894236, +0xc05ce88d, +0xa059c7f2, +0x2cb06ed0, +0x10a2ce11, +0x52cf5fa1, +0xd3e907a3, +0x6d1df7c9, +0x38420d85, +0x9dc38808, +0x633aaff6, +0x5759a73d, +0xa9c9cd11, +0xeabff5a3, +0x7220ec96, +0xf3fe5d6a, +0x1b5106c8, +0x7d94fff1, +0xf823a4db, +0x1ddd6864, +0x9adebf17, +0xf0169ed1, +0x87f5a70a, +0xe74a410d, +0xc224fcd1, +0x0705929c, +0x1f3a6b59, +0x10d3869c, +0xb6c3eda3, +0x83a22915, +0x6f0fe775, +0x9b460d26, +0x1b0d0bdf, +0x348d32e0, +0x20ccfc9a, +0x0f811745, +0x75476658, +0xdb7998ab, +0xb4854971, +0x5b1a6008, +0x9114b5b3, +0x73bb4913, +0x143719ac, +0x63e5028f, +0x9e952eac, +0x9f44129e, +0xa9cfd0c0, +0x5b450300, +0x1698cc85, +0xaf1fd789, +0x1ef1c675, +0x97fb38d5, +0x431c0646, +0xe98718e9, +0x769b55e1, +0x70e653ec, +0x84de993d, +0x75d97a9e, +0xacdbb95f, +0xf81b1829, +0xfe4d8b87, +0x56681801, +0x7ce1b5e9, +0xf3b62e5d, +0x0126b96f, +0x953d2f68, +0x8e16c8da, +0xaa6f9469, +0xe9709277, +0x6145d646, +0xfec49cde, +0x19096046, +0x0ec2cb6f, +0x6453d533, +0xff06911d, +0xc4d028dd, +0xf9c1ae65, +0xc01ad62f, +0xe42922a6, +0x6aa53a14, +0xf38d0960, +0xbd1fd828, +0x4dc170b6, +0xbe6f1f77, +0xf835fd9f, +0xd349251c, +0x2ba6ee30, +0x342bd9f5, +0xa5f94117, +0x310503e7, +0x8eb8f591, +0x8afc42fc, +0x367ee176, +0x4aeacef5, +0x205b3bfd, +0x39cc3b5d, +0xfb0ef2d4, +0x507256fd, +0x6c7dd4f7, +0x4c95fbb4, +0xfeb3b4dc, +0x89af5670, +0x2755a88e, +0x7b6ea2a2, +0xac99ef83, +0xd37372cb, +0xb940d7d0, +0x31f48e8f, +0xed5ed5ba, +0x49f1befb, +0xbabe7a21, +0x3b0b3f5a, +0xda6509a5, +0xc5a020ab, +0x731ac48b, +0xa916ab96, +0x2b30d9e2, +0xd326376b, +0x51ad391e, +0x1a032530, +0x1aa33b01, +0x8ff08cae, +0xe0457ff0, +0xb9295ae9, +0x2eb09bb2, +0xf6c05aa7, +0x398995e1, +0xfc1ede8f, +0x710824d6, +0x3d64fbbf, +0x867e20bd, +0xe54fa8c2, +0x3c530d40, +0xc79e1bbe, +0x1b1c7df2, +0x6aa1a27f, +0xb394365b, +0xf4abd7a4, +0x377cbe87, +0x91b747b9, +0xcbc27098, +0xa177263f, +0xd8e2a233, +0xd9ffcac2, +0x9b0cd7e7, +0x4a79e005, +0x7ea40f25, +0x949f12cd, +0x304b059c, +0xc93757d7, +0x59b324bd, +0xd70678b6, +0xf75109d5, +0xe22ed3fe, +0xf43cb775, +0xfc9c73ad, +0x4612e14e, +0x4d630048, +0x465d6d66, +0x3459e31a, +0x8ebd80a3, +0xa003663e, +0xe594a509, +0x6f5df5e7, +0x3c98c6f2, +0x664f35d2, +0x3c0be6fd, +0xa29affea, +0x38de5c2e, +0x6c6397c6, +0xd515d87b, +0xc863711d, +0x9ef7d614, +0xf2b15eae, +0xd689625f, +0x513fd17a, +0x2cafa190, +0xc62ddeaa, +0xa1c788f5, +0x996ac338, +0xc89152ef, +0x1523fe3c, +0x76aa3099, +0xe96cc289, +0x251da08d, +0x7fcbf3ff, +0x6b52e657, +0x00cde1ea, +0x1d39b6f4, +0x31b17b72, +0x0b7b9821, +0x76d1e337, +0x0249674a, +0x36b3dff0, +0x0334bc3d, +0x840ac721, +0x94e0f914, +0x0e57e079, +0x510a1b0e, +0x04eca166, +0x967e04ca, +0xb2bef408, +0xc5d613b6, +0x5e347faa, +0x5c2f0113, +0x5b7aba2e, +0x499d5068, +0xee294c88, +0x63c52978, +0xd294d2b5, +0x3cbbadaf, +0x430e6b4e, +0xd1ca6439, +0x585bbb0e, +0x0ba2de88, +0x83f865a8, +0x36ceb13e, +0x0d9d06ca, +0x84a66d1a, +0x8918ce06, +0x90a92b4d, +0x2235015e, +0xde3bf18f, +0xc03f1873, +0x5dca095b, +0xf0438ee0, +0x4884f5d1, +0xd2791e8a, +0x279999f0, +0x4126c1d2, +0x099881aa, +0x833e77cf, +0x19cf673d, +0xf2292c5c, +0xba4d5272, +0x00d3a5a4, +0x840b5e2a, +0xff58ca9e, +0x5009a345, +0x1921ba19, +0x7532150f, +0x7c5778b7, +0x96d84f56, +0xb8ca1f17, +0x0c8e92d6, +0x83d42481, +0x783cafa1, +0x94b89a1a, +0x87ecf6a8, +0xe04e34c3, +0x8beecbe9, +0x3a999076, +0x8ad5c018, +0xa2936faa, +0xfa3534f3, +0x9129fbf2, +0xfd1a1147, +0x02c62e31, +0xa85239b2, +0x261dddf2, +0x533d219f, +0xd3caf36b, +0x8e91d08a, +0x94a996e2, +0x8425f870, +0x0e856f6f, +0xc490867e, +0xd86c57aa, +0x82f9c744, +0x8949ada5, +0xe26bf97e, +0x185ec2be, +0x0cfda49c, +0xbda70a1b, +0x13944918, +0x6c926efb, +0xbba67b46, +0xbcfc772d, +0x02acece5, +0x6bec1fcb, +0x291879ca, +0x2db8f282, +0x9b6d5ecf, +0x0b20ac6b, +0x4252d98d, +0xd71789d2, +0x51127cfd, +0x9b3f8291, +0x9dbcc96e, +0x0141ca7c, +0xab51f0ec, +0xa54e41cd, +0x9788cdfa, +0x63d950c3, +0xce99333a, +0xce975ecd, +0x0224e7cf, +0x26daea74, +0xec3d98c9, +0x0ef0eeb3, +0x7baad847, +0x571820cd, +0x91c0b8c0, +0x316cda03, +0x2ec9dc90, +0x0ef781ef, +0xc541431b, +0x97ac85fd, +0x388993cf, +0xbaff18ea, +0x09d47a1b, +0x27529cb0, +0xf3b2fbff, +0x415744c9, +0xbf81a591, +0xc84b8ced, +0xfb3bcb4a, +0xd954debe, +0x3b1b769a, +0xc98305b5, +0x44a382ca, +0x4714f49e, +0x9d2d7c36, +0x92a16c3c, +0x36e240f5, +0x19a0bf17, +0x0b74f3e7, +0x3c750367, +0x1b4ee12a, +0xfd2d6c30, +0x21939060, +0x20cc5f21, +0xc9c90c04, +0x76ae9209, +0xd8a35956, +0x0ec9da33, +0x848b974a, +0x2ad9e16e, +0x3955994c, +0x9097ca4f, +0x731c8341, +0x1535fcc1, +0x19f981cf, +0xe8640088, +0xf6818f1a, +0x74540013, +0xac650f86, +0x20fb6237, +0xa89a44db, +0x69704b30, +0x89e6cefb, +0x2a6b7f80, +0x440e5c5b, +0xe4dc8276, +0x265c0bab, +0xd7d70b20, +0x05f9494e, +0x98e34f95, +0xc7626248, +0x23318168, +0x33c8d49f, +0x7f5bde09, +0xda30297d, +0x4eb26648, +0x3a4f9112, +0x5fa2ae14, +0x339b2e13, +0x8e2c4618, +0xce0baeac, +0x3160626e, +0x08248e66, +0xc850646b, +0xd1185ccb, +0x2ccf6215, +0x7926a38f, +0xe058b0fc, +0xbd604cd5, +0x49566b8c, +0xcdbe73f8, +0xcfa31b15, +0xd5039c1a, +0xaa67e547, +0xb5772322, +0x4bb004ab, +0x3b7c255a, +0x10bbd123, +0x404ac1b8, +0x6522b62d, +0xebb11507, +0x31963b75, +0x102d6705, +0xc80f48a3, +0x29398e72, +0xfede339e, +0x6c0a5aa4, +0x00e45a6c, +0x700bbb19, +0x5bdb6ea1, +0xb3e826eb, +0x699f6c68, +0xb2627780, +0xb7966015, +0x4727e957, +0x0bcde0eb, +0x605581eb, +0x95fe0398, +0x1c2805cc, +0x88cf14da, +0xa64d127c, +0x7b2178d1, +0xe28246c8, +0x2332e93c, +0xb5534b62, +0x059507f6, +0x340f54cc, +0x6bf91701, +0x270d01c3, +0x330f8376, +0xc3a20b0d, +0xbc40a988, +0xb21562f0, +0x6ec496a8, +0xcb5fc6e5, +0xfd636da3, +0x471982e8, +0x70bed202, +0x883d9c91, +0x3e130db6, +0x683232b3, +0xa772e0d9, +0xa12d4ee7, +0xe53ec655, +0xf6f85e58, +0x8006000f, +0x8d0b3b82, +0xba1f8bcf, +0x5fb2e5ca, +0x3f47d4a5, +0x5aa5bb3e, +0x35b2d88b, +0x4b8b8e57, +0x61c1f768, +0x5664ca37, +0xe16799f6, +0x2c414bd6, +0x6be20965, +0x53b1485c, +0xe65c4271, +0xa75f076e, +0xaec9a0f8, +0x91f4b957, +0x1c7d03f9, +0x7c8d252b, +0x7a0b7be8, +0x6ec21677, +0xf8eb0167, +0x3ec39599, +0xb1d7936f, +0xe0c01456, +0x945b4b2f, +0x3d2f247e, +0x62d978ae, +0xb30411f7, +0xa9022c8f, +0xd4c5ce7a, +0x0abfc661, +0xca82b4ca, +0x2f0fb386, +0x6b8a482c, +0x537d1934, +0xa8bbead6, +0xa9e52a13, +0x2fa392c8, +0x0c6aee88, +0xda2cf9dd, +0x9325a753, +0xeb30e164, +0x4c58b0bb, +0xad08482c, +0x7c393452, +0x0d24500b, +0xb7988d72, +0x2d53adf1, +0x2dbb834b, +0x38e719e2, +0x2be30c6e, +0xc0e5bd93, +0xf3bea0ff, +0xb355be28, +0x84447443, +0xb7bf0e5c, +0x4a31e8ec, +0x5bc65760, +0x9d1910c6, +0xb9d1f849, +0x0e77f2eb, +0xf74acad7, +0x4eec74a7, +0x3a7d5f1e, +0xee470381, +0xc21f6ea6, +0xe088679e, +0xc16cbd19, +0x03f32393, +0x10354984, +0x1b5a4a50, +0x6a3d5acb, +0x15561ebb, +0xe413c299, +0xed2584f8, +0x66ae1ab0, +0x0235282e, +0x86f888f8, +0xb8272009, +0x614a12b1, +0x0e0037f0, +0x21c91f77, +0x28a434db, +0x5fa5a7b1, +0x2ed3c802, +0x32ed7099, +0x7447cb50, +0x8f48e92c, +0xf0aa04a3, +0xc59e495c, +0xbab03690, +0x0053107c, +0x06aaf537, +0x6e5ddb3b, +0x8056b346, +0xf1dc2a94, +0x86508eed, +0xdefbba27, +0x37917ce1, +0x1eb0df92, +0x917ca686, +0x2b82434d, +0x174f3b4f, +0xcb1724cf, +0xb4288c8f, +0x45b1ed91, +0x07e02efb, +0xec095822, +0xd914e008, +0x7a1c1522, +0xf3c98aae, +0xa02c4984, +0xe7aaa3d9, +0xab4dcac8, +0x11d5fe95, +0xb2eaebd3, +0x38d989fb, +0xc74d7133, +0x1d2a60e6, +0xa70495fe, +0x4b6e3747, +0xff8b618a, +0x1fead83d, +0x0549b849, +0x405c2837, +0xaee82cb8, +0xd3c67217, +0x0126f245, +0x8255d044, +0x53423e39, +0xe9c8d0ed, +0xb55214d7, +0x8a669432, +0x22a487e4, +0x9bff94a2, +0xf5330088, +0x5b3e0403, +0xde1b4142, +0xacb26bcb, +0xd7ae44ac, +0x7aef0d38, +0x96e28eac, +0x4008622e, +0x70d5775c, +0x3013e4ef, +0x2b0db67f, +0x2ff97737, +0x5476fa2c, +0x0162e1b0, +0x47d12899, +0xb389152c, +0x1c6663da, +0x4dd08244, +0x1a2048bf, +0xbf5d010c, +0x95a42e7d, +0xc3e6f0f5, +0x5b571539, +0x2d1fd468, +0xe548261b, +0x833381ce, +0xd9c30d51, +0xd3a5f741, +0xcf182f02, +0x43936b5f, +0x8d715b9e, +0x2ebd90a1, +0x54c34ad1, +0xd1cd5be4, +0x62fb1626, +0x98028187, +0x6a9ff20c, +0x6a6eff5e, +0x974b4431, +0xd4fe791f, +0xf6281792, +0x2408f7d5, +0xb9df6f62, +0xf0510153, +0xafc80965, +0xebeb8678, +0xb708f891, +0x686b7bbf, +0xc439914e, +0x2ba3166c, +0xe83fe6de, +0x0c7c02cb, +0x7492e620, +0xea59a24c, +0x2b7f5804, +0x91dd7991, +0x8dee2683, +0x03161736, +0xfb2165a5, +0xc3457a5e, +0x94dfa5ba, +0xc9569800, +0xc3ca019a, +0x6b32224a, +0x3a13397d, +0xeaa586e4, +0x84361907, +0x4b24408c, +0x5ebb299f, +0xb7cfbdb1, +0x38f19716, +0xed91007b, +0xe8074e1d, +0xa5b68b1e, +0x87609834, +0x77f8efe4, +0x60538d14, +0xb960e96f, +0x84241fd3, +0x9bfa7ecd, +0x5b31987a, +0xd7ad0cc1, +0x724cbe1c, +0xc845dc6b, +0x7c2d164a, +0xee4ea983, +0xf04d3fa8, +0x68eb5aaa, +0x49056373, +0xb1be0b08, +0x836a1d94, +0x0b74d024, +0x921ae307, +0x0e8e0e8e, +0x4c416b52, +0x39b9c65f, +0x7500ea06, +0x5f9a93bc, +0x920fdaae, +0x2b97b694, +0xf1a87956, +0xbddd0364, +0xf9c017be, +0x0a2655a6, +0x23b684ee, +0x85bfa568, +0x93efd1d5, +0xc67fbca7, +0x05471d17, +0xde1d50a2, +0xd195a600, +0x25a43626, +0x1f96f894, +0x994624ba, +0x26dbd453, +0x4b028b36, +0x1f44909c, +0x07f68078, +0xf5344cbc, +0x4ae1fb11, +0x36edb526, +0xbac68abf, +0x23537d57, +0xc1b81afd, +0x4c36cde9, +0x6439a9e2, +0x2ab8861c, +0x544aa95b, +0x461b79f6, +0x89ed90ae, +0x7a46dbb0, +0x9567a4b0, +0x6198ae9c, +0x558772a0, +0xcd79d5c0, +0xf3e2143c, +0x423cb048, +0xb8e26417, +0x0c1ec9ac, +0x65e3de24, +0x0f8146a9, +0x6cba0d52, +0xcfe77112, +0x8c2f0482, +0x7e157435, +0xbd691353, +0x1ea89281, +0x4269da06, +0xeaad8f15, +0x67d2b8f9, +0x296baf55, +0x118295a6, +0x68294c57, +0x92ea5388, +0xdea20b43, +0x72fbd725, +0x7e35f2e9, +0x755c819e, +0xe0febb91, +0xfb86ab6c, +0x07017edf, +0xb2bb78f7, +0x74ffc742, +0x1bed0ea5, +0x72100123, +0xfc00f73f, +0x347689bd, +0x8839279f, +0xb7c8827a, +0x0a5b332e, +0x4ea494d6, +0x0dc1f4d9, +0xbf2698b6, +0x476c58a1, +0xa7eb4a94, +0x571d8e95, +0xae026bb5, +0x7ebb053b, +0x68052224, +0x26645f0b, +0x7a040760, +0x262c5708, +0x0c1af393, +0xdc901ecf, +0xd70048b2, +0xd08c3960, +0xa08be73b, +0xabcda648, +0x38149ce9, +0x4ceb22d6, +0xa0b24a3e, +0xd6f3cb59, +0xcdd9a506, +0x778dbee9, +0xa19d8154, +0x4ced8861, +0xaeab36e4, +0xdc2bbe0e, +0x4345db5f, +0x50011dea, +0x56a6d84c, +0xfffb04f2, +0x5c30ed1f, +0xa3ef40e0, +0x886d4132, +0x73a35014, +0xc90cb49c, +0xfcb08e80, +0x0a13b845, +0xcf1a8d50, +0xdb2e9889, +0x79a15d9d, +0x77dea82a, +0xb9544053, +0x6421b2cb, +0xabd296df, +0x833387af, +0xe1e59be3, +0xca828d70, +0x06f1bd00, +0x3f9fe24f, +0xe2fd7f9f, +0x29e9327f, +0xc2e6bfbe, +0xe2548177, +0x6954f210, +0xff29cc39, +0xae9c0306, +0xd9cb20a0, +0xb6974bf6, +0xe6ffdfda, +0xd7ff4914, +0xd9f98888, +0x76430f3d, +0xd1c94ae5, +0xc1469ac5, +0x982601d0, +0x153dca92, +0xe48fc164, +0x99f65dac, +0xd253c02b, +0x71f14047, +0x2c410b1d, +0xa64c5b8b, +0xcec51c43, +0xa55e584b, +0x1ff53c3a, +0xd90da98a, +0xa8657b14, +0xcdc1a2e6, +0xb4de3b8c, +0xd9b65e30, +0x6f423f4e, +0x6ed6089d, +0xfaa73706, +0x9257cff3, +0xe0686741, +0xa62d50ab, +0xe7a9cf26, +0x31a2b2db, +0x54576525, +0xde400466, +0xaa52e0a8, +0x259a34de, +0x6d551674, +0x4ae5df6f, +0x8f3ad793, +0x731317d1, +0xb9f2cebc, +0x06565eb7, +0x64880fbe, +0x62eebc7b, +0x607424f7, +0x6f292d53, +0x2079fd8a, +0x85f422e8, +0xbadb116e, +0x5bdedc63, +0xd03ab303, +0x4f445339, +0xa52d1f66, +0x34e006be, +0x328c59b6, +0xdeecab8e, +0x96893b94, +0xb706f249, +0x9e1263fa, +0xddd1c8f9, +0x23c6877d, +0xfe93a6eb, +0xc668b1e2, +0x4f38e33b, +0xc574b10d, +0x405b46e0, +0x1314fa5f, +0x2b6eb4d9, +0x08c86d95, +0xdd79f38d, +0x9201eed4, +0xd97d4a59, +0x13ba2d8d, +0xd8c95bb5, +0xe075bbe4, +0xc5bf2749, +0x8028b84a, +0x84f4e1e9, +0xda348de8, +0x8cc454ad, +0x56dfb5b7, +0xa1241e07, +0xdbf0ecc4, +0xc3ef1137, +0xba329884, +0xe3b58035, +0x983c9f28, +0x5a828876, +0xcc2ce72a, +0x227728ef, +0x652b07ce, +0x44c0aa2c, +0x085496fc, +0x7c1fb161, +0xe7ca7de8, +0x3565e4d7, +0x5a4c52e1, +0x311a4eb6, +0x84c0d2dd, +0xb83b7e5d, +0x2a5d582a, +0x039b4050, +0x770e2bab, +0xdbf47fca, +0x1765665c, +0xa8c8a487, +0xffc14aa3, +0x03ca326d, +0x89f7ea8b, +0x637bdd4d, +0xe3268054, +0xf32b972e, +0xc1454043, +0xd26adc2f, +0xfbd6b1f4, +0x2a72d682, +0xd20cbca2, +0x1ff23298, +0x5be454a5, +0x3945851f, +0x6fe5584a, +0xb6cc2da4, +0xcbf8c903, +0x138e3be5, +0xc0e81512, +0x0a2a3bf2, +0xda3ec1ca, +0xdbb476f7, +0xdb66251f, +0x1704fdb1, +0x11d49d06, +0xa4eb891a, +0xc65ceeb0, +0xbcc990ac, +0xd569068a, +0xe82bab37, +0x3f30b02b, +0x0238e33e, +0x0ef93863, +0x5383e306, +0x0504640c, +0xb9e25ae9, +0xa6d24e07, +0x86d92f87, +0xed880998, +0x3bc13d33, +0xd9f9307c, +0x569f9567, +0x4ba13d17, +0xe32a335a, +0x01712b5c, +0xae65fda7, +0xeb53ea73, +0x62815f27, +0xc2bb03cb, +0x8a0d2f41, +0x22a5058c, +0xe4f9ad2f, +0x96003b9a, +0xe5c68b65, +0xdd499ddc, +0x0566ce4e, +0x091390d0, +0x1124256e, +0xa4d5952d, +0xcf2f0f27, +0x89de3156, +0x814c2a67, +0x4f4b433f, +0xd92dc3f6, +0xc927a01f, +0x51b72d5d, +0xcc9bea8a, +0x42b162da, +0x6812a43c, +0xeebddb34, +0x315c9028, +0x8796b351, +0x29e21f09, +0x4e0b045c, +0x7f560d51, +0x4bd2c2e9, +0xeda0a315, +0x786a2a0f, +0xe7f2aa33, +0x420defc9, +0x8ef6482a, +0x2afcfef6, +0x3473ea2e, +0xbefb3af9, +0x3a8e4937, +0xfe7ad794, +0x1606cb1b, +0x466fb249, +0x1dd0aa0f, +0x475ef743, +0xc1e274d8, +0xa8e330c8, +0x44318512, +0x01961401, +0x3c62fadf, +0xccc805bf, +0x2e985360, +0xe3e773a2, +0xf3b151d1, +0xd4d5cdcc, +0x71be7481, +0x5f9d9d51, +0x704dfe3e, +0xe035b1c6, +0x612d4267, +0x3bf772a7, +0x68ebb936, +0x255b90ac, +0x7c8c943b, +0xb4e0199b, +0xe5a7b3ce, +0xf0d4b79e, +0xced08778, +0x14ef4edb, +0xed1a4f8f, +0xf540217d, +0x27e08243, +0x84828c05, +0xef0a6af4, +0x4d3a1066, +0x8fa660cb, +0xc45bb667, +0x3494c4f7, +0x3d502c9e, +0x43869933, +0xf9da4ac0, +0x536eff15, +0xec5d8786, +0xc03c9e98, +0xd9e31ec1, +0xa3da71e1, +0xd5f7451b, +0xe9b3d4f9, +0x4533947d, +0xfeff817e, +0x78d79097, +0xaade6b53, +0xfe72f314, +0xe3e23f03, +0xbb6eb40f, +0xf91f10c8, +0x7472a5f7, +0x27315105, +0x2dbb7dc6, +0xf082d246, +0x97b151f9, +0x647d7d99, +0x907a45cb, +0x6707b657, +0x403ed799, +0xa4007ac0, +0x075fc595, +0x825c621b, +0x23db6a64, +0xe1d1d2a4, +0x26de6fbc, +0x0aee232d, +0x2c378a09, +0xab7d0efb, +0x1d957e1b, +0xb2e407d8, +0xdc5746cf, +0xa4f70901, +0xdc2c0314, +0xe0e2d6f4, +0x5aefb30a, +0x7a5dfb96, +0x74b14b26, +0xa3c77f2e, +0x8b68b3f0, +0x6e978d52, +0xd9345143, +0x150c3085, +0x532d0412, +0x9ef98e24, +0xb4b595d8, +0x54c6d5ee, +0x44457b00, +0x98fe0dcf, +0xd436c033, +0xdb9f1d21, +0x330abf87, +0x4a3d5fa1, +0x07eae590, +0x09a17d9a, +0xfb1c9390, +0xb89679e7, +0xda3ab713, +0xf0db56ce, +0x2594ba9a, +0x4abc817c, +0xf29d16e1, +0xeb147943, +0x4074709a, +0x4376a0db, +0x3b2973c2, +0x82a61489, +0x222ccb07, +0x547426f3, +0xa6076340, +0x088be425, +0xb5d528e4, +0xda5ed6d5, +0x1f324a48, +0xb53fa149, +0x940399fc, +0x87d838ce, +0x8a0a08e6, +0xd60a5688, +0x39b93a7e, +0xaa6fa6f0, +0xc80810f2, +0xf3a95c95, +0xc6cc01fc, +0xc7d23e3f, +0x0a241ce3, +0x35b8d0f8, +0x4397a3bc, +0x55a0dde2, +0x58ec174c, +0x4a098ec4, +0x58f7e449, +0xd359a77d, +0xec8f6604, +0xf3cc0965, +0xe45ddbef, +0x6b1f1b7e, +0x95dfabac, +0x7367f247, +0xf440f919, +0x3f62adf7, +0x979106c1, +0x8961ceea, +0x74336cd9, +0x75337ede, +0x49f9b8f0, +0x6135076c, +0xaf0bd9b9, +0x51798ec9, +0x222d78b9, +0x2eb9eddc, +0x922eabd8, +0x8155b261, +0x08cd7a2c, +0x3d4815b3, +0xc584c19a, +0x5f8bea5d, +0x9264ea5a, +0x516a189e, +0x39e5f276, +0x4b80c5b2, +0x883a194a, +0xb4a8f4d6, +0x01701e1d, +0xb593b7d5, +0x4e3268ab, +0x91580321, +0x24107cfe, +0x67891423, +0xd1c8b9b9, +0x4e334985, +0xe38ae2bc, +0x7724fb48, +0x714490cc, +0x9817446a, +0x2de6c8bc, +0xbdb7509c, +0x446a6de6, +0x2aba6ab1, +0x99b047ea, +0x2a7ec50b, +0xbecbbb7e, +0xbd15f548, +0xd4f6121f, +0x54de5b45, +0x7e162395, +0x6b50ba4b, +0x08d576e4, +0xf89a5d53, +0x4b586262, +0x07c0b432, +0xa55252cd, +0xfe1b75d2, +0x2a8ae754, +0x0b4c0dfe, +0x0e786b02, +0x36760261, +0xd10a3d36, +0xa7041bfe, +0xcf54656d, +0x1bcc59e5, +0xf2da75b7, +0xd7c35b86, +0x78e41366, +0x9d2f1f0b, +0x6c94633a, +0x6ee32bd0, +0x5dadc864, +0xd336df40, +0xca628ff9, +0x212e7f68, +0xb6228a7c, +0xaa160b24, +0xe11fea6f, +0x5a89c976, +0x95e86fa3, +0x8a16b70c, +0x2627185c, +0x3e3d0580, +0xeb4dcbc9, +0xaff30332, +0x0abefd24, +0x5926c0e6, +0x67753293, +0x50d74e04, +0x27094d38, +0x15fa1cc7, +0x5567929f, +0xa2783526, +0xec4118dd, +0x34b79259, +0xa5c358e3, +0x9b8dbf08, +0x63c86722, +0x4ebcf46b, +0x09a465eb, +0x36a65bf9, +0x0270c33c, +0xe7ada503, +0x689739f1, +0xd5d36d95, +0x4fc5132e, +0x755cbd1d, +0x246964d9, +0x89d1aa75, +0xb918b69d, +0xcc98d388, +0xdf572581, +0x3247a121, +0xe2b61405, +0x1766a199, +0x281bbd79, +0xce94fa86, +0x1221769e, +0x40d59942, +0xe4520501, +0x15c1334c, +0x07ae8289, +0x9e42e1ca, +0xbdc5cc52, +0x7ece61c3, +0xacd38794, +0xb675cc6e, +0x380bb7da, +0x8a6cb8b4, +0xb48f5d19, +0xa060ce8d, +0xc57047b7, +0x91b6dba5, +0x8178f761, +0x9257308c, +0xe33f8d96, +0x8754e395, +0x0eef7f97, +0xb94209c4, +0xbfdd24fa, +0x3b6f425e, +0x8ff82870, +0xc203495b, +0x6ff42fc4, +0xbac0822e, +0xc833f23e, +0xb9651404, +0xfd9e11e2, +0xffd65561, +0x98c17f74, +0x5440a5ba, +0xcd2554be, +0xd1ea0217, +0x1a747e56, +0xe3695c78, +0xfabd89b9, +0x3b043c34, +0x366b7485, +0x2def272b, +0xc9d71823, +0xc9685da3, +0xbad7b1fe, +0x56571823, +0x3b091434, +0xf414458e, +0x1df0a007, +0x3fbe5554, +0x4ad4954e, +0xa0258abb, +0x0ec655f2, +0x8b7f7087, +0x843de537, +0xb0f0bd34, +0x831ef530, +0x5b198fac, +0x15463c41, +0xc9851741, +0x296244e1, +0x38dd36fa, +0xa8258224, +0x7941fb25, +0x9d253356, +0x61b70b90, +0xfe0bb739, +0x39c084c7, +0x87a5211a, +0xb7363b5a, +0xb3655d61, +0x71b16c80, +0x69d30aff, +0x03352fbb, +0x9ca0bc45, +0x975d52e3, +0x9006c102, +0x1b52d0dc, +0xdf978397, +0x5f021238, +0xc251c7ce, +0xa3e5b82a, +0x55c55696, +0x1083fe7c, +0x72d17ba4, +0x13d66447, +0xf5493e8d, +0xbd83977f, +0xdabeb9b4, +0x78d680e8, +0xde52043d, +0x67f9412f, +0x527def8e, +0xf0953c74, +0x3403861d, +0x6c23bc9d, +0xb1480d4d, +0x46086e4a, +0xc4067486, +0x6a614ce3, +0xa0a1100e, +0x94911b55, +0xec616e37, +0x5192a971, +0x1c251d22, +0x68b7e124, +0x26838833, +0xe3533127, +0x75238310, +0x8a8f7e19, +0xbfbb2943, +0xf44f79f7, +0x061ee820, +0xd9055a4e, +0x70bacd51, +0xfb471cef, +0x4cc9c3b2, +0x9a094aeb, +0x2713732f, +0xbc91f67e, +0xd3f3b671, +0x2ec3b552, +0x82a3d884, +0xd04c90d8, +0x37c52dae, +0xb5c82f7c, +0xb94fd758, +0x2af213b9, +0x7fefb388, +0xf9de59de, +0xa1b688f7, +0x8711eee2, +0xbf16bc83, +0x1cf03c16, +0x0f472c8d, +0xb6c366f5, +0x880c438e, +0xdd4b97d7, +0xe6a9f7e4, +0xb572add0, +0x4ed21ba1, +0xfafab2b6, +0x72bbd75d, +0x4d17cf49, +0xca7becd7, +0x85851de2, +0xd47566ce, +0xa280dfd4, +0xaf2c6ffe, +0xb1db47ff, +0xd59fbcc5, +0x4252c51c, +0xcf5b122f, +0xa65db112, +0xe2f40d53, +0x43a92110, +0xabbd158e, +0xabab264b, +0x7cf33e9d, +0xbba09fbd, +0xdc87d7da, +0x42012ab5, +0x97a11bac, +0x891dc8dd, +0xda3634c0, +0x71db4b4f, +0x979e85d3, +0xe60ad54a, +0x2296365f, +0x9298f5ab, +0x7c66cb79, +0x37a8f1da, +0xea210995, +0xaba6d18f, +0x65c3c9ef, +0xa73a40ba, +0x23ae59af, +0x15f7545e, +0x78fe8adb, +0xbe1e56de, +0x907863b1, +0x3f0ea7cd, +0xbb9d0daf, +0xef2935bf, +0xfed94481, +0x173f8eec, +0x0662f9fc, +0x4692ec23, +0x7ab24bbc, +0x5113f3d9, +0xcdc32646, +0x843b315f, +0x3759e1c5, +0x8bff9a4c, +0xe8d78cc9, +0xfa57c2c5, +0x0a7a8dc1, +0x81d87391, +0x165c5abb, +0x1b298dba, +0x44de5b28, +0xbfff70e8, +0x3b685fe9, +0x6ddfc280, +0xa5c74b1e, +0xf5081efa, +0x8960b9c3, +0xf3b4ce49, +0x03ca3a62, +0xb7de3c97, +0x4c3d1d6b, +0xaa87525d, +0x861f9bf6, +0x1ce9cbab, +0xbe27ae45, +0x346018cc, +0x980c2834, +0x9ac9acca, +0x0222deca, +0x2412fd82, +0x16657cb6, +0xb36ad971, +0xf7b8a494, +0x2b7005d3, +0x59f62696, +0x16532f19, +0x174e5976, +0x9a7a633a, +0x2a52693d, +0x15cacb71, +0xb28ef775, +0xd04e90ae, +0x86be03fc, +0xa34496ec, +0x0e65e3be, +0xbb70ba96, +0xbe217b91, +0x25a1ee9b, +0x880ccc85, +0x1cd1496f, +0xa9c57246, +0x198f72e7, +0xb19c3820, +0x645eeead, +0xd5a9257a, +0xbdc97ec9, +0x1dafafa1, +0xd37ec01a, +0xeaa4fbca, +0xf1b2c452, +0xcfe27a8f, +0x8b48553f, +0x6f8367d9, +0x2529c660, +0xcbc2f7ac, +0xca2b960c, +0x1c021500, +0x8e219e7d, +0xb437b387, +0x1608f9f7, +0x53d20ea3, +0xcbc59a19, +0x85da7985, +0x549365f8, +0xed8aaf6b, +0xf39759e5, +0x612b21ec, +0x69091d2a, +0x5267b623, +0x180858f0, +0x1f6988c6, +0x129b3cda, +0xfcee8ada, +0x16fe5744, +0xfaaf648c, +0x97c8a48c, +0x1cc3a3b9, +0xd1f72d1c, +0x8e4386c5, +0x7c3dbf00, +0x69503b8e, +0xf9c93fc2, +0x65cfc1bc, +0xd427f008, +0x788cd093, +0xa0fc6a0f, +0xf48115fc, +0x506b4f2d, +0x6f2d09ec, +0x17c75af9, +0xbf691213, +0x06fa6036, +0x249cbf82, +0xc02842f5, +0x9f6c22f0, +0x0dad4aff, +0x5b09371b, +0xe3d80a70, +0x893257b5, +0xe11a4f34, +0xc5d65e96, +0x2ca5c1f7, +0xc556f60e, +0xa31f2d5e, +0xe99cc148, +0x11abc79a, +0xfd2e0f11, +0xffb952a7, +0x4befb796, +0xd0144515, +0xaf2f69fd, +0x5615a95b, +0xca65c91e, +0x6a04f201, +0xe0679d08, +0xea3636fe, +0xef3f0671, +0xf7890c37, +0x76568064, +0xac4ac695, +0x9ff99567, +0x12ecb6c9, +0xdc248e58, +0xc3ea6169, +0xdbac3275, +0xb9ff788e, +0xbd1c44dc, +0x232b4898, +0x61053b96, +0x5fb1f465, +0x1df9f4c1, +0x0a1e8c20, +0x9fd41d69, +0x55e55c09, +0x858b7f4f, +0x701ec2e2, +0xc9339157, +0x6bfe61a6, +0xbd738859, +0x91d7fd1a, +0x316bb5fe, +0x3ad10e15, +0x82084f6a, +0xce6a0e8e, +0x8f383161, +0x2398dd85, +0x922b83ec, +0x8683ab46, +0x2d735b53, +0x999ad90a, +0xb5f5b157, +0x04ec9673, +0x256f062f, +0x780154fa, +0x3283c725, +0xd3ca0f67, +0x877bb06f, +0x91f0cd8d, +0x848537d2, +0x4c47b674, +0x94ba661a, +0x9f664720, +0xbc7905ac, +0xf520e3d0, +0x6f633a80, +0x04bf8701, +0x37859ef6, +0x02e761fc, +0x4416cbc8, +0xa12f0497, +0x2eb32c6c, +0xb6742bff, +0x41daed29, +0x9ff2fd31, +0x993e9165, +0xfa091118, +0xfbca78bc, +0x0de4636c, +0x001b20b4, +0xbafa2247, +0xfca8d36d, +0x7650cb17, +0x8e2653df, +0xb07d33f1, +0x2a5a0d42, +0xc9612917, +0x911ae204, +0xda0efa90, +0xd24198af, +0xbcfb8f4d, +0xa326be31, +0x9b744850, +0xe54bd6b2, +0x96af8008, +0xe707e7a9, +0x9c921290, +0x6630c2d5, +0xe6df07cc, +0xd610c39f, +0x52daaeb6, +0xd5d8757b, +0xb63886b9, +0xf34a287f, +0x76413688, +0x039ed9ca, +0xe0a7612c, +0x39011db9, +0x828e2f95, +0xc6fe6a25, +0x88cf8808, +0xc14d162e, +0x4f7abb79, +0xf29bbdd5, +0xe3c6e72b, +0x635d52f4, +0x75286350, +0x7ec5ed0a, +0x04ec90ba, +0x7d6bfc1c, +0x7744b7b1, +0x6e199de4, +0x1e2413fc, +0xf65336ac, +0x7eb6ce99, +0xaf9d73f2, +0x60812e10, +0x6b084609, +0x1778b2b1, +0xf7fb1985, +0x0cb86b46, +0x0c160032, +0x13f04405, +0xbc3c53bf, +0x076b69f1, +0xe9e54ad8, +0x3d7e3145, +0x100c6730, +0x0b4fd435, +0x95a1c479, +0x6b36a8ba, +0x67ea160f, +0x0c272718, +0x7d55c16b, +0xc5340bf2, +0x19b6b816, +0xa62da41a, +0x0a7b04a8, +0x3488eda4, +0x3cc481e0, +0x12b67d3d, +0xdc3b169e, +0x9759f0bc, +0xe8d15f9f, +0x00bc781f, +0x71565a3a, +0xa1e3ab00, +0x8d264b1a, +0x68fcdf8f, +0x6b690fb1, +0x26033e34, +0x898e9179, +0xfc2385c4, +0x1c6b3d3d, +0xc37d40eb, +0x7a41a4a2, +0xe8ff7ee2, +0xf33cb97f, +0x1edf85a7, +0x1de2201b, +0xe8110045, +0xdac632c0, +0x32894976, +0xc02c339f, +0xaa7675a1, +0x3df758bc, +0xce0ce4be, +0x229c1825, +0xdcc40e84, +0x7d5c0a52, +0x02156494, +0x33f27694, +0x1412c833, +0xe3685e22, +0xa08ebf16, +0x83821bb9, +0x34d3acd3, +0xb7118bf0, +0x995b26f2, +0x86a77b33, +0xaa0f0afa, +0x4635a5b5, +0x6cfea4cd, +0xd013c2ed, +0x01c1edd3, +0xea9eedeb, +0x359900b1, +0xfeb6d25b, +0x9bee78aa, +0xb9045d27, +0x282fdc81, +0x3cd6c4b6, +0xb2e8024a, +0xf4775898, +0x61e3636e, +0xbd5bf13c, +0xe8486990, +0x009195a1, +0x8433f8a7, +0xa665564a, +0x103106cd, +0x92ababdb, +0x3aa6c0b9, +0x6e261cd4, +0xec5b933d, +0xc725edcc, +0x583ff6ac, +0x0364c771, +0x7a4a9589, +0xd9cfdac7, +0xcafc7abf, +0x2cd748ff, +0xe1c71cac, +0x9c021fd7, +0xaa4b02ca, +0x301b91cd, +0x37e93177, +0x00d5ca03, +0x1df683fc, +0x3be4cfda, +0xa3117fdd, +0x5ebbe98e, +0x70d0480a, +0x0dfa2fbc, +0xc3e1dccb, +0xc1ccfc46, +0x95045ab5, +0xe211be05, +0xed4353e5, +0x786ca568, +0xeeddbd58, +0xa26263db, +0xc8c8155b, +0x656b19a8, +0xa8a8420f, +0xd09e3b06, +0xa9dad222, +0x2232fec1, +0xad662810, +0x25ca14ac, +0x402bde58, +0x0f671cec, +0x997a64a3, +0x98b54ad6, +0x71626258, +0x2f753783, +0xa67a4991, +0x9a141e4b, +0xef4b1780, +0xa81cd447, +0x445ddf59, +0x209255a3, +0x3af96ec2, +0xd2c16ba0, +0x9af2827b, +0x859e49a5, +0x02580eb8, +0xb63b1df5, +0x3ece6c8b, +0x74792d75, +0x80d20ce7, +0x967a58e5, +0x320a5341, +0xee3723ef, +0xddbbf68e, +0xcb83af33, +0x245bd154, +0x4ad3964a, +0x6c956af2, +0x73dfb659, +0x2395ee4a, +0xc0106a83, +0x2c8f617d, +0xce836d64, +0xc8756401, +0x7098e87f, +0x61450c63, +0xee920755, +0x2cb0d680, +0xb94b1371, +0x2f911822, +0xf65fddc1, +0xea65b1a9, +0x96265c22, +0x8b14f6fb, +0x48348e93, +0xb0f872c4, +0x9a88186f, +0x4d09c9ad, +0xb92cae29, +0x84e0dc6d, +0x48309b25, +0x18fa063c, +0xdd52c908, +0x8bec448d, +0xa858e17e, +0x7d879501, +0xfa63ffd3, +0x7a55f6f2, +0x2f8e0218, +0x5f25f386, +0x4f9c5417, +0x4c62de5a, +0xef3c41a5, +0xaae0fd83, +0x5be2ce8a, +0xfb040444, +0x152d48de, +0x118ce650, +0x2b09bd5c, +0x9213aa0d, +0xc6aae467, +0x2deddee5, +0x3c98a19e, +0xec49087a, +0x5578121d, +0xec07759d, +0x86f36299, +0xd17becfd, +0xb870b171, +0x054f3061, +0x6e52d0e5, +0x6ecd8e8a, +0x76075c23, +0xa73880a5, +0x8db2c382, +0xa2d56078, +0x2768fba2, +0xd8cf87bf, +0x1371e7ad, +0xa1bdbeb0, +0xf1fd7e96, +0x237abe48, +0x29a250b8, +0x0e681d86, +0x7d61e108, +0xa675920b, +0x0b05d6c4, +0x0491cf8b, +0x967baff6, +0xab979966, +0x8b15fc35, +0xc7a86279, +0xf610c198, +0x9df20a37, +0x5e2ff039, +0x8698a9e4, +0x68416cf5, +0xa0b9d459, +0x9e204c0f, +0x5359c7ad, +0xa30f3424, +0xfc64257d, +0xdc6348d2, +0xb784e9cd, +0x89eb6bae, +0x0b55c71b, +0x5f042ba9, +0x69f12a43, +0x3a35c49b, +0xf3c32ff3, +0x6413f021, +0x1066eb0d, +0x07ed8778, +0xcf18d479, +0xfb692a49, +0x25b9bb3b, +0x3bfd7630, +0x712565ca, +0x45b49dc5, +0x99c3594e, +0xb5d24b65, +0xd4882257, +0xec55548a, +0xfd8fb234, +0xd06dddbc, +0x9ebf297c, +0xaaea19e3, +0x40b5c8fb, +0x9f60094b, +0x73d66e65, +0xe727d0c5, +0x940c7337, +0x18871a3f, +0x53cc8d85, +0x72c6d4a7, +0x245a8f0c, +0xe6fd8cca, +0xb08d9532, +0xd62fea4f, +0xab29f803, +0x72cf412e, +0x57fba228, +0xf4ec870f, +0x63713d1d, +0xc6608bdd, +0x422f5017, +0xf4aa8d86, +0x61414bd3, +0xae19d4cd, +0x76ed35e5, +0x400a86c6, +0xf408e217, +0x4266c6d2, +0x4709e980, +0xe8a620a0, +0xf6e66f05, +0x352a85de, +0x7864b4d8, +0xf4c0af6d, +0x5e909342, +0xb33b8615, +0x6e8bdd1a, +0x958b6d26, +0xf173d300, +0x036c4a33, +0x21586892, +0x718ff4c5, +0x02fb20a1, +0x587f7a12, +0x81ecb157, +0x9ff0d7c3, +0x3c336641, +0x0ffc57b9, +0x44b3c720, +0x76ebe19a, +0x57fa586e, +0x3b764081, +0xeb84edd0, +0x7d1bb097, +0x09d47a29, +0x855c438b, +0x557a47e7, +0x5d447278, +0x1fb371c5, +0x2b32db81, +0x618884b6, +0x92c2f0e7, +0xf39a894b, +0xdd473e95, +0x098f5e0b, +0x9dee61cb, +0x97da771e, +0x6e3c3b2d, +0xb53293b3, +0x7e7c89ac, +0xa367fe92, +0x3adbb8cd, +0xcf49ec8a, +0x390fb86b, +0x0e77e625, +0x2b6574e5, +0xb05da25c, +0xb73aeb92, +0x8572586c, +0x0b0700d1, +0x35eb21a6, +0x12900dac, +0xe4c86827, +0x63246887, +0x375cd49d, +0xf8c54913, +0x1ae3da71, +0xd8a6e660, +0x83ece2ff, +0x9fc21db5, +0x75d84604, +0xab701621, +0xa9dea569, +0x81038de1, +0x28844d2a, +0x1623fa00, +0x62d05e6b, +0xbf869000, +0x333858c1, +0x7f6d5807, +0xde81037f, +0x3696ced6, +0x180f6ec0, +0x047138fe, +0x5f9416a4, +0x314e5d45, +0x3582bb96, +0xed486a1c, +0x8041f32f, +0xe7cc731d, +0xf28ba6b6, +0x58cc254a, +0xb397308b, +0x6b8c74f3, +0x0893b626, +0x640ff006, +0x475309ee, +0xced2729f, +0x8fbea56f, +0xfbe942ea, +0xadb3d76d, +0x515d4fd2, +0x3c983ac1, +0x8db8bc9d, +0xd77a8d14, +0x13d2e624, +0xf51efaac, +0x162443ec, +0xda15ec69, +0xf55dfb21, +0x84fc0119, +0xa494d4e3, +0x14841fe2, +0x92a58be1, +0x75fc9d1f, +0x39119034, +0xa13271d7, +0xa1569a78, +0xee26aa3f, +0xe61f87b5, +0x44248b93, +0x425d3e44, +0xa75c0304, +0x4985cb56, +0x3ef45667, +0x1d57f031, +0x7ccf20bd, +0x8f3e5c61, +0x69f65902, +0x77cf646b, +0xb2e82afb, +0x65434cb1, +0x75ec91c0, +0xb825eb3a, +0x8bcd38a9, +0x4aa0213c, +0x047138e8, +0x8f9514ce, +0x6eb5c080, +0x73d8c9c6, +0xd8b625bf, +0xaeaa0819, +0x29e22246, +0xe0ee4f70, +0xf2cb8c97, +0x2179d735, +0x26f27532, +0x2b96dbb1, +0xd39692f7, +0x96cb57ed, +0x613b23d4, +0xf0a1ecad, +0x296a9c14, +0xc38f0e38, +0xb0a1b1bc, +0xde59757b, +0xef5fd466, +0x4283a5c1, +0xce6938a4, +0xd6674885, +0xc0ee3251, +0xd5bb62b1, +0xe364a9ca, +0x1a3aae30, +0x200cebe4, +0x6e06684e, +0x2df73cd8, +0x5f55c574, +0x769cd05e, +0xe2019515, +0x7bdf49e5, +0xda477c4a, +0x488448b4, +0x0e6c6097, +0x3a12e71d, +0x004d074a, +0x9549aedb, +0x93e1ae8f, +0xc910c675, +0x6b0faf08, +0xb2d5fb22, +0xb47f7e70, +0x2da37589, +0xad73eea9, +0x47572d01, +0xbfaeb93b, +0x41abf3f5, +0x86d7e14d, +0x3225c648, +0xe609224e, +0x67e1fb62, +0xc4b28dd2, +0xb151e5e5, +0x25ab0256, +0x0acd9f83, +0x5b104d14, +0xf2444dbf, +0xd223ca25, +0x6005776a, +0x74ca71be, +0xf4034438, +0x66a001d6, +0x73f10455, +0xb49ce0b0, +0x1158d228, +0xa394fbd2, +0xd41a6479, +0x4f4476e9, +0xb37c8b61, +0xb594cd7a, +0x74268b00, +0xd7f40b94, +0xcfaaea61, +0x5c0a915c, +0x16c9b79d, +0x3f28ef04, +0x5f2140f3, +0xa013c1e5, +0xf3c22f90, +0x151a2703, +0xcaaa00fc, +0xa0476f83, +0x53849956, +0x0d716ac6, +0xeddb234b, +0x5ee6dff5, +0x870eef9c, +0x51ca2c92, +0xc9805e9b, +0xec95fb0b, +0xeddb4ccb, +0x2484fa8b, +0x4fafd8fb, +0x4eef9c86, +0xa8fbe65f, +0x6fb730fb, +0xe29e6897, +0xd888901e, +0x03d40177, +0x6bfb9084, +0x3caf8cb9, +0x9312185b, +0xfd25aacb, +0xc249bfec, +0x26e1f842, +0x6741f185, +0x51ef063a, +0x2f55abf7, +0x79d72201, +0x66361f94, +0x9f350956, +0x07ca599b, +0xffbaacfd, +0x6c1e4f5d, +0xae06e05b, +0x8760cf39, +0x15ac39bd, +0xc686c43a, +0xa7954727, +0xdf2bc4da, +0xacda08fd, +0x7699c77c, +0xeda72a42, +0x7d71975f, +0xe673f2dd, +0xeba4eb6b, +0x1271a2dc, +0x5bb5d1c7, +0x40b545cc, +0x0e5006e7, +0x53bad440, +0x7d677cc6, +0x003a3ab8, +0x532dd2e1, +0x41df09ce, +0x59b6701f, +0xbf549219, +0x598d379f, +0x8cdeaa7a, +0xcde4dd63, +0xbd5b76ce, +0xc64b4470, +0xe5f6ce28, +0xd5a262ce, +0x54094810, +0x80ec5e34, +0x8699e48f, +0xf3c431e3, +0x303432d2, +0xcbae7b04, +0x0fe48fd4, +0x039ee458, +0xb87ad7ba, +0x7f332c73, +0xeb4680f2, +0xbcddb83f, +0x6f09cff7, +0xe15bae27, +0x0029d8bb, +0x92d180bb, +0xc74b7a18, +0x8ace4c00, +0x68364160, +0xe76daea8, +0x05323bfa, +0x241453bd, +0x81140461, +0x7a4040d3, +0xcb9fe34b, +0x60136a6d, +0x9a8434ce, +0x2f12697a, +0xc3a8cbcf, +0x92de4edb, +0x74af77b4, +0x4fe8015d, +0x6c3ead66, +0x93adaf62, +0x248ced0b, +0x6f5f0f84, +0x6efcd4b8, +0x15dbb8c0, +0xbd8038c1, +0x42ab190b, +0x9b3b817b, +0x17dec006, +0x4f110887, +0x3c6980bc, +0xee20d614, +0x7d3b5ade, +0x6888936b, +0xbae67b5b, +0xdc82f174, +0xa31a693e, +0x64c24387, +0x317955f9, +0xc0236a1a, +0xed1136d5, +0x8e3c34c0, +0x5ede81b7, +0x28a73e03, +0x551b7e5a, +0x7a23fbee, +0x12ccebad, +0x9d478b54, +0x0f77d02b, +0xde218278, +0x3971d487, +0x3133834f, +0x8d40f5d1, +0xc97bd0ab, +0x575e6be9, +0x13269611, +0x1567d0e5, +0xef04c73a, +0x992fd973, +0xb03bc26e, +0x79b00610, +0x50dc62ff, +0xc6cf96b0, +0x4d8f7f7a, +0xecc7e7c0, +0x400dedfd, +0x4bf4e0bf, +0x30dc41a4, +0x9d0d580d, +0x221d6b9b, +0x9884de69, +0x50367a15, +0x00df6945, +0xdc11d83f, +0x5604dc70, +0xfae36bab, +0xf9010204, +0x6219c424, +0x6e592530, +0x4eb6734f, +0x02f99c4a, +0xd50f1324, +0x8b5b4959, +0xfa1c6363, +0xe7899aa9, +0xaabafb95, +0x8672e1bf, +0x10e9467f, +0x7694aa9c, +0x673bde47, +0x3d5cdc6c, +0x1ffe1936, +0x69f6a859, +0x0fdb80cd, +0xacc2e6d5, +0xe3d562b3, +0x046696fc, +0x1034389b, +0xac2ae2f7, +0xd7ce5223, +0x90f98edb, +0x9f330361, +0xc62f6119, +0x20b51be4, +0xb70105db, +0x059e0347, +0x2866f5d3, +0x3005a6e8, +0x867a42eb, +0xde7d7dfe, +0x4c371bfd, +0x7b292384, +0xe8b2de3d, +0x8f884e38, +0xe2f7ecc2, +0x35513f85, +0x4d91cbfd, +0xe92d1336, +0x97c546bf, +0x5122143a, +0x50ce8c72, +0xd93cd3ce, +0x6ee6398f, +0x4e9ddd7d, +0x11a39162, +0xb676ecab, +0xcf7ecbbb, +0x89213acc, +0x9b6aba4b, +0xf980acc4, +0x41fac6f5, +0xa5faeb26, +0x10a6aa79, +0x63a08be3, +0x327eb90b, +0xecfe8392, +0xaaec2cc7, +0xf5a90bfa, +0x0ced6520, +0xcbe6ca8e, +0xdff675df, +0x063614d3, +0x83f10e03, +0x83831e4b, +0x76da85ba, +0xe8461ee1, +0xa406b867, +0xb9b127b8, +0x52c031ec, +0xb735feb7, +0x8fc42c1a, +0x262c6c4a, +0xca494a5d, +0xa6eee8de, +0x07b096e0, +0x7483bef4, +0x70ac08db, +0x5d14916c, +0x248fc5a3, +0x5f36f1b3, +0xa87b2e91, +0x541790df, +0xbcf346b1, +0x1fe87061, +0xc5b08fec, +0x06a5c6ef, +0xed7ee949, +0x0a08886c, +0x37cf2a23, +0x999d6f4d, +0x1d5eff98, +0xb6d5df19, +0x8b8418d9, +0xfc2b02c1, +0x4ab88d69, +0xaef08c34, +0x7447d3fc, +0x6c7bcbc1, +0x687d5a1a, +0xb1d411df, +0x81f9c19c, +0x2b825c4a, +0xa809de84, +0x26aef54c, +0xf8a19fb9, +0x3169ce21, +0x4d3894ed, +0xa0684310, +0xa2780c85, +0x9e4f6091, +0xeb0005d0, +0xd77b65d1, +0xb861af35, +0x05f1c2b3, +0xf196fe8b, +0x5ba829c9, +0xf1d89b94, +0x54679992, +0x69a9ccb9, +0xe80336f2, +0x686cb8d6, +0xaa3563b6, +0x428e1c28, +0x213c9fec, +0x32bee514, +0xbce8ddf2, +0xdd52d889, +0x85f02753, +0xe0cdd42a, +0x8154f965, +0x2e5c83fd, +0xaa0a5654, +0xaf58a2ed, +0xeb02a7c5, +0xfc6942d2, +0x24e3f28d, +0xfaf66bbe, +0x640a8716, +0x735296e1, +0xcb553bc0, +0x4c7a40e6, +0x85f1d66c, +0x3d49ef57, +0x224b6a9b, +0x7422a800, +0xb4d8cd2b, +0x157909f9, +0x24215d24, +0x9dede6dd, +0xfbd9c6ac, +0x21b72b4a, +0x388ee796, +0x53f65cb0, +0x8639d45b, +0x15913366, +0x409ed525, +0x33f727d7, +0x770119bf, +0x534dcbb0, +0x57a12e75, +0x0891eabd, +0xcf310f11, +0xaa02b0f0, +0x74cf9edb, +0x857b26bf, +0x6d54ea41, +0xb0cc81fe, +0x32387092, +0x04139ef9, +0x1ea8fc5e, +0x932506e3, +0x93ca79d4, +0x108a8176, +0x0db10bf5, +0xcc386c25, +0x08a75815, +0xc8fc3ef5, +0xbc4fd887, +0x1e4c3ac3, +0xea6ca7c1, +0x38885b88, +0xa76dfcf3, +0x7cfebaa7, +0xf206d9bf, +0x1e7a1428, +0x63ccb37b, +0x35f64d6a, +0xc4575db8, +0x2a93a143, +0x168e7744, +0x9ba04539, +0x768bcf41, +0x0b19ab63, +0x072c776c, +0xe6f4853a, +0x8e9c0145, +0x0e7ac31e, +0x91d2b439, +0x4683687d, +0x35ac8218, +0x122d077e, +0x45d80002, +0x49d7beef, +0xb80dd29f, +0xccdfba56, +0xd22ccc01, +0xb566db23, +0x9681c671, +0xbee819e0, +0xc8f3c64a, +0x03b2621f, +0x12b87d4e, +0x836821ab, +0x7fb44ca4, +0x60aa718c, +0xb812986f, +0x065f0045, +0x7950bbe5, +0x583cbab3, +0xd76f0279, +0xe0f7a37c, +0xefe8465b, +0x65088c82, +0x22f251ce, +0x12b2bfe2, +0xf53fae8e, +0xa3854bf4, +0x4b7d64ee, +0x625d4f38, +0x92901ccc, +0x714f288e, +0x3b3b3106, +0xd10dcdd4, +0x0527fb8e, +0x9f2bb4ea, +0x94d3e218, +0x8b1cfa6b, +0xf645a856, +0x591d0045, +0xe8070a1d, +0x34cefb7c, +0x33e46268, +0x39346ca6, +0x582431ec, +0x6ea4fd11, +0x92e95591, +0x93800337, +0xf8808bf7, +0x9d37a0ac, +0x26ca4f50, +0x30376b26, +0x4f040b44, +0x32bcdd0e, +0xf04e517e, +0x8bfce90a, +0x477364a6, +0x9b84181b, +0x014b00fd, +0x399f4b67, +0x372c31e4, +0x091db8d7, +0x97c3309b, +0xf24bec05, diff --git a/src/soc/intel/braswell/microcode/M01406C3337.h b/src/soc/intel/braswell/microcode/M01406C3337.h new file mode 100644 index 0000000..0c89fd2 --- /dev/null +++ b/src/soc/intel/braswell/microcode/M01406C3337.h @@ -0,0 +1,17152 @@ +0x00000001, +0x00000337, +0x02262015, +0x000406c3, +0x083f0d28, +0x00000001, +0x00000001, +0x00010bd0, +0x00010c00, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x000000a1, +0x00020001, +0x00000337, +0x00000000, +0x00000000, +0x20150226, +0x000042e1, +0x00000001, +0x000406c3, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0x00000000, +0xf9e6d006, +0x13ca68a6, +0xbf1f8951, +0x92e38e9f, +0x09725f3e, +0x8c2010ec, +0x8a7a2fe4, +0x92683e92, +0xc3e444ef, +0x58491df9, +0xb7830823, +0x6eab8273, +0xef2443f1, +0xd7284cf9, +0x96d13191, +0xaa2fcfeb, +0x37cb49c0, +0xbd7a57d1, +0x5ae4db5e, +0x1ecae117, +0xc3929abe, +0x90178e1c, +0x8a8bc0b3, +0x519879ca, +0x928c2a3f, +0xd8157e1b, +0xb2ec441f, +0x3818daae, +0x6986ce0a, +0x7e499dae, +0x0c684c42, +0xeda3b321, +0xfeac24d9, +0xa226c1dd, +0x96353626, +0x9b99cd21, +0xf39d3f19, +0x53197d03, +0xc53d7af9, +0x7ead944c, +0xf060b398, +0x1f4690eb, +0x2e6d8e43, +0x0e1a8530, +0x813662fd, +0x3c2d7818, +0xc5382970, +0xddf02d46, +0xc17cd6f7, +0xa0761016, +0xb35d6ef0, +0x6ba761d8, +0xbc060ba4, +0x9bc637ed, +0x8bf9252b, +0x7d88672b, +0xb53101bf, +0x257c1b57, +0x5237eb34, +0x6e402e99, +0xe7a81b03, +0x1d5bfccc, +0xe987f433, +0x9830ccec, +0x7b7352e4, +0x86c28cb3, +0x8fc57b81, +0xde7f2a85, +0x191bcdcb, +0x4a8911ab, +0xd778f2a1, +0xc9290836, +0x00000011, +0x67102578, +0x2af7b7a7, +0x308273ca, +0x81424359, +0x203dd799, +0xae3ccbd7, +0x12730602, +0xe8c6defa, +0x6f6ae819, +0xf7fe1c54, +0x34dac470, +0xc79c64fb, +0x22297547, +0x07030a84, +0x8485ad62, +0xd3446b74, +0x953976aa, +0x97ba8118, +0x512c9e99, +0xdf1f5149, +0xfa9f0b34, +0x890778be, +0xca0f2010, +0xfc868b23, +0x37e097c2, +0x31ee6941, +0x9aac52fc, +0xd019676b, +0x091b6f69, +0x2527019d, +0x1a002586, +0xfe948cf0, +0x1b092910, +0xc5c9f3d1, +0x56313e34, +0xcabffca5, +0xa25367d5, +0x0936bfb2, +0x5908375d, +0xd266691f, +0xbbf9a1a8, +0x71991f23, +0xf1ba8c3e, +0xe1354311, +0x7b08fdde, +0x63b746cc, +0xec34373e, +0xa81f0211, +0x67ac1dfb, +0x8a31f8bd, +0x779cc00c, +0xd622b529, +0x16070c8e, +0xca0badba, +0x786cf0f9, +0x2cdef633, +0xb7cda620, +0x7170ea1d, +0x7224a96b, +0x14564e26, +0x5f199e10, +0x5dbfa8d1, +0x5db27e35, +0x566602b3, +0x08f56a67, +0xa3d992e8, +0x927f1cb5, +0x4f4739af, +0xf2f63da9, +0x933b1a17, +0xcba24031, +0x0d20b588, +0x5a15fc40, +0xcff60345, +0xf791002c, +0x0e71ea85, +0x46443020, +0x4de86e88, +0x1a12d6a9, +0xabf1cd9d, +0xe6ecc69a, +0x69005000, +0x2c6a9600, +0xa55d9993, +0x71a0be64, +0x5e7fea11, +0x8fa2c467, +0x47b567a6, +0x1ce73718, +0xea9bd547, +0xe9f1dcb3, +0x43375f04, +0x3d2cff96, +0x43b8c0d3, +0x63eaf525, +0xb63f60bd, +0x4d7169e1, +0xb5b1f545, +0x6407a36d, +0x7ae75192, +0x77daa2a8, +0x5a7513c4, +0x6abae863, +0x968b32fa, +0x674f91b8, +0x1c312427, +0xe4cf93de, +0x33070480, +0xe2dfe4f3, +0x65eb8a81, +0xc0519422, +0xf77e34c9, +0x5a605ac4, +0xb8b17bcd, +0x2f90d250, +0x8905b7fd, +0x0b2728c0, +0x251bc133, +0x20c6321a, +0x92b01d63, +0xcd1ddee2, +0x67e7cd25, +0x68b660da, +0xcbca7577, +0x596326dd, +0x8b0cd2b8, +0x5d6ea673, +0x2eb34c20, +0x4035911d, +0xcc645221, +0x487d6e8d, +0x5e79032a, +0x4e73cac9, +0x79ba4c4f, +0x1f6fa196, +0xb18da417, +0x1646e68c, +0x9fc9e7c9, +0x51010e70, +0x81af9a47, +0x0b8ab39c, +0xa60da828, +0xab810d25, +0x619072aa, +0x12a43215, +0xb078da6d, +0x426caab9, +0x9a5e7404, +0x6dac5a50, +0x546e1774, +0x47ade299, +0x45295047, +0x50bb6b83, +0xbb53a7a1, +0x08e08f70, +0xccd52377, +0xc141129e, +0xc3edbb1e, +0xfa0f2e35, +0xe05b0fb9, +0x6c5f799d, +0x84d8ff97, +0xd7a26438, +0x88a03dc4, +0xb5589eb5, +0x2630061a, +0xa48ef9d5, +0x3689387b, +0x8fc61628, +0xa01f2973, +0x9e339421, +0xb4ed8529, +0x289e7743, +0xf65cd602, +0x3f1c78bf, +0x94256f73, +0xa8600d20, +0x24bc935b, +0x912d03de, +0xe636a2c3, +0xfe6570b7, +0xdeab1089, +0x6af5af39, +0x0b6b0ac7, +0x744f0a5a, +0xfe0ae362, +0x2b89363b, +0xbe64a9ac, +0x3e987399, +0x1ef4c6e0, +0x1ee05cae, +0x3cb79409, +0x66685532, +0xa9e87d21, +0xe9401026, +0xbc5e4d2d, +0xafe41da7, +0x9bf873cb, +0xc5498e83, +0xde73a7ce, +0xc5c4dddb, +0x4e1fc9f6, +0xc51754a5, +0x62a0d184, +0xda51f594, +0xe5c03017, +0x0c78e6a0, +0x59337547, +0xdd6cca3f, +0x83117b4e, +0x07123cfd, +0xfe79658e, +0xf1358888, +0xb5906484, +0xabf870a3, +0xcc2c7f7e, +0x8d9684dd, +0xf6909efe, +0x3df5af5a, +0x369517c3, +0x5d7ba0c6, +0x8d1ec01a, +0x23908045, +0x99863b8c, +0x81ee2357, +0x152cb18c, +0x64062cfd, +0x6a78c0b3, +0x4a850a10, +0xb0d10272, +0xfb657a30, +0xb95bb42d, +0xbc3de0a0, +0xbb9e9699, +0x38b583c5, +0x93073c25, +0xc99aa408, +0xbe2cfcf1, +0x529cad64, +0xf70cfc4c, +0xa533e620, +0xdcd342e3, +0xc29f0390, +0x9a112d8b, +0x0c63cdfb, +0x66ce9761, +0x715f59df, +0xb90a0f24, +0x1b95f8d5, +0x562fce60, +0x6a1e6ed2, +0x1ea58e1a, +0x3757a2de, +0x794a6b7e, +0xe8847ea6, +0x3a1814d1, +0xed25b13c, +0xf9cc3bfd, +0x44fdf1e4, +0x03b4aacc, +0x90c4d488, +0x2ed2f6e8, +0xa724745d, +0x1b67172e, +0x25ea1856, +0xe48377f8, +0x10186e4f, +0x2c90eba2, +0x38811fa9, +0xb0b55fcf, +0xe76d8c1a, +0xcebdbeff, +0x12c14240, +0x48c87fd3, +0xecf9a1b2, +0x842f9a73, +0x29a1e08f, +0x0d7f13c6, +0xb94bd76c, +0xc310ce14, +0x8e22d8bb, +0x011c37da, +0xeb0fc18f, +0x0823e3fe, +0x130631e0, +0x398f788a, +0x88fb6610, +0x374bb491, +0x8e318e2c, +0x68a0d005, +0xf4833382, +0xcdfca467, +0x0595bec5, +0xf8614ef4, +0x042eb07c, +0x193207b1, +0x93f14998, +0xeeceb30a, +0xde53304c, +0xc5ab8795, +0xb0f87ec8, +0xda1a7a9d, +0x74b39ec7, +0x53cd08c9, +0x21f61efd, +0xa0eca1a2, +0xd37ed3d3, +0x13fce31e, +0x29101eb1, +0x4c4102e6, +0xdf667d3a, +0x50e5a656, +0x63aba510, +0xa9057e21, +0x0b29795b, +0x6395ff5b, +0xaf1d9475, +0x22716f25, +0x00e63725, +0xbd11c6b7, +0xfcce8ee9, +0x9c06c7fa, +0xe7ded0fe, +0xf2530187, +0xef6c5c4a, +0xe4257f67, +0x4543730a, +0x36d2de0a, +0x7d7facdc, +0x04fc5bd8, +0x329fede5, +0x9185a0b8, +0xeb2e53e0, +0x9ed83b12, +0x6b2011e6, +0xec3c5581, +0xb8d030b7, +0xb85d786a, +0x74c84e0d, +0xd88d01e6, +0xe60aee1e, +0x7ddfd7a8, +0x290ebe96, +0x6f466db4, +0x4870e701, +0x406cc513, +0xd3ab22dc, +0x338daa6c, +0xd6213885, +0x5e68e387, +0x653c63c1, +0x3d2aa0c5, +0x73bc9f84, +0x4823b6ba, +0x3076fdfe, +0xd05ec960, +0x79a0c95a, +0xd8d91397, +0xa4fe3eb2, +0xe7d44b1d, +0x5e288972, +0xb4c55fc5, +0x5d8882ef, +0xf7d0fb12, +0x7c443580, +0x500aba87, +0x3726bc2a, +0x38bceb12, +0xc9329774, +0x1c58e1e2, +0xbb071a6b, +0x8f0480fb, +0x41db038d, +0x284d5c0f, +0xd2fe6253, +0xa7faec9f, +0xdc9a0073, +0x2c861916, +0x6a0639de, +0x448a2f13, +0x827b27fb, +0x4fd533f3, +0x29a6e36f, +0x999eeaf8, +0xac6fa90f, +0xb213eb89, +0x46d86c42, +0xd1976712, +0xb196ca53, +0x961b2ffa, +0xb591c7da, +0x54765b64, +0x8a176fe9, +0xda22bd7a, +0xfd0325f9, +0x9809612a, +0x64578e2b, +0x0d2459b7, +0x671e45ec, +0x89b30a6e, +0x3f88f612, +0xe14ed496, +0xbf586db7, +0x702edb5c, +0xb48a642f, +0x23de1847, +0xfa9d386f, +0x76ca9f53, +0x579c8497, +0xaee09a7a, +0x89c5da3d, +0xf5f98022, +0x1d9d58b2, +0xfbb2f004, +0xa5625974, +0x80e9622c, +0x1011abbc, +0x91720d9a, +0x1b3a5aff, +0x4d7d2062, +0x97f3b41f, +0x3300dcdf, +0xb7ac051c, +0xa989b344, +0x22f3f3d6, +0x33b2219e, +0x52b7bce5, +0x7b200984, +0xf1deae16, +0xde06a7a2, +0xe2447f3f, +0x5f2105c6, +0xb24f5e62, +0x00eb117a, +0x761e1fc1, +0xb424645d, +0x26d46297, +0xbfdc28b1, +0x7d52789d, +0xbf129a20, +0xcbee8ea2, +0xb29f355a, +0x50d5871c, +0xf3ee1b0e, +0x506aaf1a, +0xbc3337bf, +0xd28f0632, +0x90a9ba53, +0x480294e9, +0xc99013ab, +0x901fe773, +0x357aeabc, +0xf5cc62a5, +0x2b41e356, +0xf3c64c6d, +0x1e5add36, +0x3cc22e1e, +0xf0254e0a, +0x53c3a3dd, +0x52a1b24c, +0xd2173f47, +0xac6dc594, +0x417181a9, +0xa040d799, +0x23f97758, +0x50f72551, +0x5605772a, +0x6e7f4b0c, +0xd45a436b, +0xa2c88723, +0x6833b41a, +0x5733297a, +0x441e42d7, +0x47201989, +0x4ccd3284, +0x1051df0b, +0x3971eac0, +0xc9923d7b, +0x76fab1b2, +0x34d215e1, +0xd73fe985, +0x05b15a49, +0x88126bf9, +0x4fa1cd88, +0x83265eda, +0x93c5449c, +0xa126cc03, +0x0d9f8739, +0x870f3762, +0x25fb100c, +0xc24c9024, +0xcd01e3b2, +0x5b3bbba5, +0x24ead96f, +0x2d04f441, +0x64bad249, +0xdc388c43, +0x25a2a00f, +0x7b0259e5, +0x14793b4c, +0x7573d7b1, +0x4910e723, +0x302ce72b, +0xcac40ec3, +0x9e85dc66, +0x56b9aca3, +0xd0384832, +0xdb30a6ac, +0x4c459e43, +0x09e26d18, +0x72a3a4c3, +0x4a4d703d, +0x3671e87e, +0x4ccea586, +0xb7dbd0a9, +0x45f4511d, +0x9a80a4ba, +0x8e6f5910, +0x3025ea32, +0x37188975, +0xe64f758c, +0xdf898416, +0x68113390, +0xc0ab037d, +0x990159bd, +0xf2bc0a12, +0x323bf578, +0x38deade5, +0x45ee9d21, +0xbff68569, +0xf6dc9f35, +0x9b7e31db, +0x16945e79, +0x3713060a, +0x87aa7ce8, +0x22312fdb, +0x05b0ae9c, +0x622418d0, +0x33783c6f, +0x73bd6cee, +0xcfca5a8f, +0xa4a790ee, +0xaf8ed68e, +0x89e7b97a, +0x5c5d0e65, +0x8629a600, +0xc761e9b1, +0x912da273, +0x1dd76a9d, +0x974417ae, +0x8227801a, +0xcefc4426, +0x49238c04, +0x4a22ebf0, +0x42ac4f47, +0xbf2be5a8, +0xee20bf63, +0xbd9518eb, +0x59692341, +0xb824730b, +0x7ef260fe, +0xd29d4a72, +0x6f05dc97, +0xda8e5035, +0x4454e82e, +0x6013ceb9, +0x8305bbc1, +0x0e2a59a7, +0x76708d3a, +0x8cbd916c, +0x02487714, +0xb2f5b5b8, +0x4deadf7c, +0x4f890a49, +0x7172f57f, +0xc1a977ad, +0x88582fcf, +0x7de3c162, +0x8e0af877, +0x12714383, +0xd71477f6, +0x2244ffb4, +0xb06c3e4f, +0x9814a7d9, +0xecd93a95, +0xe1998b91, +0xa52d8d22, +0xa4160463, +0x3213e069, +0x17426cfb, +0x135101f9, +0xea42c1c9, +0xbb2e3db2, +0xbb108c93, +0x2aae905e, +0x2979cbf5, +0x6238c473, +0x2fdf6e6a, +0xb96c75cd, +0x5783b7fa, +0xd494dde6, +0x8494050b, +0x1ef704b7, +0x9a5ff2e0, +0x4853ed69, +0x20450a48, +0x038fa617, +0x2314bad2, +0x2c2d5689, +0x02d00aae, +0xb9a14248, +0x6f66c067, +0x8907bf35, +0x9e207e76, +0x513734c8, +0x28ef63da, +0x8ca20b74, +0x7057271d, +0xbfc97ab2, +0xa35630d3, +0x14736783, +0xb13f6c03, +0x985aaf7e, +0x726f6422, +0xc6baa629, +0x1cc2bb16, +0xeb533c18, +0x11792020, +0x0d45cfe8, +0x8609ec0f, +0x6ddeadf8, +0x391f1c98, +0x5b97c0f7, +0xd73e3538, +0xf8ac279f, +0x092ae54e, +0x0c0a1fb3, +0x119399a3, +0xa15927fc, +0x93aa2145, +0x51def565, +0x4836f49f, +0x4d668b3b, +0xdf6a77e9, +0x99b66852, +0xcfcb76a1, +0xcd63838f, +0x8aaa6eb3, +0xeac01b5a, +0x86574abe, +0xdcd99b21, +0x33db3555, +0x76717da7, +0x8441175c, +0x2cbfe471, +0x3257aa71, +0x925cd6df, +0x0aa0fdb7, +0x3babadd9, +0x0365eddd, +0x8f55bac4, +0x3a647a0f, +0x517a6203, +0xae87818a, +0x77efb69b, +0xb02ac609, +0x04ecbde6, +0x0a341336, +0x26b28c38, +0xdfcb142d, +0xd8d06c77, +0xa54dd039, +0xdc8a0807, +0x25fabf55, +0x79d2a17d, +0xb854fc1a, +0xc097db7d, +0x221ead9d, +0x87b51aec, +0xec987f69, +0x1f037c7b, +0xa4e7642f, +0x165a0292, +0x91629e4a, +0xac49745a, +0xc6939b03, +0x3ed02b29, +0x7a1a6e89, +0x9bba23e7, +0xa52cffe6, +0xbe83e193, +0x39a2cc38, +0xdc46db6a, +0xcd00c8e2, +0x4e51ed79, +0x6f4d886e, +0xb5f04bb8, +0x78d53ad7, +0xa3a86e68, +0x7fc6c20b, +0x90abe37d, +0xbd3e49fa, +0x404874ae, +0xf9f815eb, +0x8ad12bf0, +0x8fc2a928, +0x31840395, +0x06d82864, +0x2c5bd1ad, +0x3846bccd, +0x835f177c, +0x338d6fa7, +0x18a6c4dc, +0x02d3cada, +0xdb3a03b0, +0xdac202d3, +0x33d5d3b5, +0x3df17875, +0x76f28d04, +0x662decd7, +0x8e6c26fa, +0x4caa3727, +0xdd50e45d, +0x78418dd1, +0x2e1fd32b, +0xd9c2d10f, +0xff2cf8b1, +0x808f32a6, +0x66f35aca, +0xff220b5d, +0xd0b49006, +0x454a3203, +0x6f29e954, +0x3f3f2116, +0xdad19a74, +0xb9e4c74e, +0xa46e948d, +0xdfbebb40, +0x9ff8f1a0, +0xa85da348, +0x145b8494, +0x5d4a7c59, +0x7fa4ad8c, +0x4be9ed1c, +0xd2c405e2, +0xda16b510, +0x08770355, +0x8ec0e0bf, +0x65dbc551, +0xf9323aa4, +0x8dffab36, +0xed963d3d, +0xf18dc530, +0xa63503b8, +0xfb7b6161, +0x4ec1ad11, +0x352b77d1, +0x4ef3804b, +0xea134164, +0x872afee3, +0x11e67bda, +0xedab8016, +0x2d78d4ff, +0x591a85bc, +0xae27b3f9, +0x280669a2, +0x07ae2d54, +0x0d7c60af, +0x1d1b2a98, +0xc7ead821, +0xcafd72a5, +0xb7ff24cd, +0x423d3002, +0xffe01a80, +0x42754b57, +0x29d1ea19, +0x5844a508, +0x5c7f6b30, +0xb8b9161b, +0x7938a23f, +0x71c2e5e7, +0x10f2acfa, +0x63b09ed2, +0xa59626dd, +0xc233909d, +0x0e160eeb, +0x6ae4a279, +0x2f5d0a15, +0x87e39e04, +0xe835e0e9, +0xb2046e4c, +0x9243bd5b, +0xa1cecf81, +0x8308f18c, +0x0a149f58, +0x9948c814, +0x3a504814, +0x948c61f0, +0x185562c5, +0x6ec5c50b, +0x5ccf4116, +0xee71bd2b, +0x588c5531, +0x415f1725, +0xf6ba57e1, +0xead5a9ec, +0xb690c3ec, +0x34950513, +0x508393ca, +0xde96a6b6, +0xb9c22e8c, +0xae037ff6, +0xe86e7b89, +0x7ec2cc4f, +0x1e38d068, +0x254b574c, +0x2a58c097, +0xd7b20357, +0xe3361c92, +0xa4472730, +0x2ce32f70, +0xa03c27fd, +0xdd58f683, +0x782b5198, +0xca7397a2, +0x29047cf5, +0x015d586f, +0x50e0fa30, +0xd603804e, +0x1f9f066e, +0x287059a5, +0x9e97fea6, +0x5c0f9957, +0x6e1839bc, +0xfc5f740c, +0x399f42f8, +0x578ec71b, +0x24283aeb, +0x178af9f1, +0x045e6103, +0x3ccdc2bd, +0x2c2cd556, +0xecd37fa4, +0x409a06a3, +0x07ae5bdf, +0x45d8e40e, +0x034f27ee, +0x67fd287c, +0x69fb1732, +0x4471a91d, +0xb60cb566, +0x5cdc4fe4, +0x6e352dc2, +0xdd87cbe5, +0x84b7116b, +0xe7c1f6bb, +0x0388b417, +0x40023c6c, +0xb750e572, +0x0a86afdd, +0x00c38c1c, +0xa88ded55, +0xcaff63fd, +0x92cc0fa0, +0xd433978b, +0xf5311a85, +0xa7e14304, +0x5d9925ce, +0xa8c8a774, +0xbf42ba9e, +0xe998bd4e, +0x2667c4c3, +0xac4b7445, +0xb7cb7dae, +0x28b0da52, +0x445f7782, +0xaf8c9560, +0x5b8b15d3, +0xb4af7578, +0x48c9adad, +0x69769aae, +0x5b748d43, +0x40cca1f6, +0x524c280f, +0xdd460a47, +0x2ac58ef9, +0x82def718, +0xd1a2b3ae, +0x45fba81f, +0x6f99bddb, +0x8d7c3ba5, +0x8df191c4, +0xffb843c2, +0x629c840b, +0x3f2148a5, +0x3e8d892b, +0x0aead7bf, +0xc7448f96, +0xe5c59118, +0x09386ef0, +0xf58dd3e5, +0xa618dc52, +0x3a448ffa, +0x350d404e, +0xc49af75f, +0xae5715f2, +0x2c5708f7, +0x7cf2fa0b, +0xc731f111, +0xd68004c0, +0x9ab4d24c, +0x877783e7, +0x25f1c1d4, +0x51c8a3b6, +0xf3ab45c1, +0xe4b4d271, +0x0e66124a, +0x38025879, +0x02c873ac, +0x84c09cba, +0x9c42fa23, +0x85bed02b, +0x6fcb0bde, +0xdacce720, +0x653821b9, +0x1d35a56d, +0x5c2a8f69, +0x4f961ecf, +0x71776719, +0x4dd2265f, +0x04693593, +0x35cfa7fb, +0x82ca61bd, +0xdad1481f, +0x7230d33d, +0x83d5c28e, +0x1f2b8058, +0xe8c8486f, +0x1a07be5f, +0xde733539, +0xca551011, +0x77af0846, +0x5164cf28, +0xdbbf2872, +0x1306a569, +0xf7318332, +0x9d2979d5, +0x99c4d0f4, +0x8bdcc5e7, +0xb4f203e1, +0x0629c0f7, +0x90137939, +0x19498aa9, +0x4fc22ad4, +0x377b30db, +0x56f72996, +0xb8a0158a, +0x776619bb, +0xf22bae79, +0x5e98ac3c, +0xe95dae65, +0x7973f25f, +0xa05ae35d, +0xc0d45b37, +0x534382d6, +0xc511cd57, +0xcb674ccc, +0x864bf30c, +0x8408338e, +0x44c4b6ec, +0x7bc0e11a, +0x8dc6e418, +0xc83d969f, +0x6381e8c7, +0x104bdfb7, +0x9d9fe2ea, +0x05f4383c, +0xcecce24a, +0xbf46f03d, +0xc4d158a5, +0x64ee3242, +0x8db5d591, +0x6c2afc8c, +0x526bed5b, +0x5d3f86c8, +0x46464e6e, +0x0e24839a, +0xc2dafc50, +0x72ca99bc, +0x0491af19, +0x973057b3, +0x851441dc, +0x743266fb, +0xc708ae56, +0x58b54194, +0x2ede465f, +0xcf8d3f7f, +0x96f4cea3, +0x7935f1f4, +0xa654ce11, +0x5a2fa662, +0x64bdbbf2, +0x56a10d81, +0xf21f3b6b, +0x8186cab9, +0xa1117db5, +0xc3ee1d79, +0x8d06a1d1, +0xd1ea1472, +0x45dc75b9, +0xb75112c0, +0xd74423af, +0x1c3424e9, +0x738a01b5, +0xf4fa083b, +0x8310403b, +0x232c61f0, +0xf3f0e18a, +0x20dc9439, +0x4f0b90b6, +0x7a6d3259, +0x469964b1, +0x4924f0c7, +0xe67822c0, +0xf3af5718, +0x69241376, +0x79b25b38, +0x4d709313, +0xb84461ac, +0x9127a192, +0x031c0df1, +0xb8e5813c, +0x5243495e, +0xc3c1d424, +0xfe90c59a, +0xddc4221c, +0x7a67f45f, +0x7536c0e5, +0xadbef7ea, +0x34adc6e1, +0xec677040, +0x4faf8a17, +0x26004f33, +0x7302b2bb, +0xf25b50f5, +0x82850ddf, +0x21b6187c, +0x98c03b0c, +0x24e1c611, +0x36e5b8d1, +0xc8ef643f, +0x46e4a560, +0x9a10c1b7, +0x6230b765, +0x879961ff, +0x2f0fa02e, +0xc520640c, +0x1f91fc8a, +0x4bcb2af8, +0x9138bc21, +0x216471ff, +0x59f5ef27, +0xe86bb61f, +0xd97fd6e8, +0x6b8ccf99, +0x9191d253, +0x486a9a8b, +0xf04b03e8, +0x2f10e5c5, +0xbaf9ef30, +0x5af7df7b, +0x4242160b, +0xaed72451, +0xf215a8d2, +0xb1bc5cef, +0x2e86d78e, +0x95d2d1a2, +0x4c6c0776, +0x9bd977ab, +0xea391a67, +0xf83bb55f, +0xa7300afa, +0xe147c4fb, +0x99963435, +0x12811d74, +0x7feec5ef, +0x77ee6090, +0x3cc81dd0, +0x50ac4c48, +0xc42932ca, +0xefaa06fa, +0x81393ee9, +0x9256ac9d, +0x20d71763, +0x5f451fc1, +0xbf9e23ca, +0x6c85a1e3, +0x29f3e966, +0x4abd8456, +0x0afb0dc5, +0x4d5808cf, +0xec86ef22, +0x66f982a4, +0x4dbb3a6d, +0xe1f5d2ce, +0x2c1e49a8, +0x9789b23c, +0xfd5e28c6, +0xf44f6d12, +0xa64a270d, +0x8385c44f, +0x169decbc, +0x9128c15c, +0xe61464e4, +0xe3b827e4, +0x74963fc8, +0xad165487, +0x86225655, +0x6f92a414, +0x9f1e6cf1, +0x01054003, +0xd6c57e13, +0x894e4827, +0x6f98b8f4, +0x22845b51, +0x8f84904c, +0x4b6c6a7b, +0x6eb08c51, +0x988e9e93, +0x2a8ac8a7, +0xe38ee236, +0x60a98fb7, +0x8dc92fb1, +0x62fbf3eb, +0xde09e7ba, +0x25ed246d, +0xcc84ad9c, +0xfe9f581e, +0xd72c2b2e, +0xd9db8564, +0x2f739a79, +0xee37b051, +0x5951e320, +0xc3a01c4b, +0xa690817a, +0x91b29a62, +0xee2209cf, +0xe97623ea, +0xfd6d8ead, +0x69671e1c, +0x3b9459dd, +0x492815ea, +0x7e85727b, +0x9f77aaf1, +0x928ff19a, +0x83cce1fc, +0x4913fe7a, +0xf1029dfe, +0x714e6e4f, +0xea6c437c, +0x36dac7b6, +0xacfa95b2, +0xdbe0dd8f, +0x098fa05a, +0xf9a47972, +0x3bb39e45, +0xe4d6500d, +0xc1d904c9, +0x2c9ea80e, +0xfdd631c9, +0xdd76c64d, +0xaccbe440, +0xec8aaf22, +0xd7473b36, +0x7545cc50, +0x65b9d771, +0x68854b51, +0xb0a7e535, +0x046fc222, +0xc79602e2, +0x42010b12, +0x47109f9a, +0x2a55cbb0, +0x51376861, +0x99062869, +0x189a65b8, +0x7c8d9a04, +0x0b06998f, +0x337f9051, +0xdc4e37eb, +0xb03087c8, +0x6d6ac0ee, +0xd54777f8, +0x66c39608, +0x55b1d0d8, +0x7871ce58, +0x1ad8d093, +0x168c1ccf, +0x8ca43657, +0x1ace648f, +0x7f6ca8f7, +0xc19e85f5, +0xa06fea91, +0xf42a888e, +0x432c5649, +0x20eca594, +0x03c39521, +0x62234807, +0x3057def1, +0x8aa893a0, +0xb2a407f7, +0xb454e224, +0x0dce2a7b, +0x49750767, +0x6d7ca94b, +0x9eb32cfe, +0xcd357f50, +0x3e02a3a7, +0x08e561b7, +0xba2ee729, +0x30ac69b2, +0x9f31a809, +0x95902b98, +0xc89497ae, +0x00ee0364, +0xe7e5fadd, +0xaf3c5b3a, +0x55e3f93e, +0x67723cc3, +0xd6073597, +0xcde7dcf4, +0x5b2247e9, +0xaae02934, +0x48e99fb7, +0x356327f8, +0xaf09f87c, +0xd8a4b428, +0x8eac5250, +0x55f48d4c, +0xebe92d39, +0xa2805a33, +0x27ce8883, +0x54cc8a52, +0x621db838, +0xb6ee3dd2, +0x2b59eb5f, +0xf234f5c5, +0x8ff9d72c, +0x5bd4f6e9, +0x30c3be56, +0x8e19d7fc, +0xbdb045e9, +0xcac73d55, +0x6d33b79c, +0xd69c9f86, +0x87b46e71, +0xce7f7f5b, +0x46eaa212, +0x8fa2e6ee, +0x11291804, +0x8e57ac47, +0x7353f364, +0xbffd78bb, +0xef2c7b9d, +0x7c2229ac, +0x98b2b211, +0x1b62c794, +0xb9044e04, +0x3f910158, +0x6ce9fe7c, +0x641cc646, +0x312c30ce, +0x2afcea50, +0x15501566, +0xad5e3bb0, +0x7081d9a0, +0x69162a21, +0x4bcb48ad, +0x44392748, +0x95105753, +0x6c54b554, +0xea030b7b, +0x926bc20d, +0x77094848, +0xfc015e98, +0xe52cd7a2, +0x45558e6e, +0xefac11c1, +0x4f29b4a4, +0x9850d0de, +0x1acc11f4, +0x715072ce, +0x56b9c048, +0xa810b744, +0xbdf11121, +0xc11781fb, +0xa31ef376, +0xea3a8508, +0x956293c6, +0xfc95c69b, +0x4c6af642, +0xf9f17432, +0x89b2366d, +0x828ed2c6, +0x00982f5d, +0xb7df053f, +0x544a8992, +0xc338ab4f, +0xe17372a1, +0x6ef65113, +0xc1f189b4, +0x4a2137f9, +0xff4b9fe6, +0x35c0b428, +0xabfc4940, +0x4a2c7379, +0x6891bd93, +0xfc699175, +0x19dff854, +0x6e38e8a2, +0x3f8fbc2f, +0xad01be9b, +0xad80fd12, +0x2447e378, +0x5bf1d52e, +0x7320f5de, +0x208945f0, +0xa8f486e9, +0x3d94983f, +0x92ddb928, +0x958e9e21, +0xbcd7add4, +0x0432c02f, +0x38a8e73b, +0x3bd59519, +0x78cb578c, +0x66d4f7d3, +0xbef7ab00, +0x33a5265b, +0x286048ae, +0x7348e652, +0xb616b76c, +0x2a7b7af0, +0x8a26ceea, +0x5d060d10, +0xaf5e3336, +0x55885c29, +0x437cd6b0, +0x2a0aa0f3, +0x914fef18, +0x60639191, +0x8fd1b4dc, +0x3210ace5, +0xdb1d0cf4, +0x4f7ec4d5, +0x88a81765, +0x961ec3bd, +0x306ac03e, +0xc0ec606b, +0xc0db5ccf, +0x43bb2e77, +0x79dc017b, +0x61f03719, +0x2c1be47e, +0x2c37d6ec, +0x63fea1d3, +0xa40d9a87, +0xaeba19da, +0x9ceb85d5, +0x92178407, +0x16ff30c6, +0xa3fa94a1, +0xc4c809e9, +0xa468871c, +0xfef81d7f, +0x001ece88, +0x7704cb5b, +0xe6e8ef1e, +0xcd7f3384, +0x820c2529, +0xa428cb22, +0xe6a9ac56, +0x226132ea, +0x0ca4b8de, +0x4d3509c0, +0x43e6d774, +0x71d92e96, +0x449eaf8f, +0xb69f80dc, +0x5e977b22, +0x2f101b72, +0x97d9605e, +0x6ea51df4, +0x40b25b2c, +0x2001ae24, +0x06a4a62f, +0xf7c098a5, +0x6f00e2fc, +0xe9f05bdb, +0xc8bda1db, +0xee616216, +0x6d84e838, +0x4ac4e9a3, +0x9534c429, +0x6bbfc525, +0x42ff04ee, +0xc21b3106, +0x397b7424, +0x457f6ef7, +0x7a9c0cca, +0x210cbb7e, +0xea65792a, +0x1733a330, +0x94d3338a, +0x4b85263f, +0x11d7c276, +0x76b66a45, +0xeabb70d6, +0xaf565312, +0xe0972221, +0xf413dc0b, +0x8c403e10, +0xf635101a, +0x709763c0, +0x3951c2b0, +0xfc55ee12, +0x02a9f81b, +0xba3dd554, +0x06b35e46, +0x391ccd8f, +0x98ebb1f1, +0xddef0d3e, +0xe95538cb, +0x26875edb, +0x11340c00, +0xfbf04d19, +0x976d5b29, +0xc74a929f, +0xb5d3614b, +0x76e8594e, +0x2ddccc19, +0x148bd94a, +0xf4d4996e, +0xe1439701, +0x2118f0c6, +0x158527e8, +0x46ef849e, +0xdc8085fa, +0x51d66715, +0xb9d857ca, +0x5e497273, +0xd0ee1e97, +0x36265732, +0x2b044e48, +0xf7be39fe, +0x9eb6afa7, +0x5b4a92ef, +0xeba1c802, +0x11196e8a, +0x3b48d823, +0x9fe7c1b0, +0xeb53f9e2, +0x0e696c0d, +0x4adf39d5, +0x0adeedf6, +0x55b7751a, +0xf5ef8020, +0x106acc11, +0x35185166, +0xf435a888, +0x432249a5, +0x293e3b75, +0xec47bc15, +0x4efcd9a8, +0x0a16d004, +0xcad51210, +0xe4153e72, +0x98c89776, +0xdb2ffb9f, +0x38ca03cf, +0x07201be4, +0x604fd9dc, +0x15ef6a45, +0x5b450d09, +0xf2b2b053, +0x763dfac2, +0xb6ea47b3, +0x811ddcf6, +0x45444af7, +0x2b0bfce5, +0xcddf5d03, +0x270ad807, +0x8fe11932, +0xe1d31365, +0x8dae40e2, +0x5054f88c, +0x755cdcb6, +0x40a5a366, +0x5d4aa655, +0x17df9aa0, +0x4130fd3a, +0xf9705a96, +0x1cbcd681, +0xf554aab5, +0xb15b537d, +0x52cafcd0, +0x9c67024d, +0x80cf4019, +0x7cc33184, +0x8d753a85, +0xe8365847, +0x169676e0, +0xa75b184c, +0xd2c36f1c, +0x28c7b15f, +0x9f9ab21f, +0xf2afb261, +0x7f3a6a47, +0x9b9cc22d, +0x28f3c377, +0xd420f06a, +0x700bbba4, +0x02df6d08, +0x9fde5e23, +0x7aeb2a1b, +0xc43c2318, +0x6504c9ed, +0x7246d386, +0x909b0927, +0x69ad96ed, +0xffa54342, +0xab853291, +0x4f74634c, +0xd67c331a, +0xb9a87722, +0xa5b08c3b, +0x1d90b210, +0x2db2963f, +0x8a5ea1bd, +0xf95aeb8e, +0xf3dd2569, +0x5a696205, +0x2df4a42f, +0x6a6646a1, +0x436d8ac0, +0x24adc05c, +0x8e6b1fa3, +0xecd0be1e, +0xc95250f1, +0x8a36949f, +0xb099b24c, +0x5a986c24, +0x9ed649c2, +0xd2eca182, +0xd719fd3a, +0xe259fe65, +0xdfe60f9a, +0x2fb6fd00, +0x10aa6c37, +0xabb6492d, +0xf340d2dd, +0xde23f880, +0xa594cd9d, +0x53d3c213, +0x6bf2dffc, +0x2f330478, +0xd99d774e, +0x797329ae, +0x17dc856d, +0x7d565d4f, +0x4cae306a, +0x92d9ae00, +0x67b0f058, +0xa6b9c90d, +0x58e96572, +0x1bc373aa, +0xb18f2916, +0xcb67205a, +0xbbd0ed67, +0x641eec97, +0xfe40cc08, +0x966841f3, +0xc3069545, +0x603be9dd, +0x2c249074, +0xff879b23, +0x4a92b7e3, +0x36ea40fa, +0x44984dd9, +0x7f63c262, +0x349602c2, +0x788a42ac, +0xf434f732, +0x0d1a0a9a, +0xa1fc7b97, +0x248b6670, +0x8587fc3e, +0x6b68b1ad, +0x0524f45e, +0x7b22de02, +0x86527229, +0x7a453d02, +0xde64b190, +0xfd9de60c, +0xef6edd29, +0x57ce2d75, +0x49bc3537, +0xa94caa9d, +0x26ff46ab, +0x38523294, +0x2af15959, +0xc0f57c51, +0xbdceac5f, +0xc0b150e6, +0xf57e8e78, +0xafba4d26, +0xa3e062e1, +0x9f8593e9, +0x1c50b095, +0xccca9479, +0x982110fc, +0x985b69a0, +0xfc4cb0f3, +0x1b505002, +0x66664b87, +0x3a22f3f3, +0x1ba5c16e, +0x820a239e, +0x31b94cfd, +0x3f2c3b63, +0x5bed303b, +0x7c83cd69, +0x10314e9d, +0x5a876cf3, +0xdea5ea3f, +0x42ce9ad7, +0x0c0e21bd, +0xe31831f0, +0x047bfab1, +0xb2648319, +0x64c63e5e, +0xd7c65f67, +0x2f695b2f, +0x7a19d603, +0x346fc8c2, +0x147bf2ee, +0xb43228dc, +0xeb9d0494, +0x083ea51e, +0x9b38370f, +0x5e9ef147, +0xfffcb98a, +0xdb624b81, +0x9034d105, +0x2973f432, +0x3bd8ffb6, +0x11a99a54, +0xd4a1098c, +0xe5aaefc6, +0xbb1a67c5, +0xf0e6ad4c, +0xc13c73ca, +0xc6533a2c, +0xeb4a62b3, +0x2acafd5c, +0xca8030a8, +0xe4bc64e9, +0xb2ff9f06, +0xf9224ce5, +0x140d8947, +0xbd390d29, +0x2f9f3f27, +0xafa01bbd, +0x2dc17a05, +0x30124497, +0x75b74270, +0xd77aeeaf, +0xc6ca98ba, +0xb40744b6, +0xda95a69a, +0x88f67631, +0x793f9efe, +0xf3ebc2e6, +0xa645784e, +0x77ff409c, +0xf44e0c36, +0x5691da82, +0xe37bb7fe, +0x68863be6, +0x8015d231, +0x8d408837, +0x0a09595a, +0xecf432fa, +0xf256f8a0, +0x718eb22d, +0xd12676f9, +0xfe8a16e8, +0xcd792040, +0x42a8333f, +0x9175ee97, +0xeefc7a0f, +0x68cd164b, +0x5b2648c6, +0xac0ac122, +0xdda0d7a3, +0x9847e802, +0x1eb26751, +0x9a576655, +0x68534211, +0x1b12a4cf, +0xae2b2f8b, +0x26c267cc, +0x694753c9, +0x68fad247, +0x9909c782, +0x94b13de2, +0xcd0d6e1a, +0x5f7f3433, +0xf961348f, +0x4ba1aaac, +0x04b11dba, +0x78037a0c, +0x3b3bef9f, +0x7ea4bd27, +0x1d8c6998, +0x00ff4444, +0x06717ecd, +0x0e5cf2e9, +0x239dcf9f, +0xb986660f, +0xf9aa68be, +0xeeeb55a7, +0x307ccfcf, +0xfc48cebb, +0xe06db51b, +0xeb412f4c, +0x59cd1d7d, +0xc9cd1356, +0xf8eae237, +0xf2ed2299, +0xf2c69417, +0xbb3d5cfb, +0xea6ff182, +0x8f3194b5, +0x7858b580, +0x267363ad, +0x43be3b37, +0x66f6f7a0, +0x88e9a732, +0x02aed71f, +0x46b618d3, +0xb1069c51, +0x37d0e747, +0x07d1d111, +0xca721af7, +0xb3ef62b3, +0x78fb9131, +0x0cf59e86, +0xb149164d, +0xea0680f3, +0xfde83786, +0x0ff3d983, +0xd6805128, +0xa1605df3, +0x847d2599, +0x137f60c8, +0xfc09dd10, +0x1c4dbd5f, +0xf87d4c04, +0x77f2fee5, +0x568e0a84, +0xa35ebb51, +0x2ab91e21, +0x8557ced4, +0x7e5c3934, +0x605eb788, +0xbe24a0b6, +0xc75ef44c, +0xe28212ee, +0x0abb16a0, +0x508e08d2, +0x81e27c5e, +0xb7ac0b32, +0xfe25ae90, +0x87aaecf5, +0x130ac5f0, +0xbcd40ed1, +0x09be7ed5, +0xea946534, +0xb3eb6bb5, +0xcb8660ac, +0x15260b93, +0x9d0b44ab, +0xdc90ffab, +0x7d05be3d, +0x4584463a, +0xa57a4849, +0xc76a5321, +0x038aa77c, +0x0892e879, +0x812ea210, +0xeff4ded2, +0xba89fa17, +0xf6fee870, +0xa2886a03, +0x05dce733, +0x2bc7d367, +0xa1cce8d3, +0x5c4360d8, +0x1120aa12, +0x5c34d2cf, +0x4bb9ae09, +0x53cbd618, +0x8f5e0ace, +0x96c2f573, +0x86f8590f, +0x6d8cd9ff, +0x6048ac57, +0x7b1ba0fd, +0x8d4318d8, +0xc40d24c7, +0x006000e8, +0x92d13a6f, +0xc6250a4e, +0x4dd8b94a, +0xe1a98d18, +0xf5d78dd2, +0xee0a9880, +0xfcd0321b, +0x903fdd40, +0xea0b8e62, +0x7c3e945e, +0x0598e5da, +0x0548a5a8, +0x5413c2ce, +0x2c44c7e7, +0xb6c5297a, +0x02318ff5, +0x1dca4b2f, +0x99db9500, +0xf663e666, +0x7e19183c, +0x49a8cc0c, +0xe6ad6a0a, +0x657ec822, +0xd8846eb4, +0xc0da5798, +0xdd0eea7c, +0x46337564, +0x2edc5e55, +0x393d7e7e, +0xd136e982, +0xe0472092, +0x7ecb0a3f, +0xd3d290b9, +0xfd8b0cbf, +0x87e48fa8, +0x5e2fee9f, +0x6d9d3810, +0x8a41566d, +0x997663aa, +0x0a8b05e4, +0x0c75f27d, +0x9a52c96e, +0x8dacfcf1, +0xac1e25bd, +0x69959715, +0x0689ecd0, +0x9c182272, +0x0d363b7a, +0x73ec66e8, +0xfc2c8d31, +0xad6cc9f1, +0x0e5c19a7, +0x20d67f0b, +0xe6f959ec, +0x54b89761, +0x3a1625c8, +0xb6739ca7, +0xc4bca5ec, +0x2ff12a8c, +0x47d602fe, +0x0d804bed, +0x9716d52f, +0xb6189d69, +0xc54a0437, +0xdc890836, +0x3e859ec9, +0x65666fbf, +0xc5a5239c, +0xa819e592, +0x1e2b8677, +0x04c14ff5, +0xaacf564d, +0x208acd90, +0x97eaaefb, +0xff372f41, +0x6a9f1725, +0xa1a9e539, +0x8d1fc073, +0xdc4166f9, +0x96e93ebe, +0x2741002d, +0x1a026ef9, +0x74df54ee, +0x5b59e0a4, +0x12cc2717, +0x3ef72ac7, +0x42e8e1c3, +0x5b6db664, +0xf1e8d803, +0xe563f180, +0xe6fbee2f, +0xf34668c1, +0x82b089ac, +0x1cd4d445, +0x571820c3, +0x1e553b1c, +0x3d0dc8ba, +0xf87037a0, +0x7b2ce351, +0x6495621d, +0x7f4d2fe4, +0x967646a6, +0x49ffc551, +0xf9670087, +0xcaf67292, +0x20e4254c, +0x9ae3c772, +0x091e6ac6, +0x9fc7ecd2, +0x021de8a9, +0xd7906ef7, +0xb6ecddac, +0xba7ec71a, +0x3c23d124, +0x68b361ee, +0x9030d41b, +0x7d39ab43, +0x555cea54, +0xa14cc26a, +0xe2e140d6, +0xb161afc8, +0x35b75a96, +0x0f55a554, +0xb1cf66cb, +0x23811fd4, +0x2164f593, +0xb88102b3, +0xdafa9238, +0x88b365f7, +0x92c22c38, +0x97b19c87, +0xd656c5c5, +0x618abdb1, +0xb7478056, +0xadd9f74b, +0x409b67fb, +0xbd8e5581, +0xa59f6422, +0x53911bed, +0x54cb4a30, +0x495576c7, +0x8f3b4ea5, +0xa06f765f, +0xf0e0f7b6, +0x108f37ba, +0xdf07b53c, +0x01e3bd2f, +0x43817eb0, +0x3a9cfde0, +0xb96e3503, +0x912ea59e, +0xb8fbe5cf, +0x904c69da, +0xbe580976, +0x11ca0abb, +0x06b183b3, +0xf818963d, +0x0b1ea076, +0x2324cd1c, +0x133ea1e6, +0x56ac7cef, +0xf347062d, +0x5573054d, +0xa0740cbc, +0xfc9b060e, +0xc2cf016d, +0x288c2d6b, +0x22a614c4, +0xfbc09fc4, +0xbfc40bd2, +0xa68c6991, +0x7113073c, +0x8e861e7a, +0xa254f10c, +0x631073f6, +0x3cda7033, +0x4fa58026, +0xc39272e7, +0xa8ae0a16, +0x355f1701, +0x69a4fefd, +0xadc3265c, +0xa83f63db, +0xfc433204, +0xba32f048, +0xef08235d, +0x6fdfe695, +0x379b2757, +0x9cf3bf7a, +0x5cf2bd99, +0xd1321e06, +0x9bdf232f, +0xa2632c23, +0xa70fa012, +0x2dd04889, +0xd53c0d33, +0x524ec897, +0x3984dac0, +0x8c1e010e, +0x297b5d0f, +0x93717bd7, +0xfac46d7b, +0x02f54a4b, +0x67dfd9a3, +0x62d1b154, +0x547dfb2d, +0x69d3b7ea, +0x4d135c50, +0xb8b08be7, +0xbd0fb5f2, +0xe0e3063b, +0xb45efff7, +0xf1beb478, +0x6a04d730, +0xc30d5de8, +0x303e1c20, +0x2f7148ed, +0xc39500aa, +0x1dd05468, +0x94e243e9, +0xdb799808, +0xcc273d3c, +0x6d5f781f, +0xb24b0b00, +0xea604b11, +0x66e92bbd, +0x4555510c, +0xed614cd9, +0x1840864e, +0x5872e94a, +0x3d0d1e17, +0x8312cf2f, +0xd27f5af2, +0x212d5e8b, +0xa35114ef, +0x7cdbd2d9, +0x190806d0, +0x32c525e0, +0x2edec857, +0x4c69033c, +0xba7970c8, +0x41ea47a5, +0xec9435a7, +0x60b0a407, +0x6332af3d, +0xf39c0a7f, +0x71eb74c2, +0x88a00457, +0xa64d794a, +0x90990c0c, +0x683cef12, +0xcc0a63b0, +0xd45ad1db, +0xfabf6a01, +0x80ae66fd, +0x1ae8d7c9, +0x2df10336, +0xffb1a1ec, +0x35c0745a, +0x6dddbe89, +0x2a726471, +0x73c16a4f, +0x109c6ed3, +0xd7201ade, +0x890dc68c, +0x3a4f4697, +0xea128f6e, +0xecc6bf26, +0x5a3955ef, +0xf7c02c4c, +0x9cfcf3df, +0x4df2ac4b, +0x5800cbd5, +0xa4a41b25, +0x6085f861, +0x83105ab8, +0x9b726e83, +0x8201bcc7, +0xfdf47166, +0x1eb0de61, +0x96e83dca, +0x82deb85f, +0xf23fbe9f, +0xde801dc1, +0x026076b6, +0xb1d43e79, +0xec2a6a67, +0x8dc851e6, +0x580f661f, +0xa218c8e9, +0xb2545788, +0x84591795, +0xc994407a, +0x0aba90f2, +0xb1c4c5a8, +0x83cf94a8, +0x5174dc94, +0xc1c4974f, +0x5c3cfd86, +0xa61294b0, +0xcc2c3846, +0x9cc0a733, +0xe0f5bdc7, +0x078fedfb, +0xc40f1f94, +0x56ff364f, +0xa22198ad, +0xf2cd9143, +0x60ea2134, +0xdb6aa85d, +0x6dfc6dc1, +0xd323ee4f, +0xbaa2b50c, +0x0375635c, +0x44f34ba3, +0xba3de097, +0xbc40e5aa, +0xa9574f14, +0xe1174fdd, +0x572eaf03, +0xaa9ef5ab, +0xa480e23f, +0x0328d42b, +0x482b6285, +0x71423228, +0x6884b23f, +0xb8a4cd4d, +0x3a7f49ed, +0xf98a77ee, +0x14c0d8b2, +0x7ad4a8c6, +0x1f400f49, +0x11d4aac2, +0x1a721a3c, +0x6077149c, +0x02ac9f9f, +0x7d9cb594, +0x80655c0a, +0x976bd7fc, +0xcbdb96be, +0xc2171f4e, +0x7e18cd90, +0x0366eb67, +0xcda61d6c, +0x8cb99bed, +0xbd6bdd3f, +0xc2451299, +0x686fcfcd, +0x950f26a4, +0x572e373f, +0xecbed36d, +0x7eaab874, +0x026c4054, +0x423ddaaf, +0x38c386e0, +0xb834b0be, +0xd8b9a1f1, +0x3f4c3426, +0x0ff77ab9, +0x3e5f63d1, +0x1db87ba9, +0x7b071ab4, +0x149ea101, +0xd443709d, +0xa192e736, +0xe43caeab, +0xcc909686, +0xff48d80f, +0x0d64bf6e, +0x4312db91, +0xa04e229d, +0x75609bf9, +0xaf55b03c, +0xd9879311, +0x92d1eb09, +0x2a1a94ec, +0xbb155359, +0x6e7a557a, +0xdaed80d1, +0x53fc5e5f, +0xfd21a587, +0x4d15f33b, +0xd58005f7, +0x5c5cb142, +0xc9d4239e, +0xa73ba8ce, +0xd2b0ec2f, +0x67994c58, +0x53d79140, +0xc02eac5c, +0xd46fdc39, +0x876d00b1, +0x542be9a0, +0x0845982d, +0x3b1b9c81, +0x69582e46, +0xe747db19, +0x1c0270bb, +0xe74c63c2, +0x102b3d6d, +0x5d79b40d, +0xd9b9c1e7, +0x85ddb1cd, +0x390fc076, +0xdc8a89b4, +0x3bc8e3b9, +0xa4460871, +0xed9f7a94, +0x4d752473, +0x6a4f1cef, +0xf7d7e887, +0xcee38f0a, +0xaf62e6e5, +0xd28ba571, +0xcbd580de, +0xe7ab6169, +0x74b903ba, +0xbfe251b0, +0xa8adf62d, +0xf1f1b20e, +0xf0843410, +0xe8d9a886, +0xb848c59e, +0xa4a6aced, +0x9500cc66, +0xd813485a, +0x254d7365, +0x3e254096, +0x34db126f, +0x960ad383, +0xf6cec448, +0xe471fefd, +0x19deac98, +0xaf784763, +0x6f7827c7, +0x21d6c158, +0xc0e56044, +0x8fa7ac8b, +0x0c075160, +0xd548dd6a, +0x61686c94, +0xa2a3fe4b, +0x4c73b750, +0x917fec47, +0xdcf27cd0, +0xa0e5169b, +0x41172b2e, +0xbcc37c23, +0x93e2be43, +0x7a22c186, +0x9a8f7e47, +0xbdaf422a, +0xd640f0ca, +0xfcbc0f00, +0x98381ff5, +0xe8cf40af, +0x13430848, +0x5a0e09ce, +0x5e759bdd, +0x6ec0881c, +0x0ac948fb, +0xd24b33ff, +0x2bab38cb, +0xbc968dd9, +0x696ea419, +0xb2b6fb46, +0x1bf4bf6e, +0xc8110721, +0x9380ee0e, +0xc7bdf61c, +0xeb8f95bb, +0xe5c72b20, +0x8d065648, +0x3f658b32, +0xfb51955c, +0x70abcb30, +0x622cb37b, +0xce832732, +0x324858d4, +0xf72da37a, +0x77a82877, +0x9fa0c1c1, +0x8880001e, +0xdc85baab, +0x6812f00e, +0x137c9b45, +0xeb10ff3f, +0x9baf571e, +0xe5d4d360, +0x9ebf21fc, +0x17bed331, +0x4933ef6d, +0xc9cedba6, +0x4bbcdb97, +0x07bf5edc, +0x32cc35f5, +0xbcb5b0dc, +0x1e4a3031, +0x58cd072b, +0xa6d8905c, +0x349c25e0, +0xb9fe0325, +0x9fc9a542, +0x1cb3ad9a, +0xc9f1fa76, +0x37a987b8, +0x14b359a0, +0x636499cf, +0x87ada203, +0x749fdd6e, +0x55bebdd6, +0x3ae60796, +0x5a3551be, +0x90e58909, +0x30747437, +0xd53ce16c, +0x39a01a36, +0x7ed46fea, +0xea5dd2f0, +0xa5d35455, +0xe2fc7d35, +0x364e44d6, +0xc4cee23e, +0x5302b802, +0x14b5a65f, +0x9deb8e95, +0xce242b9e, +0xe24545ac, +0x4824a696, +0xafaff199, +0x498cdeda, +0xdb10f2c8, +0x37eacdbf, +0x3efdf330, +0x59f6d158, +0xa09dbfea, +0x270a60bd, +0x9f5309c4, +0x65ddd8b4, +0x18655505, +0x35f90cc3, +0x9039ca10, +0x168c4aad, +0x363717a1, +0x87db7d65, +0xbe3bd864, +0x1948c3d9, +0x109116a2, +0x85137a54, +0x0e916aab, +0x8146801e, +0x750fe6b1, +0x40cc101f, +0x2ac6615b, +0x33367258, +0xecac8219, +0xd9b6d33c, +0xb6e82e57, +0xd36f556c, +0xe41327c1, +0x7d2a4cde, +0x8f857783, +0xa3b32d2f, +0x9f31defb, +0x4d571a6e, +0xc99d5802, +0xa746e0a3, +0x9d358bbd, +0x2c478b0c, +0xd381728c, +0xd20637eb, +0xd7a45296, +0xd9f4dc55, +0xf2804b4a, +0xb34a08fd, +0x2074b911, +0x71cb06f3, +0x0f253989, +0x8e3e3609, +0xe4b0e3cb, +0x06ceaadf, +0xcabb7a49, +0xf56dbb19, +0x5147ca3e, +0xf9d2a7de, +0xdb59674c, +0xaba8c1bd, +0xa5080ace, +0xe94f7033, +0x2c66d816, +0xaa398c0b, +0xd7da8996, +0x79889cd7, +0x47152f47, +0x6615f0ac, +0x22a8b11f, +0x74c4d69c, +0x80a59252, +0x346e08b3, +0xdd5750d6, +0x54b5f561, +0xa6b32693, +0x48dd4cc6, +0xea557ad9, +0x66ad0ab9, +0xe0cf607f, +0x4715ef5f, +0xa38a9656, +0xa508c107, +0x788aa8dc, +0x5ddde920, +0x2c3cddb4, +0x1cc906b7, +0x0594d88d, +0x9e8cf5e3, +0x3d6ef598, +0xd481c6e9, +0x50516883, +0x79cc9c1d, +0x4a90aa39, +0x60efa0fb, +0x097ce1e9, +0xf4722134, +0x35608c80, +0x196890f1, +0x4241f600, +0x69d94766, +0x8db386ad, +0x92a83d99, +0x69332d01, +0x4cbed738, +0xc3894c56, +0x84efdb62, +0xa8f35a4a, +0xf0374549, +0x4168858a, +0x6bb01f2c, +0xfca83848, +0xcaaffba6, +0x304d13fa, +0x3c52db5b, +0xbd12720c, +0xe5d8ae8c, +0x7226beef, +0x798fdb7b, +0x6afc9817, +0x3425efe0, +0x0e607607, +0xd6029659, +0x8deeb1b7, +0xb82a1c6b, +0x52d1b0d7, +0x0261538d, +0x5ccfac55, +0x198e8b1f, +0x72b9da15, +0x7f79d5ce, +0x7853be29, +0xea7ef20c, +0x914db487, +0x96785e4e, +0x9cba612d, +0xa8223bb0, +0x3043625a, +0xa2320e26, +0x295c4900, +0x3e02071a, +0xd358afa0, +0x0c78250f, +0xdc724c4a, +0x391f1231, +0x551e70f4, +0x0b43d24a, +0xea2d1caf, +0x2acf98fb, +0x57d921de, +0x74ec17e0, +0x3099f4c9, +0x2a6d56fc, +0x46db6ae3, +0xf48a6850, +0x02fdbea1, +0xffcbabec, +0x78f553a8, +0x0fb0f9f9, +0x08fcfdc7, +0xd473ec1a, +0xcee0cfe5, +0x342d9c45, +0xf101d13b, +0x462d761c, +0x4f72e2b8, +0xb38dd876, +0x8f28a7ae, +0x3eff2d40, +0x6b98d117, +0x868813de, +0x0c842904, +0xbb975df2, +0x091956a1, +0xe096f923, +0x07dffaab, +0x495f624c, +0xc0faf15b, +0x771d197c, +0x0a147121, +0x996688d3, +0x45f5b4ec, +0x4d31f02d, +0x5051f944, +0x0f750360, +0x7bdbc845, +0x06f5aecd, +0x90fca2f4, +0x0661aca9, +0xd794316c, +0x27d380c5, +0xc8e430be, +0xefb7d451, +0x8c3f7e17, +0xca937b42, +0x5c7c0f78, +0x23cdd9e9, +0x3849b36d, +0x33e22877, +0x81ac6900, +0xd371b5f5, +0x74f1d39e, +0x41855f11, +0xa6121eac, +0xb17dfe50, +0x4e5f3e31, +0x2a27764a, +0x4e9e8bb9, +0x135c71f7, +0xa07721a1, +0x525a4b3b, +0x783f712c, +0xe18c09c7, +0xc10ae81d, +0xef5b48f2, +0x0629d43b, +0x75c59ef7, +0x285632f1, +0xd6ff159c, +0x39723145, +0x7149ecf5, +0x86cf3c3d, +0x28582ee7, +0x68bb92a4, +0xbe97c5d0, +0x8681edd0, +0x5d5cd238, +0x0a21d02c, +0x15863208, +0x66650676, +0x799d2a03, +0x8959d304, +0x1b390533, +0xc1fd2c3d, +0xd8136638, +0x5ca923ff, +0x21aee1be, +0xe5ba137c, +0xce3ddc80, +0x495cadd0, +0x2d5be2de, +0x0eb7679a, +0xf9ff85c8, +0xe0362bc3, +0xa6abd121, +0xd9808743, +0xcf45d41d, +0x524ad827, +0xe3dd36f1, +0x0f4d5f1b, +0x088c9707, +0x7e1dbe8e, +0x22ae78fd, +0xa557aa74, +0x6bd14845, +0x92242982, +0x0ecef185, +0x8708704e, +0x7df74292, +0x0f4b1047, +0xc94cace7, +0x2d9f4554, +0x97f739d7, +0x21f224d6, +0xf390aae3, +0x71b874e0, +0x1dee4954, +0x7c9cc698, +0x8ed967e0, +0xef94fc25, +0xc6d64219, +0x5ca97f72, +0x8998c7a3, +0x452bcd1e, +0x3ed29435, +0xbc322a9b, +0x3038bf43, +0x066470f7, +0x71262c49, +0x2adcd23b, +0x84d63bf8, +0xdc073dba, +0xf3a553ee, +0xcf04667a, +0xe5250101, +0xb0b7efd7, +0x13299bee, +0x3a2bbb84, +0x6354accc, +0x1c8b82f2, +0x25c23e4f, +0x2a75c44a, +0x6476f514, +0x60e1df06, +0x86397f7b, +0x85c3c8e2, +0x187792c7, +0x3b65782f, +0x437ee2e9, +0x67c58d4e, +0x6994e65f, +0xd5b1493c, +0xd5969027, +0x751b2788, +0x6b0add6e, +0xa84ef7e2, +0x60548bec, +0xd736d66d, +0x490798c7, +0x2eb1e08d, +0xdb0ef29e, +0xaa587e90, +0xf9c65398, +0xf31bbb16, +0x141d08e4, +0x12348efc, +0xe3d9ca63, +0xc51e4cb6, +0x3a2b2600, +0xc56bef06, +0xfaf1f586, +0xdd7870fc, +0x596e955d, +0x83e44cad, +0xe8f92081, +0x0dcb32a3, +0x824d576a, +0x6863c306, +0x58399512, +0xda131485, +0x5cef5044, +0x2dcd0872, +0x58ef930c, +0xfa323def, +0xb54ad0a2, +0x7a5a06e5, +0x163dcb6f, +0x4cd4e873, +0x8661fb58, +0xeb52c6de, +0xaeedcbfd, +0x021bf2b6, +0x4938919f, +0x0f7af413, +0x60794768, +0x771f4be2, +0xbd16f372, +0x0bce5e37, +0xc2c70c62, +0x14a3da72, +0x05ef14c7, +0xa61d9b41, +0x91a93a2a, +0x62b8f9ef, +0x17d7ea2b, +0x0df768f2, +0xca687ca9, +0x07ba20ce, +0x6d17057e, +0xa27906f0, +0x26ae1926, +0x6906ddaa, +0xc6d69889, +0x5d188a1c, +0x52227b0d, +0xa66feb9d, +0x5dc8e7db, +0xb959cafc, +0x92ffcddc, +0x8644532e, +0xa0bd895c, +0x449038f0, +0x7a8c699e, +0x2454f85f, +0xfa21c9ea, +0x9c5e2d50, +0xec35cb3c, +0xa4ff1590, +0x8176297f, +0xebc5c840, +0xfc58fd85, +0xb742484c, +0xea7f2680, +0x7d1096a3, +0x7d6fe426, +0xc637d652, +0x6dffe81a, +0x6591aa9c, +0x74c951d1, +0xce543430, +0x9afeb0aa, +0x0a18e911, +0x8c9dca68, +0x737c7919, +0xb3fe5b4a, +0xad3a640a, +0xc2b19d56, +0x8820c6ff, +0xd4fda3cb, +0x3dca0fd5, +0xdcac4172, +0x2f8f21c4, +0x194ff641, +0xaa0906d3, +0x9e5bffbb, +0x27702f19, +0x20b20e59, +0x8ab579f6, +0x293d238b, +0x4d08e9d6, +0xcc62e5ca, +0x6d580ba2, +0xc3051202, +0x930c6082, +0x8fd7a4ca, +0xa4eb169f, +0x3c8545f4, +0x56fb5bcd, +0x77757d1f, +0x367e9695, +0x18ca125b, +0x81c58835, +0xc69cf294, +0xbca87780, +0x6ebdf5f6, +0x46e1a0fb, +0x2d12190b, +0xdd72961a, +0xa35b2cc6, +0x1e370192, +0x51fc95c1, +0x0c125acc, +0x1575c885, +0x255bae8d, +0x5851fa1e, +0x03f22fe8, +0x6114f289, +0xf3ea5555, +0xa7943238, +0xf865f95f, +0x9cc91972, +0x0c5bb1c5, +0x064138f0, +0xbc8c7484, +0x0a214796, +0x604f8370, +0xcc5925f8, +0x2fda74c6, +0x31169ed5, +0x0e552c42, +0xfc6944d2, +0xfe81bb9a, +0x19a023f3, +0xe11c9468, +0x5261a6d3, +0xdf591201, +0x9ea10620, +0x0e16df2d, +0x653a8239, +0x4f43edc2, +0xff5d1052, +0x10cb47ec, +0xaf021ec2, +0x0991a172, +0xfa6b45a8, +0x49508971, +0xee683bb7, +0x36da664f, +0xe1614b41, +0x3f163921, +0xf2b1e6df, +0x6c721396, +0x556a4523, +0x6515c0ef, +0xb920c383, +0x2c09a6b6, +0xc1d4e2d9, +0x2ee556fc, +0x9bd13e67, +0x3bbc680d, +0x8552c84e, +0xa1765a50, +0x88b7ea6f, +0xb49d4da0, +0x656a5b4d, +0x244b2e5f, +0x925fe2dc, +0xcece5d0e, +0x75b17ec3, +0x0f1f120f, +0xdf961e4c, +0x1006e9e6, +0x6228f651, +0x2f66081f, +0x6fa6ef60, +0x2c5dd18f, +0xb193ec9f, +0x99065a91, +0x7e1c2e80, +0xe3911272, +0x7ec10949, +0xb9aaad9b, +0xd6f692ae, +0x87ab511f, +0x6cf46ac5, +0x7184272f, +0xf84f6dd7, +0x38d36620, +0xe69c2b0b, +0x9834635f, +0x2b70cf98, +0xe673a7c6, +0x9d41f5ce, +0xe577ca2f, +0x1aedfe0e, +0x6865c3ed, +0xa1d7c016, +0x7f0fc357, +0x484682a8, +0x3060678f, +0x440e5c87, +0xa609e15a, +0x3c155d1e, +0xb9222644, +0x75e4bcbe, +0xbe6ab610, +0x43fe6ebf, +0x29142055, +0x87af1d8e, +0xe23df334, +0x5a5c272d, +0x60e35501, +0xab10eb29, +0xdb7e6006, +0xad5288b3, +0xda61a37c, +0xd8f9b03b, +0xee0ce719, +0x7da6e62f, +0x00e1c718, +0x96f53779, +0x00588355, +0xffa10f9c, +0x13ffd4fc, +0xb0aa00a2, +0x8ac65479, +0x132b717a, +0x3d61fee1, +0xa5fb1e15, +0xd01f7cc7, +0xccb793b4, +0x1598b2ed, +0xb2dd927c, +0x0886c4f2, +0xe405c7c1, +0x6e2ddf94, +0xba4b521f, +0x8163ee5c, +0x1a954614, +0x043e8eec, +0xa0de8f2d, +0xb60b0cbd, +0xe749c69c, +0x7694f8d5, +0xc6709297, +0xf2092208, +0x6e068dde, +0x513947ce, +0x63f97187, +0x9d721b17, +0x2c7b4bce, +0x4075cef2, +0x7ae63533, +0x52f36895, +0x3edb3ec4, +0x2503a97d, +0x9b367436, +0x9f5bc8f3, +0x7582c906, +0x19f28e91, +0x9c3a5730, +0xccdb4f60, +0x35fc3cc2, +0x6ce2e3ac, +0x1364cfef, +0x6a91565c, +0x5d9dbc90, +0x2c108294, +0xef4acfba, +0xd7448cdc, +0x52f778d9, +0x42a0d7cb, +0x85f285b9, +0x747d38ff, +0x0cb1d44b, +0xfbb91fbf, +0xfc80d4d5, +0xaccc8d31, +0x17e7f6d3, +0xf54d3c80, +0xa3996d9a, +0x47644356, +0x4adb227c, +0xc5b09bf9, +0x882cec5d, +0x72f34737, +0x0c317249, +0xf58b67e3, +0x58011184, +0xd1741727, +0xc07b8505, +0x61851b71, +0xeb35f017, +0xd25ec2b6, +0x9f8f8925, +0x97470f16, +0xb7cc8b0b, +0xd3abcb30, +0x05d864b8, +0x0645adfa, +0x1ef3015e, +0xaba2820e, +0x99fce238, +0xd2c66984, +0x9d781d23, +0xa9b1fa28, +0xeeb7f8b1, +0xb9a5c57b, +0x217ca8a0, +0x9ce09570, +0xeecaf15b, +0x95db5139, +0xa67e8e3a, +0x1c15d194, +0x939a0f00, +0x89ea6b2d, +0xf06ce4b2, +0xe0953f54, +0xc88db721, +0xa7563a8a, +0xc83ce816, +0xea14a083, +0xcd62a959, +0x07e32d87, +0xaede1a0c, +0x572b5697, +0x6234c2d3, +0xd3d2a009, +0xa2865113, +0xe8fc4048, +0xfd87b3ae, +0x186ef0eb, +0xa930e209, +0xea64d738, +0xb3ab281a, +0x480438cc, +0x92cb6f6d, +0x1b84e470, +0x52536519, +0xbff93dd4, +0x993aa6bf, +0xbc85662e, +0x4a864c70, +0xde2c2f27, +0x550cd52c, +0x107ed003, +0x61f40213, +0xe77d93f9, +0x1510d4fd, +0x63814801, +0x115a1beb, +0x05d07262, +0x2a281a0a, +0x243fc986, +0xd5e516fe, +0x2603b93f, +0xd3aaa41e, +0x29281696, +0xb8cbccad, +0x746a0cce, +0xbc03b882, +0xf01715dd, +0xc697c3e9, +0x60c3c297, +0x77de7c7f, +0x0530f8b7, +0x5a6a5cb2, +0x842b987d, +0x46acc6c8, +0x1bcb3c2b, +0xd5ee1888, +0x0f88bb89, +0x78bf31f9, +0x54e6b123, +0x272e58e1, +0x3ae79aa3, +0x08b37749, +0x5feb79fb, +0xa992bd43, +0x11ae39d1, +0xb12d2ed0, +0x14f8f78a, +0x6ac519de, +0x86a321a3, +0xfd99b503, +0x6bee95b0, +0xd01784bc, +0xadb794ef, +0xd0784653, +0xb39e7f92, +0xd41b066a, +0xb227841b, +0x6f11851d, +0xe77a1031, +0xd841a9cf, +0x56443541, +0xf8c6d7bd, +0xa8fefa6c, +0xaf65cfe6, +0x55ef070c, +0x4b16fb64, +0x9753a746, +0x9cb96f84, +0x0a130cb1, +0xfea4ddec, +0x004b17d2, +0xbf48673f, +0xfac43457, +0x7f915c1a, +0xf79d088d, +0x65148414, +0x94ee7b02, +0x1c25d429, +0x773159d4, +0xa66345b8, +0x8168f43d, +0x16829462, +0xeed7e3fe, +0xb97d2a62, +0x9c88a8be, +0xaf26ab51, +0x8e97a4f3, +0xc6cb510f, +0xf23ad9d1, +0xb0309ffb, +0x5ee68893, +0x1bb90786, +0x58401228, +0x231fc663, +0x3693245e, +0xf4cfd6a2, +0xf2e8e4fd, +0x8bc8564d, +0x05f28eb4, +0xac49a20c, +0xf9a592d2, +0x34bad0f0, +0x2eeb967b, +0xb090323a, +0x86f334ef, +0x0510f6cf, +0xcf44ba46, +0x6e4944fe, +0x413dc6a2, +0x25282cf0, +0xe856c298, +0xa5522ea9, +0x21b7ccb6, +0xfa8eecc1, +0x1c9d7a6f, +0xc2fb806b, +0x11a26bad, +0xcfae8a6c, +0xcd6ffba0, +0x64c6e5e4, +0x9a17fd37, +0xd3bdd67b, +0x9e3fed99, +0x2478e3d2, +0x70ebf150, +0x53a55b00, +0x4dadf347, +0x583d0948, +0x573dcd01, +0x5573013b, +0x49fe7321, +0x34538686, +0xc33d1fdc, +0xc98900d9, +0x2cfe1291, +0x8463bc3a, +0xd39f0873, +0x80a953c4, +0xc71b148d, +0x394f89be, +0x6e7573e4, +0x1ccb06ce, +0x7766e4f1, +0x18097c33, +0xeaf3f617, +0xb5c36855, +0x2d42e1e1, +0x98a6a9c3, +0xe5f263f6, +0x5109a5fd, +0x75881486, +0xf1ea5113, +0x54d45973, +0x2be78f7d, +0x759dd71a, +0x9675cfa3, +0x5ba59f79, +0x7579fa73, +0x72d5c412, +0xec2dccd8, +0xb0099176, +0x68cd2ad6, +0xfcf39c63, +0x98229177, +0x2475fff7, +0x5bfc99ee, +0x8505fbb8, +0x41a55f2c, +0xf4508273, +0x09b77300, +0x1f4e3875, +0x688ea89c, +0xad94dc44, +0x5b9b2c39, +0x6a184f0b, +0xc5d52e02, +0x0f6e4b4e, +0x478c69cb, +0x7ff46dd8, +0x50108d93, +0xe290fa93, +0x3bafe880, +0x4baeb456, +0xc14ccb76, +0x7bc9fbf2, +0xc4d4cd76, +0x632b9844, +0xbee4b753, +0xac3d1c65, +0x2e724124, +0x88f38f1a, +0x3a753f27, +0x903d7d49, +0xfd264535, +0xbd653091, +0x1faefd92, +0xba0f492f, +0xaf1529b8, +0x4f5fb335, +0x84a6e953, +0x2ac02c56, +0x7355a3ec, +0x4a337a03, +0x3e037026, +0x18716178, +0x7bf3b400, +0xe017e37b, +0xb99c7367, +0x9509857b, +0x37c7da9b, +0xbf4ee987, +0xa073168b, +0x7b7b91ac, +0x501d3949, +0xf0cc0b74, +0x4f74ed19, +0xb200106c, +0xe74f3869, +0x97c178f8, +0xfc85116f, +0x3f32c823, +0xd019a4af, +0x68ae9a13, +0xf9127785, +0x93c9a386, +0xcf2bd9c5, +0xccabd598, +0x1669dc8b, +0x82702a1b, +0xe9e469d1, +0x6ce12a41, +0xe179bec4, +0xd2338627, +0x6f788000, +0x86f00e93, +0x09ded955, +0xd6e2d096, +0xbbbca20b, +0x991bed2b, +0x4ea6e56d, +0x51767f48, +0x5fc8657e, +0x607f5689, +0x7747bb97, +0x5f1a423c, +0xd51eec7b, +0x90d2d992, +0xda5e9a6c, +0x6dd1d5d6, +0x1647b911, +0x730e10a0, +0xc1a5f611, +0xd8baf1cc, +0x4354982c, +0x8e84f84b, +0x7d442082, +0xc85922ca, +0x7e1e8235, +0x856997ef, +0xc88f3518, +0x35637107, +0xa6c605c3, +0x31a737f6, +0x04f55ce5, +0x17dfb2a5, +0x0f4717be, +0xce247ea4, +0xc8a933e5, +0xa2ea0d04, +0xbd34396f, +0xb62cbf26, +0x4921fadf, +0x0379532c, +0x34e21013, +0x66ee9e26, +0x8fab372f, +0x3ebfea7c, +0x2cecd65c, +0x424199ff, +0x85b560c9, +0x90e5061b, +0x32ba1ae8, +0x9aa4670e, +0xe5c0fe8e, +0x427b8e2a, +0x3fec3701, +0xdcee4861, +0x03149922, +0x58254009, +0x55594dcc, +0xcfdf969f, +0x94b9378c, +0xcc643601, +0x823f65b2, +0x373697fc, +0x6747aff1, +0x030dfcdb, +0x6371183f, +0x43588477, +0xa86d1568, +0x67524861, +0x3853e1d7, +0x104fe607, +0xb7ccc60b, +0xb1df4e73, +0xa396635c, +0x4a6f8264, +0x6b0f1ff5, +0x2806c805, +0xab466be7, +0x48de398d, +0xa066c7b5, +0xe5ac2318, +0x2966e01f, +0xe259e44d, +0xb29c5768, +0x51db4cc0, +0x7a38cb8b, +0xf5b875d1, +0x288a3f14, +0xc6e87751, +0x5f18d49f, +0x8bc89e99, +0x0f36c734, +0xfcf9634d, +0x927ca23b, +0x3f0efdab, +0x09879259, +0x130725d4, +0xc5d1d5b9, +0x4aa02c5b, +0xcf405e47, +0x525eea9a, +0x96abdc9c, +0x6a45986b, +0xd41ad3b6, +0x1f207129, +0x8927552e, +0x54e48c83, +0x6d48c630, +0x6de20de9, +0xac08b972, +0xbeb58e59, +0x41b1dc90, +0x4f28bf7e, +0xaf3b84c1, +0x7deb7ac6, +0xed12b1aa, +0xff5acfa4, +0x526e0eb8, +0xdb73aa69, +0xa943d28b, +0xc2a0611a, +0xa7ead652, +0xb00dcd46, +0x4602eb11, +0x9ad33f5d, +0xf71eeb3a, +0x6093a081, +0x4660be17, +0x41ffdea7, +0x4043fe31, +0xe00b29c1, +0x6b06569e, +0xb7271e5c, +0xdcbce5b5, +0xe7408c24, +0x9116f014, +0xae5317b0, +0xa3be1a45, +0x19de56e4, +0x03ca9de9, +0x69f8d37a, +0x161b1d43, +0x816b7b0f, +0xe851a364, +0x8f26d9b4, +0xcd804410, +0x3b3fdaa6, +0x50ff88d5, +0x0f5c0157, +0xe0d499c2, +0x7e9156ec, +0x12a9dc9b, +0xecfbe520, +0x8bc5560c, +0x95ad5583, +0x9f92574e, +0xea6d29c8, +0xe6adaebf, +0x9a66f80c, +0xac375d1b, +0x2a00fdb3, +0x1e07ca7d, +0xe57a9c29, +0x8d705b95, +0xe8583d2a, +0xe21d87e5, +0x242efb5e, +0x58247b86, +0xc80bd1ba, +0xc9c45603, +0x851e31df, +0xc292f900, +0xb9c7f27b, +0x29ec5279, +0x8000bfc5, +0xf49e1236, +0x151a661e, +0x589a4727, +0x1016e372, +0xb3080cdb, +0x1696a138, +0x943944c6, +0x30c796e7, +0xca120599, +0x8c2d0308, +0x403a66ad, +0x80ef500d, +0x53e6cca6, +0x54963587, +0xd7424c0e, +0x76c283af, +0xb4b282de, +0x4b7d5051, +0x4348b373, +0x0c389a13, +0x086e91e4, +0xf0551696, +0x4cce65af, +0x1df588ec, +0xaca40425, +0xf847de34, +0xc38e1064, +0x0d4d79a2, +0x779898af, +0x99e1e849, +0x2a194449, +0xc57d199c, +0x4e64669b, +0x5a4a35a4, +0x2d47fb04, +0xb78281ce, +0x178668f5, +0xff178b7a, +0x1ced5c42, +0xe02dc4ac, +0x3da672be, +0x34546c83, +0xad38c0ef, +0x8520c712, +0x87cc1ef4, +0x0358f078, +0xf4c7ea84, +0x36b08327, +0xb733e537, +0xfb15da14, +0xc648271c, +0x7fd6726b, +0x6eec25ef, +0x6142befb, +0xdac91f75, +0xae2b76b1, +0xf71299b8, +0x7c401ba1, +0x732d5ba7, +0x90b77614, +0x9cf9f19d, +0xd252a887, +0x0625adf1, +0xa87db733, +0x21cfe431, +0x121ff242, +0xa17c85e3, +0x466cecf0, +0xebd34bd3, +0xbdad41e6, +0xbdf32a8d, +0x97f875b7, +0xa02ada48, +0xa89e3297, +0x59fa45ec, +0xa9082a8a, +0xe337d87a, +0xcd541793, +0x5777c524, +0x8eaf4973, +0x681f37d9, +0x52e62eef, +0x293d9320, +0xe41993a2, +0x1161981c, +0x4fc83241, +0xced9cc50, +0x6106bbc5, +0xb205bf31, +0x84c78907, +0x194d93dd, +0xf4b071e0, +0x59e61cbe, +0x73e95017, +0x1c38156c, +0x7b5cec84, +0x02083fd9, +0x43a50dc8, +0xa0948a84, +0x8fdfb1e6, +0xab5227c6, +0x17231ae6, +0x37f00fe2, +0x66ad85e1, +0x1d19961f, +0x487b14e6, +0x771fc1be, +0xa076ac53, +0xd5d9398d, +0xf1172ccd, +0xaacce2d7, +0xd34257ba, +0xeb134161, +0xbafdc259, +0xbdff59f2, +0x2a7683b6, +0xa00cd186, +0x9d43d72c, +0xae1ebaeb, +0x573a3971, +0xdb76083a, +0xb5c38838, +0xc77b89f8, +0xaf295665, +0x1a9b54e8, +0x3915cf66, +0x0449b560, +0x913c75a0, +0x81ca56bc, +0x12c1bb78, +0xf9500c40, +0x745eb001, +0x87391a32, +0x99de12ba, +0x2c3002b5, +0xbefe2865, +0xb4800c3b, +0xd84e2e11, +0xb9b154ce, +0x5ddfd3b4, +0x706589d1, +0x2b4beb92, +0x54154161, +0x61736f0a, +0xd3fc3387, +0x982f7e4a, +0x73e1a116, +0xed867c8d, +0x290169e4, +0x9eae8be3, +0x2a25cd6a, +0x47988d41, +0x3b963e55, +0x4ade2e9e, +0xbd708efb, +0xa4a895d9, +0xf1ed26bc, +0x4187f247, +0x51454e9a, +0x4c694c61, +0x56735201, +0xab286558, +0x8879a370, +0xa79e02c4, +0x18225892, +0x76192d94, +0xeed53c5c, +0xed3041d9, +0x00880143, +0xbbdbd7a1, +0x8875cb65, +0x9d7bafa9, +0x6aa7eb4a, +0x1ce2d054, +0x80261834, +0xb8dafe98, +0x1b324495, +0xbe8d3331, +0xd2668e1e, +0x4096fe1b, +0xe441b279, +0xaf60bc40, +0x64fadb50, +0xb18fad79, +0x22fa43e7, +0x49509ac0, +0x9d616b31, +0x3140cecc, +0xd6e6b120, +0x645c0b47, +0x84af1640, +0x7fec3ea7, +0x2c2d7aa1, +0xabc9a67b, +0xad50ddac, +0xce4d3272, +0x890ff4f7, +0x6753ea53, +0x6bca8556, +0x9696c06e, +0xa607d642, +0xd368c2df, +0x792a34bc, +0x6f2259f2, +0x2b26426c, +0x23aba086, +0xd012b46a, +0x43656bca, +0xbf4c19f7, +0x25664973, +0x704524cd, +0x9b6fbcfe, +0x29f5940c, +0x49ed8645, +0xd4444633, +0xce72cdb4, +0x24966d92, +0xec6b802f, +0x5c90cf93, +0x68b1645b, +0x5244542b, +0x0aad88dd, +0x3ff29b2f, +0x64e1830e, +0x4e91fd51, +0x3283adcd, +0x7b7a0a1f, +0x56a9f66f, +0x15de5368, +0x57735675, +0x3ff4c475, +0x6237826a, +0x31bb7f3a, +0x260d7b55, +0xfd7d4fbc, +0xffdb0dae, +0x9d88a74c, +0xed405cc6, +0x29eadb77, +0x82657ba2, +0xb890f1bd, +0x85740246, +0xbd89eb6b, +0x3f0bc33e, +0x732b2ea8, +0xa48ebe3a, +0x1be97d07, +0xd2f14521, +0x85e976c3, +0xfcba6a82, +0x259a0d3e, +0xa99bd63c, +0x1cabc8a6, +0x9841e85f, +0x2b1aba02, +0x122388c0, +0x0266601f, +0x2c229f52, +0x5eed2b8b, +0x43346386, +0xc5396136, +0x2b3e47ee, +0x3b1906ff, +0x075d2bf3, +0xdcab72f8, +0x49eb6328, +0x42e2b541, +0x0556ff39, +0x497309fd, +0x1673d8dd, +0x45034b40, +0xd1db6cb6, +0x55d8923f, +0x7a30cc14, +0x6e357688, +0xb9575e0d, +0x387a14ec, +0x9fe4bb8a, +0x42c10209, +0xd1d67f0d, +0xa18098ff, +0x25f040d7, +0xb4f4e7a8, +0xfa6acd26, +0x967cb483, +0xf173d0b3, +0xffe53a10, +0x86713056, +0xa3769ee5, +0x0fd9072e, +0xce0016e7, +0xcb091edb, +0x96cd6f50, +0xd487c3dd, +0xcc8364ca, +0x32d3c0a9, +0x4a465c08, +0xbd14d9b8, +0x90627b63, +0xbf8055bd, +0xf632deef, +0x30d56f52, +0x85bf1fa2, +0xd3ea7020, +0x5c4fb341, +0xf53197df, +0x0cb4b76a, +0xae4d36d8, +0x3f60141b, +0xb631990a, +0x0c4f4160, +0xb26e5895, +0x74e461ed, +0x51c87435, +0xb9f0c878, +0x6241a1cf, +0xbf46372e, +0x452b1ce5, +0x0c02742b, +0x778e34fe, +0x9965db13, +0x8ac33f52, +0xea26d872, +0x8c3d733d, +0xe63bcdef, +0x879da08d, +0xc52007a5, +0x2c501374, +0x4563b026, +0xb5e6a214, +0xd55d7b68, +0xb386463b, +0x023c14a6, +0x10256050, +0xd9f65b23, +0x57539090, +0x1bdc0deb, +0x66d56de0, +0x404544fe, +0x88832215, +0x432d888e, +0x11f16aab, +0x62f221e7, +0x7530c0b9, +0xd4ffb0bc, +0x741d62f6, +0x627701c7, +0x4d4eec59, +0x5b337786, +0x84808c52, +0xb89903c9, +0xb3af4bc2, +0xf4301824, +0xcf2b000d, +0xc70a1b29, +0x78907a45, +0x94be84b8, +0xe276abf2, +0x79632b42, +0xf6ce77d1, +0x667c5ce3, +0x7d43cde8, +0x1feb37bc, +0x8790379f, +0x1001a4e6, +0x6a845a06, +0xfc6445b6, +0x6e4e4eba, +0x04c541cd, +0x020565b7, +0x2a599e99, +0x0d59aa07, +0x936ee653, +0x8290447c, +0x74449929, +0x87bd9e89, +0xc6f122cc, +0x0c727c4e, +0x3be8677c, +0x38985ce7, +0x64ac0437, +0xa4219b3b, +0x372606f2, +0xbf51bae7, +0x7b4f4804, +0x24823561, +0x766c30f4, +0xf5bf7a2f, +0xea44214a, +0xc05aa771, +0x0c55c2b8, +0x54dcb27e, +0x511bc389, +0x973a0a86, +0xcb018bd2, +0x81e0a056, +0xbcad44d0, +0x9335cc75, +0xaedf1ae9, +0x38a9349d, +0xe4cdada4, +0x5ee5c12f, +0x0514bd3b, +0x9eac5b4d, +0x85d38b57, +0x9d228c6e, +0xe203481b, +0xe1a80127, +0xb87916f3, +0x5b4fe5b9, +0xa15ee07f, +0xdeac00bc, +0x45fdfc0b, +0x84dadf9c, +0x4846712f, +0x3d3c083e, +0xe6002a7a, +0x6519b77d, +0x0b98c39f, +0x65c50f8c, +0xac6f93fe, +0x8b63fb7a, +0x8c3c6743, +0x624fd9ca, +0xdd1c9abc, +0x722bdb14, +0x4f9f9aee, +0xdaab2e15, +0xbd8c8893, +0xfeae198a, +0x61381061, +0x20a4aa94, +0xfd8d1ae8, +0x3ddad2d3, +0xe1af9f59, +0xc4b15fc1, +0xf85cfdde, +0xee83a392, +0xa667460d, +0x103d0063, +0xf5c5d037, +0x540d5bf6, +0x57fc9d0f, +0x98fe97b2, +0x7ac431a4, +0x6566d020, +0x4b4c7da4, +0x4d67f6b4, +0xf71eadc0, +0xdd487b4f, +0xee14f18a, +0xd30b0112, +0x090fd3ee, +0x46cca6ac, +0x8311aca8, +0xd8f3baf1, +0xc97e6f12, +0x0eb5b721, +0xefea0d72, +0x05449ef4, +0x462af83a, +0x06815f92, +0xed1e8e2e, +0x6d6ddfa5, +0x4629311e, +0x39b3fdb5, +0x75011069, +0x2fceb6e3, +0x7e06933a, +0x110f77ea, +0xacf036ff, +0x10217624, +0xa2f7bb19, +0x7934b81c, +0x0243dd6e, +0xfbf552b3, +0x90af38a3, +0xc8391461, +0xf6dbd076, +0x82ad68e9, +0xeb438020, +0x467089c2, +0x19149da1, +0xef821524, +0x7cd390de, +0x7ff0dca0, +0xf27de608, +0x4802d1b6, +0x004d8764, +0x8c3ba323, +0xdb3975f9, +0x9a8ae8f0, +0x621b4413, +0xdd1f709c, +0x7ee53775, +0x7800049c, +0x0e1cd96d, +0x1c066bac, +0xbd937d24, +0x425f81c4, +0x6e7f645a, +0x5564ebcc, +0xd3144896, +0x73fa2ea8, +0xb655efc6, +0x9251e956, +0xead0f766, +0xa6c67b91, +0x6b344c3b, +0xa97249dc, +0x0be84171, +0x9f73212a, +0x060a5d74, +0x8d17ef3e, +0xd1b95282, +0xe8789fe9, +0x6546023d, +0x6a850873, +0x120238d4, +0x0436178b, +0xf71330cc, +0xcd6efd00, +0xf0c14e64, +0x42dfe672, +0x2b037b69, +0x0c617c85, +0xa43af28d, +0x8c0b5c2f, +0x313b4134, +0xda9e2e3e, +0xdfa569f1, +0xb9e9dc64, +0xb4fc5d48, +0x314711b4, +0x9465c8d4, +0x2b5f0632, +0x3fb49740, +0xbe10d59b, +0xb5695738, +0x622ba196, +0x67c77f10, +0x7a6fc51e, +0xd00affc7, +0xad9227bc, +0x64eedf0b, +0xf1a1ffb4, +0x11f2d409, +0xacb0fd08, +0xc0b514b6, +0x7ac574dc, +0x79dacb33, +0x4feeee45, +0xc5bdcecd, +0x3e9c6c48, +0x22107e64, +0x622f48b1, +0xb5d97f13, +0xb9b2516c, +0x1018b80c, +0xdbf6c2e6, +0x453a43f7, +0x0a134b09, +0x93f6247d, +0x43d6b459, +0x1d97a45f, +0xee5205a3, +0x360b177b, +0x50c46f26, +0xe07a0d91, +0x364d8178, +0xfe120d1e, +0x49caad1c, +0x27a3cf71, +0x7d801e91, +0xa484b880, +0xd9a1a81b, +0xe74d224e, +0xaae07543, +0xaf47c579, +0x5e0033c0, +0xfbb9f7b6, +0x6bc838e6, +0x5bfa1983, +0x04fa56d4, +0xefc0f0cd, +0x057488b3, +0x3375018e, +0x66b18fec, +0xf87f5275, +0x291d6585, +0xc85371be, +0x5e8a49e1, +0x5beb6df2, +0x16765050, +0xed884515, +0x96792a9f, +0xd4bdf867, +0x7deefbfa, +0x1664f0ec, +0x4cb953a9, +0xf508f868, +0xa42c0aa5, +0xb41489a6, +0x1aeeefea, +0x5d82e23c, +0x864d7152, +0x97e940d9, +0x09515f3f, +0x873db413, +0xa5c619cf, +0x89404b50, +0x77dab682, +0x6a417d29, +0x019c2437, +0xefa71a91, +0xbf92bdbf, +0x12e6b597, +0x77effff9, +0x0f491026, +0x7e77c9e9, +0x5887fd2a, +0xe2827e17, +0x3eca4360, +0x2ab1b4a2, +0xa6fb5586, +0xfbba417b, +0x89b3d98e, +0xae07cd4f, +0xbe52255b, +0xdfb2dad8, +0xd5b7a7a0, +0xe0e42fc0, +0xd460950c, +0xcfd426b2, +0x6df1e310, +0x8894117e, +0xf0580f53, +0xee28c0e1, +0xe83902a5, +0x3dcb4073, +0x22056969, +0x4c716f19, +0xec1f759c, +0xe9723626, +0xab6b7729, +0xd716babc, +0x954eb9f1, +0xfce0871e, +0xdec23168, +0xaf325717, +0x0d14ed37, +0xbec89f54, +0x638b971b, +0x9c80dcc4, +0xaeb915dc, +0xc5c0cf71, +0x3ee275e6, +0x62f92d99, +0xd28c26ce, +0x24194a13, +0x6260a89e, +0x1f6f51df, +0x73f2a4d3, +0x96048cd5, +0xc75b70cb, +0xfb9b5a4f, +0x783f5db7, +0x79921da9, +0x6c5c1fc7, +0xd330b977, +0x2caa6cec, +0xf3dbd4e3, +0x8fd3c4f1, +0x8102f0b8, +0x555f25c6, +0xf91ea76a, +0x953010e3, +0x0d4ec466, +0xef435cf9, +0xa28b856e, +0x9802200b, +0xe7d6067a, +0x88349c20, +0xda12d0a8, +0x26b472c2, +0xbc98d084, +0x79e99dd7, +0x201f56aa, +0x34d8bd49, +0xe975590a, +0xa8642862, +0x9f611276, +0xe3aad710, +0x40aa4ffc, +0xdabb9159, +0x5d6c3255, +0x5005bb54, +0x8313c90c, +0x16ff0321, +0xa2d97f87, +0x04f7f747, +0xc2b0cf5d, +0x3a65dee3, +0x88bdd487, +0x530ddf7c, +0x2a832900, +0x5d55b477, +0x3c706c46, +0x91de48ce, +0xe731a544, +0x1d926f34, +0xa094b60a, +0x4c9ed81d, +0x5c9a2323, +0xf1834363, +0xacd29dcc, +0xd285163b, +0xb7abaeb0, +0xef99d1f5, +0x16808140, +0x6ed3eb44, +0xd4ff69fe, +0x90b1661e, +0x9c2b8893, +0x856c5899, +0xf3321ec4, +0x18a8f11d, +0xb66710fa, +0x63a62674, +0x5742532d, +0x35bcd274, +0x33d5649b, +0x41b0c394, +0x063d7dff, +0x2fb873ed, +0xced4b18b, +0x0921c2c6, +0x106a7c22, +0x5519f37b, +0xed732f1a, +0xb4bc9bea, +0x9ce401e2, +0xbd5bd742, +0x2fb0d8ed, +0x0cb9955c, +0x361c6d0c, +0x60f84aa9, +0x6da69ac0, +0xbc4adc1a, +0x176bec2a, +0x541fa21f, +0xb6e37cf5, +0xeb09ea46, +0x4e158058, +0x7462b1ba, +0x8649eda8, +0xa5dd0141, +0xe5015930, +0x591dc16a, +0x6d7bc7f0, +0x6421ae77, +0xea440652, +0x7ffa51d7, +0x3aca9092, +0xaf1eaeb0, +0x5988bf22, +0xc5446a38, +0x3ef91b24, +0x0b714ac3, +0x66ee53d4, +0x6ad1b13f, +0x88c3c60c, +0xfb23edcd, +0x589be59c, +0xcbd5259f, +0xe3ae2635, +0x29c42882, +0x4fea559a, +0x65a3bc2e, +0x3906f095, +0x77d508a6, +0xa7e8fcb7, +0xf31e43b1, +0x0dfbe84d, +0x2207fbfe, +0x8a85a579, +0xc8dbc74f, +0x296be54e, +0xe42c21d9, +0xc2ab88fb, +0x819121c6, +0x3fc4df79, +0x8c9615d3, +0x7f4e1f77, +0xdf258418, +0x05256f5b, +0xd7477bf2, +0xa3472fff, +0x1a50bd91, +0x3c52adc8, +0x8689e23c, +0xd8a54634, +0x00ad1c5f, +0xf41ee14f, +0xc1adab43, +0x11b29691, +0x66c4c4ff, +0x7ffd7154, +0x1f904cc9, +0x9c1af997, +0x74495f14, +0xf7a40df8, +0xfed4f730, +0xce1a607e, +0x2140213f, +0xc4592a9f, +0x4a6c6db5, +0x6f8acba1, +0xf8d3cf7e, +0x14d6db13, +0x762ba35c, +0xc55cbdc2, +0x8da36ec9, +0x29903bbb, +0x0295fc26, +0x153ebc3c, +0xfea4743f, +0xcbd53774, +0xf6f8e2ce, +0x91c8c211, +0x529274a5, +0xbc395894, +0xbd156eae, +0xdfdcb562, +0x02660e1e, +0x6a996c55, +0xcdabe359, +0x83ff0599, +0x761bfeaf, +0x62c2d513, +0xe681eabf, +0x7a21ad49, +0x46f22784, +0x5cceb8d2, +0x00018b46, +0x4b0e72cf, +0x2f3d4cc5, +0x9dd6733e, +0x60cc56c0, +0x3921a229, +0xad953206, +0x0e48cd5f, +0x858b23ce, +0x749b2a76, +0xfb000f89, +0x27cb1fc8, +0x0e5b258e, +0x7a65b128, +0x466c46ce, +0x9e3ef525, +0x45f81c1e, +0x2b77e6a2, +0x202202f9, +0xe9b6b2b6, +0x73c563f2, +0x1e3c6db1, +0x248e4bdc, +0xe0551a35, +0x37f73406, +0x7dafb034, +0xf96e03b3, +0x2b8716be, +0x8508d28f, +0x0212dcf3, +0x076a691a, +0xe13b323d, +0x0cca8481, +0xe6fbb772, +0x81a84ba3, +0x24c37481, +0x61d5a4e4, +0x2ea305e2, +0x29b83eae, +0x5f599756, +0xf26e2543, +0xe42d0fc6, +0x074f9b25, +0x250f650b, +0x621b8a15, +0x935032dc, +0x1daa27ed, +0x205df206, +0x33374e32, +0x517690ed, +0xd65fe9d4, +0x372e767c, +0x261a6396, +0x39a17ca0, +0x68657382, +0xa70dbb99, +0xea987562, +0x7e2163f2, +0x376a887d, +0x5c05a0eb, +0xad41e5e4, +0xc7918024, +0x2abd88b3, +0x6008bdc5, +0x7f28e61d, +0x6b0d54eb, +0x42207867, +0x53a09f68, +0xf43bdbbf, +0x2b3f3fbd, +0x1a7c6efc, +0xadced3e8, +0xed19b4d6, +0x36f98b2b, +0xac7d1f86, +0x99c4230f, +0x6eb62aac, +0xbe97454d, +0x7f9762cd, +0x2bda82d6, +0x65d711c4, +0x2acbb0ff, +0x2e75d72a, +0x9800ae7d, +0xd24a47b7, +0x618eb0ac, +0x185a4707, +0x61591a63, +0xe8558cf3, +0xd738d053, +0x911c9eee, +0xd028244f, +0xf5e963bd, +0x4496c4ae, +0x86fe86ce, +0x0d30f189, +0xb6308692, +0x9b76db60, +0xba01d7a9, +0xd6bcd0ce, +0xa2339da4, +0x6a4b968b, +0x2f7a32f2, +0xfadfa524, +0x6527160f, +0x9e8ec0be, +0xfcb3edab, +0x07818bef, +0xf495e33e, +0x1034f820, +0x48f87f04, +0xa838bf94, +0x897c672f, +0xc7328600, +0xf1305cf1, +0xd5fac643, +0xadc634aa, +0x97863e7a, +0xc0a702bd, +0x723e692a, +0x530402bc, +0xc715508e, +0x3ce9114b, +0xba6c3dec, +0xd56c3c4f, +0x7e553073, +0x8b34d351, +0xa9aed75d, +0xd51f6c62, +0x8f0834b0, +0x726380a9, +0xe6381b7f, +0x6785f1ad, +0x0f2ff93c, +0x05193b54, +0xdf92a87e, +0xf7a39595, +0x812a17a3, +0xeee60f62, +0xce321bf5, +0x2f3649a9, +0x4508cdb8, +0x8fa2eee1, +0xb0956f01, +0x08606d77, +0xbb200010, +0x9a4ea6ce, +0xa12641e8, +0xf0eb45d9, +0x338de662, +0x88efd0e2, +0x0ad389e5, +0xd04679e9, +0xe59a5a20, +0xc21553cc, +0x85bd0eed, +0x10f85bb8, +0xc38b68f9, +0xeb601b3b, +0x12a541ca, +0x5b4d2667, +0xa223ed92, +0xd972a4a0, +0x8bbd0f55, +0xd6f80c96, +0x0ab5eeec, +0xbbe17516, +0x2d14c56d, +0xeb23f7c9, +0xba0e7142, +0xf7987069, +0xac03f17a, +0x885b6f6d, +0x1b3e6672, +0x55df4d42, +0xf339ed75, +0x46197150, +0x158f0e17, +0xefbe1d6d, +0x20fce356, +0x716ce26c, +0x9bbcc9db, +0x9bdae42d, +0x600b99b1, +0xd9ffe409, +0x8dc37d12, +0x58fd7f5c, +0x582d7ecb, +0xdf967e7a, +0xcf3712bd, +0xc49a96d6, +0xc1ac97b5, +0xd7362d2e, +0xcbbe65c1, +0xa071b584, +0x1fa79bb2, +0xa539b156, +0x769bcc19, +0x008cbc4d, +0xee0d9743, +0xc0ed4da6, +0xa3f20066, +0x36c70ca8, +0xfe8e4436, +0x025e05e6, +0x07aa74dc, +0x9f09765f, +0x61e30eac, +0x21c1240d, +0x4dc2ecfc, +0xb46eab9d, +0x5e2d8806, +0xbeff8a9e, +0x7fb7c931, +0xae929a9e, +0x0bac3d05, +0x2ff8ad74, +0xa02f63a4, +0x75d63735, +0x2a0883b4, +0x2b29c5d9, +0x7ed0329c, +0x4877e2dd, +0x5fc821d0, +0x7b90c74c, +0xbb00b316, +0xbb7ae936, +0x24b7106e, +0x74415572, +0x97024143, +0x002924a4, +0x5f46eab2, +0xace62906, +0x26bcc856, +0xfc85b015, +0x4a7569ec, +0x03d363df, +0x4f38d62b, +0x88d313d0, +0x63ac3568, +0xd11e9451, +0x81f0694c, +0x411970b7, +0x83185b69, +0x111186ca, +0xcaa7ff65, +0x16aea505, +0x24051003, +0x98352107, +0x38e67ecb, +0xcac1fd71, +0xeca60cf3, +0xbd474da0, +0xd4ec90e1, +0xe50836ee, +0x4d16da71, +0x2be7257b, +0x66cfc020, +0x3771b97e, +0x423f371b, +0x2d098795, +0xed82cad0, +0x6547dc5c, +0xbe6775b8, +0x74443782, +0x97a1ef41, +0x22f77136, +0x2a32f5ed, +0xc082309d, +0xfd0b1263, +0xf6e4ee21, +0x332f2f33, +0x3e3129cd, +0x1239da35, +0xbb3ac9e4, +0x602390c6, +0xb0b7fc17, +0x3b8e7ff1, +0xa005ca11, +0x1e7d0bf1, +0x5c849d15, +0x84306d15, +0xc7c03560, +0xa5d6cc8b, +0xb1e0377b, +0x440d014a, +0x20ebad70, +0xa615eae7, +0x437e6af1, +0x66d29a60, +0x83074f61, +0x56a9e1c5, +0x2b6da5fb, +0xdf4b8883, +0xb20346dd, +0x9bbcdca5, +0x7fa85d7a, +0x70aa3e8b, +0xea60b9df, +0xc42a4a48, +0x290ed2d2, +0x2ccccb10, +0xf8b38772, +0xcc4995a5, +0xc6043c04, +0x173fa1ab, +0x53745667, +0xadf5795d, +0xe4a516aa, +0x72271a45, +0xf9ae57b5, +0xbfda6d4b, +0x42d2721b, +0x4dea42cb, +0xfb7bccbc, +0xdca364fd, +0xc4daeaab, +0x08fcceb6, +0xa6e8f922, +0x4b135b37, +0xf4321382, +0xa64a2536, +0xe2b4e8f2, +0xa0c4c1dc, +0x27d2fe05, +0x79b713b4, +0x54f90d71, +0x03d73919, +0x1d090f0c, +0xe5bcb2ec, +0x2db291fe, +0xf5dd2138, +0x6ab43974, +0xa8699374, +0xc249c9a5, +0x68bf5baf, +0xbdb1c736, +0x1654dcca, +0x45380d23, +0x5a62b409, +0x5c29260e, +0x34950b03, +0xfe771a47, +0xe39d622a, +0xe7670cf7, +0xf1f57be8, +0x7fe31be1, +0xdfc55ab1, +0x5b6ebe7f, +0x3d67c9d8, +0x18ced9a1, +0x6d9b06aa, +0x44158c8a, +0x512133dd, +0xf02949f3, +0x40d9999c, +0x85474586, +0x39f8b698, +0x79832d51, +0x6b0f7e8c, +0xe419ec76, +0x675b393d, +0xc2c7919a, +0x12ff0f06, +0x2ff23725, +0x7a25d3c0, +0x0730c542, +0x2062bcaa, +0x117a1979, +0xa779d35b, +0x9979f36b, +0xc11c7dae, +0x9bf0880d, +0x8ff2f68c, +0x4ce62649, +0x7e4d9f72, +0x9783c975, +0x78c0f5d5, +0x22693aa5, +0x25fb470c, +0x68670602, +0xb4fc3981, +0x9e51defc, +0xf0152ea2, +0xcc6e40dd, +0x8e403182, +0xd955e393, +0xdf8a7030, +0x88c944ed, +0x9c3e259f, +0x6ab01439, +0x6243373c, +0x77b5e63a, +0xaaa1b2cf, +0xca698d6b, +0xdeaa1eb4, +0xc1d81f0f, +0xc1e1943b, +0xa38a8514, +0x509cccb2, +0x284955dc, +0x4aa918f5, +0xeab161f7, +0xac68d133, +0x8ca62068, +0xe69769d8, +0x57a99e06, +0x29c6a632, +0x0a98092a, +0x0badab8f, +0x3ef2c170, +0xcd80f5a5, +0x9176367f, +0xfa7b552d, +0xf7ad454b, +0x2048f397, +0x6663225d, +0x326de359, +0x2455331d, +0x3773d1e9, +0xe5d33575, +0xade0a399, +0x87635cdd, +0xa27f95eb, +0x925f2487, +0x3971e1f0, +0xb8ffe973, +0x66d93908, +0xd531a595, +0x26b6ddc4, +0x47758454, +0xd6c799f9, +0x2e7f7a85, +0xadd3aff8, +0x519e8c08, +0x3c0c76a7, +0x7c91ef4e, +0xbc7e54d8, +0x757043e4, +0x39fb515f, +0xfc318218, +0xbe3088fd, +0xe523c9d9, +0x10659413, +0x5e2ec68d, +0x57d23e66, +0x86e8bce7, +0x6ec493b5, +0x236fb775, +0x8808e03c, +0x239da90c, +0x12b6c0e7, +0xe1719c82, +0x865c35f6, +0x66c7f594, +0xe3e6c17f, +0x6bf8edb2, +0x84a995e1, +0x4eafd541, +0xe1253e5c, +0xdb4cdbfb, +0xb3dfddea, +0x81c18771, +0x386439e1, +0x7e131229, +0x0bd70005, +0xe2a1f9f0, +0x7f87ba81, +0x1105e0bb, +0xe33639c4, +0x7dc250c2, +0xddee910b, +0x24ed6320, +0x4ac6f484, +0x1f0a46e7, +0x8a7da6b9, +0xf3e94996, +0x46fe8920, +0x21d6637b, +0xd83deba8, +0x27034fd1, +0xe3e72c24, +0x0d7bdcb6, +0xbb927fc8, +0x07746929, +0xf55c8d8d, +0x0a700a33, +0x124d2560, +0xf67258da, +0xd8917efa, +0x546ce0a1, +0xa6b0f16f, +0x37ff83aa, +0xb6cfec17, +0x29883004, +0x858a0a3b, +0xa706c8f3, +0x566dfa80, +0x9cc8b72c, +0xc06b0c43, +0xd135608c, +0x1f75fc40, +0xa602e39a, +0x6df606a9, +0x53dc9926, +0x71f9c1d1, +0x889b0961, +0xbdb42e34, +0xbb3c68bb, +0xfa4ab08b, +0xb93749f0, +0x2ceb8a65, +0xd3695df6, +0x6ab401ca, +0xfb0afe9d, +0xd018afcb, +0xb1d73245, +0xbb19e71a, +0xc079cc45, +0xf5bea349, +0xaa1e3247, +0xac68a9c2, +0x763ef9a1, +0xd01329ec, +0x5903513e, +0x47a85a15, +0xb64cf747, +0x31457710, +0xcd15c06f, +0x17f1b326, +0x9dbde7be, +0xd2d52c1c, +0x513e5f03, +0xeb0895e5, +0xcd9ef921, +0x0ba3e683, +0xa82d14bb, +0xb96a3858, +0xafba27df, +0x84782901, +0xc4d27e37, +0xff28448a, +0xe295bfba, +0xa6aa3536, +0xacd4795a, +0x8976f185, +0xa9ed7170, +0x59d890ba, +0x1c930c80, +0x9e58ef76, +0x706f4123, +0x32b3c20b, +0x78337984, +0xf744f95a, +0x03fcaab8, +0xbfac1e6f, +0x63e9fac9, +0x89603c0f, +0x49c38a6f, +0x232a5986, +0x7c17dd40, +0xc1c1fe2d, +0xa5d5fc48, +0x117a5422, +0x6a0f72f3, +0x15df1729, +0x730b7655, +0x1d2e8741, +0xbded219d, +0x4662c5df, +0x0312bce2, +0x663c26cc, +0xb8d47655, +0xc08dda20, +0x372cfb6b, +0x365eee29, +0x017fbd80, +0x51023e0c, +0xd829ebf9, +0x3f08a894, +0x68c32a8e, +0xa8828f01, +0x395f3720, +0x886880f8, +0x95e1246a, +0x7cd56144, +0x87f62b06, +0x87b5a7d6, +0x311bb5a5, +0xa7e34e9f, +0xb94b28e3, +0xcefa8fa5, +0x58cadbed, +0x6552f9a6, +0x53a4cba9, +0x0de1d556, +0x2d02ab83, +0xffe3c559, +0xafbdb653, +0xcea75888, +0xbe274fd4, +0xb6f614f1, +0x96fbbf99, +0x9b14310e, +0xc682f411, +0x75c2082f, +0x3f825b9f, +0x00a4f891, +0xf9160d3d, +0xd4b163e6, +0xf1488a3c, +0x3fa56233, +0x7f906160, +0x950e76d1, +0x40dc3dcd, +0x75bb0e76, +0x003ed39e, +0x0d769201, +0xf84f4e9f, +0x75e700c3, +0xe1badd39, +0xaa09d7fc, +0x741dfe40, +0xf6a03131, +0x48ac4efa, +0xf06b2135, +0x5bd34da0, +0x4acdcc15, +0x26f2986a, +0x811f053d, +0x0ba8c7dc, +0xfe61e0f8, +0xba3259d5, +0x1d64c4dc, +0xe760f710, +0x6779708b, +0xc1d08953, +0xe008a0a0, +0x48965d30, +0xe3e89e9c, +0x1cde2774, +0x86cb219c, +0xa349f218, +0x89999da7, +0x659c52d7, +0xa97ac146, +0x39860f37, +0xa728aa71, +0x2005d827, +0x00c168df, +0x1ab36fb7, +0x172cc52d, +0x7794c468, +0x1f4feaae, +0x55da74e0, +0x3d9fb615, +0xc08dc842, +0x43c92267, +0xf1da209f, +0x4a3f4825, +0xbc5a5dcd, +0xae37ea15, +0x3e0f10ce, +0x19cf6ccd, +0xd7bfb6ea, +0x2f8bd0d3, +0xa8d3e6a7, +0x4d0f8816, +0xa17310d0, +0xf2bfc223, +0x0945cc77, +0xe1ceb70f, +0x0243457b, +0x502205e3, +0x8adc3ddd, +0xf5a68975, +0x9b8a6d1e, +0x23044a82, +0xa4410c6d, +0x4ee0cf78, +0x6c0110be, +0x5d3d6811, +0x12227e85, +0x083165cd, +0x01b472ee, +0xb2541a88, +0xf5c09637, +0xf98e384b, +0xe0fad117, +0x39b4bf4d, +0x98291d2e, +0xbfa7cd68, +0xa7588e9b, +0xe3b70462, +0x32c215e9, +0x0343436f, +0xbd2563fa, +0x9cee3e2e, +0xa789d44a, +0x249f283d, +0x6df8fe57, +0x583c9de6, +0x683932ae, +0x2600e49c, +0x80fcc6b6, +0xbd7691b6, +0x98dd0d7b, +0x8e36c836, +0x6221a4fe, +0xa0cf2016, +0x071884f5, +0xd480e2bc, +0x4c8f78be, +0xe0c7ead9, +0x8bbb424f, +0x02d82ede, +0x2b565689, +0xe8c457fc, +0xbcf29384, +0xd87ef80f, +0x88b41898, +0x3f2d7bf7, +0xe8195822, +0x29563529, +0xc1629b4a, +0x495bbc1f, +0xf1a12304, +0xa8190e3c, +0xe8d3b9ed, +0x39751585, +0x58ef1ff7, +0xb2506df4, +0x102ff124, +0xb75a5f02, +0x64ae0526, +0xd8dbc82d, +0xbb1239ef, +0xa6a76063, +0x982d0b85, +0xdc07c8eb, +0x6e979875, +0xab3934a4, +0xa0347eef, +0xbcab9e3a, +0xcc337532, +0xb44fe9e5, +0x625fbd89, +0x7428fd58, +0x31c56a13, +0xadefa428, +0x61b04b1c, +0xea2ab2e9, +0xe2f61264, +0x33d72b36, +0xef46b2e7, +0xd9592bc7, +0xd35e2562, +0xddd0b3d8, +0x9bd61935, +0xe38f90aa, +0xbd136e3f, +0xcaf75622, +0xe3b372b3, +0x6c30c691, +0x9f94ad8f, +0x02f689d5, +0xee608df1, +0xddd38935, +0xc784f272, +0xbf968f8a, +0x62de1f17, +0xb280e55c, +0x0adca0e3, +0x019d1122, +0xf20172ad, +0x837cd92b, +0xb4fe6783, +0x35974558, +0x6d22f7f7, +0xa026f34d, +0x6dd8b479, +0x3527eba8, +0x2ede28f8, +0x6a2c473c, +0x53e9b4d9, +0xfab841e8, +0x48493b39, +0x48301cdb, +0xbf4d561d, +0xd3480f71, +0x42363632, +0x74345db2, +0xd45dc319, +0xa36be1af, +0xd0a03bcc, +0x752a1aa7, +0x05f036af, +0x2249314f, +0xdc13b294, +0xa72fc9dd, +0x13b468fc, +0x9920c48e, +0x14d59dcc, +0x09098d5d, +0x20351c97, +0x59164b34, +0x929711d1, +0xe791ae7d, +0xea6fc245, +0x88d66e80, +0xf10aef55, +0xcdb9b7df, +0xfd778b3a, +0x1aad6f67, +0x93d9e5ac, +0x1197b869, +0xb5979e8d, +0xa150e1fa, +0x14c129b1, +0xee4162fe, +0x58e4a3a5, +0xd4f28662, +0x9faed396, +0x599797de, +0x3559df85, +0x5a0d0b72, +0x88317c52, +0xf32ec1b8, +0xc6733cf6, +0x6ff6b846, +0x497cdaf1, +0x01395e39, +0xecbff48c, +0x23a23452, +0x0ce83dab, +0x118723a9, +0xe8c9b1d1, +0x27ebe278, +0x3c438562, +0xbba61783, +0x440cf205, +0xc8862770, +0xeb7ad7c5, +0x88bcc322, +0xc98cf9c1, +0xa645b4a1, +0x852208e1, +0x005e2b58, +0x97ec13a0, +0xd2b13980, +0xabc4f670, +0xcf4154b9, +0x190b75e4, +0xa368f6c8, +0xde512bb2, +0x5b1f89ab, +0xf3f0a62a, +0x481e156d, +0x931b29e9, +0xeef2b055, +0xfc36c323, +0xc2795892, +0x53603719, +0x6bb47e86, +0x104c2465, +0x85e89221, +0xd0ec7827, +0xc6ffcd40, +0xd537d0e4, +0x33ba51c6, +0x34cc65d7, +0xceee572e, +0x75f3bbe6, +0x7b95cf0f, +0x446e80a2, +0x156f40cb, +0x5c82fab8, +0xd6e0f01e, +0x07f76e7a, +0x62ef4b8f, +0x8f3a9dea, +0xc7c13417, +0xc3b6e9cb, +0x6a57d080, +0x070d857d, +0x14bb7194, +0xc9d071c5, +0xa2f98181, +0x5d478baa, +0x2cb7497a, +0x1ae9d844, +0x49e08218, +0xe4fccb60, +0x2f9141c4, +0xc381ab13, +0x5c80d46d, +0xa30ff303, +0xd066c3de, +0x9d9208c0, +0x1b08940f, +0x85beb673, +0xcadf48b3, +0x30ca208e, +0xf9aac45a, +0x1e841683, +0x9f28e150, +0x0a261ec1, +0xe6ae596f, +0xf226bc37, +0x3209d21a, +0x87a367d0, +0x8db3480d, +0x5c053884, +0xfc6380ed, +0x92804162, +0x7390bd87, +0x10eddf47, +0x943fd571, +0x37938776, +0xb834d9f3, +0x4f04e280, +0x8226a069, +0x1fe91acb, +0x52463210, +0xfadc3d34, +0x26ec381e, +0x07d63a50, +0x01d9bd75, +0x3c44b2ab, +0x4d16604a, +0x6f4cfe90, +0xfa07742f, +0x893d787e, +0xe2ce93d2, +0x76099215, +0x0993e03f, +0x14a468c0, +0x70c1f580, +0x7e5e76f1, +0xc22b503d, +0xb9debb33, +0x9806e6ed, +0x83f5c143, +0xff302ae0, +0x20ed7178, +0xa0177e0c, +0x2ba4310f, +0x8b425d6c, +0xd2940efa, +0x2eb58a6c, +0x6dbca749, +0x20410c79, +0x0ad78bef, +0x6772c198, +0x7a960c1e, +0xd46e867b, +0x33580244, +0xea95f378, +0x173d0ef8, +0x968bd278, +0xf4ce324e, +0x6cd72969, +0x95764406, +0x2ec23f14, +0xfcb3bd29, +0x486c782f, +0x7d38d6b1, +0xffe17018, +0x7fe74f3d, +0x270e3053, +0xb4d1c1d8, +0xc10f1587, +0xf90f87bb, +0x3243d047, +0x7a4046bd, +0x48308275, +0xe4cbb872, +0x2e636949, +0xd40fda76, +0x5cc1761f, +0xc3a97f35, +0x8d2bbaa0, +0x875e5f06, +0x7800e71d, +0xd2d3a5a6, +0xe3e4e315, +0x39943def, +0x2c1bd6d6, +0x6a7b43da, +0x0f34e2b6, +0x5d6d0a87, +0x0e5390d1, +0x54cab5b6, +0x8e3995df, +0xba6a82dc, +0xbdde98f0, +0xc828a79b, +0x29fce40c, +0x4403d334, +0xdbae6eec, +0xcbc3581c, +0xa1525701, +0xffe0be48, +0xae9495c3, +0x976d7b7d, +0x6afc00b2, +0x24b85a48, +0x1e4de025, +0x4b819726, +0xb85be2ab, +0x346c96b7, +0xe3c5dbdf, +0x32974d9b, +0x69fc3836, +0x5c42b3e4, +0xd0621b91, +0x6662e641, +0xc8545c4d, +0xca131af0, +0xe4bb567b, +0x46b30b36, +0x945abc14, +0x4088c9c8, +0xe1a7e386, +0x8e79e34b, +0xc056dde3, +0x2e4114ce, +0x61a37cfa, +0xc3867b36, +0x547c9bc1, +0x3b81ee7c, +0xd7c248ac, +0x385f2cb5, +0xe0f4e475, +0xc66f4219, +0xe04bf053, +0x51c631db, +0x173c941a, +0x1ba4a287, +0x990e9bb8, +0x94336622, +0x53c4302d, +0x4df168e0, +0xa3e6b3d7, +0xb35c8384, +0x02c3bb9e, +0x3f35fcd0, +0xce8a799b, +0x8a4835fc, +0xe47c44a0, +0x49dec02c, +0x7fb40853, +0x049537eb, +0x82d0671f, +0x8b93961b, +0xb2b3f932, +0xad711d1f, +0xc06a75f1, +0xd64b74e3, +0x5bb947d8, +0x1af2bc95, +0xc8bb25be, +0x4b8bab0e, +0x8e4481c3, +0x88cfe859, +0x42ec4eea, +0x9d8d661e, +0x4ebc516e, +0xb8abdfa0, +0xdaf3bbdb, +0x65b3ca14, +0x8f3314c2, +0x9cdf9f92, +0x93f16dbb, +0x6a59de3e, +0x0fa2960d, +0x01327b27, +0x4d10461c, +0x7f3cb7da, +0x8b327595, +0xe3c76241, +0x34d0762e, +0x8573610b, +0xa5096c69, +0xbc9f1c47, +0x236a5cd1, +0xc6387170, +0x38722cf8, +0x5cdb00a0, +0xff3a9666, +0xea39f565, +0x41a163bf, +0x58b39c3c, +0xed255a0b, +0xe9e5310a, +0x8c7b0aa8, +0x8e2184ea, +0x6c2d2b78, +0x054e443d, +0x3b34a94a, +0x15a5a67d, +0x89dcb304, +0x67e3694d, +0x3d7edd95, +0xbd15f57a, +0x49f8e7fd, +0x204843d6, +0xc0814460, +0x68994c5d, +0xcb8c7256, +0x8208ffb5, +0xe6619443, +0x8c1c337b, +0xab2a4699, +0x2142b095, +0x94101d3a, +0xbfeaa48a, +0xb15c428b, +0x38ede700, +0xf5bdea02, +0xfd4fe1c3, +0xbea9a49d, +0xcd6d7fca, +0xc715545e, +0xb0a2dfc2, +0xa555b281, +0x99fa4da1, +0xcdfd6275, +0x8669874e, +0x8a32d1b0, +0x43c56887, +0x6e3b85f5, +0xde5a9f46, +0xf52bb33c, +0x1330a148, +0x12628731, +0x346b527f, +0x605435d9, +0x757981fe, +0x8cd931bc, +0x5dba3272, +0x3a1c9775, +0xc7bb01b1, +0x96808904, +0x2c586f41, +0x2d7d1e20, +0xa077885a, +0x8e54d973, +0x5ad373c6, +0xb4861ce9, +0x1146a19c, +0x0a43f60d, +0x86f01b49, +0xb47d3e10, +0x76fc3c5a, +0xc2578541, +0x4cc7327a, +0xf7952839, +0x21b229f5, +0x33667bf5, +0xdfe0fe21, +0x55f10372, +0x6ae32c62, +0x71ac5d92, +0x4b9fde72, +0xaf2da77f, +0x2ddf0f29, +0x80c596a0, +0x5028910a, +0x2b3fa490, +0xda70c96f, +0x7da8117f, +0xa6877902, +0x4725efda, +0xe2acf206, +0x57beb84c, +0xe3e0d926, +0xbe2dcf88, +0x9a4b6590, +0x4e41ea67, +0xf54a0b5c, +0x4b6cd828, +0x0de32504, +0x2ce5c42a, +0x896a2030, +0xabe4e0f5, +0x0eb9abdb, +0x00f64b70, +0x23074e64, +0x0dc443e3, +0x63142e7a, +0xf599224f, +0x9e155175, +0x3306eb05, +0xa124f4f5, +0x1c25f6d7, +0x74464389, +0xc88c25ac, +0xf1082229, +0xafb6c4e9, +0xf7fdeadf, +0x28e85486, +0x97dc9a0d, +0xeac894fc, +0x615f7673, +0xdfcbd5cc, +0x99bfd3cb, +0xcf6062d3, +0xb445d7e7, +0xe851ee9a, +0xc90430f5, +0x420941bc, +0xba0f1ef9, +0x6128b2bc, +0x1e78513c, +0x70485a35, +0x32315c33, +0xbdfe87c4, +0xa289159c, +0x2814ae6a, +0x3580612d, +0xeaa68ba2, +0xd7aedeb0, +0xb0eec31f, +0xf4ee6812, +0x5ee6f208, +0xb1c03ef3, +0xb5f99d2e, +0xb41534b3, +0xf43f4972, +0xf52fc6e8, +0x081efc67, +0x294be7f1, +0x911b2ce6, +0xdff77ce5, +0x0f0700ba, +0x64643c96, +0x02bfe998, +0x526b0a43, +0x19e18fd8, +0x8c8e7949, +0x27ef40f0, +0x9550f87c, +0x3120eb5e, +0x7d15c31b, +0xc392f760, +0xacab7cb9, +0xdcbcfb22, +0x983f03e5, +0x8c6ee45f, +0x9c37a72b, +0x9d5cad88, +0x5ba458b6, +0x1038821f, +0x97a3f7ae, +0x8d0d2da2, +0x9acd78ec, +0x4706d030, +0xd88b9290, +0xc259634c, +0x6160e917, +0x5dbccb40, +0x24752026, +0x98caf7cc, +0x73a02265, +0x2bf99626, +0xed49a5ac, +0x97f6e160, +0xfa415610, +0x09e9310d, +0x2daa820f, +0x61929bd4, +0x4caa6909, +0xe926b863, +0x2b77c3ac, +0xba238e53, +0xdabb1dac, +0xc02eca4f, +0x67942f95, +0x5f49f1de, +0x22d878b4, +0x122367b8, +0x2ea27a5e, +0xeadef7ae, +0x337b6b44, +0xde6439e9, +0x919262fe, +0x90fe315a, +0xcf586531, +0x83ef997c, +0x0e036eca, +0xfa5fedcb, +0x465f2368, +0xc640484d, +0x681ad4de, +0x01a8eb21, +0x00332bbf, +0x583ac980, +0xf7497ca1, +0x92c54549, +0x1d109dda, +0x91a69749, +0x4b6269eb, +0xc3fb8f9d, +0x2f6e1a98, +0xa4144884, +0x236504fd, +0xf36e7aee, +0x70e65ad8, +0xa0346fb0, +0xbd29b117, +0xf9f53cc0, +0x9c34c7de, +0x66b88553, +0xe6a23ec1, +0x5ac3f211, +0xbd90ae05, +0x49f70c13, +0x072fb658, +0x5322765b, +0xbb40c2b6, +0xe4d51324, +0x86a19921, +0x7e9a5a78, +0x4f04b98c, +0xd4441640, +0x939354c7, +0x08340c42, +0xb9fe0abb, +0x9e182411, +0xe62f2722, +0xf19c8e29, +0xf96d7b8c, +0x9ff8e831, +0xe87ca915, +0x59f3ccdc, +0x939a64e3, +0x9ed6f72f, +0xcaffd824, +0xfa74ff22, +0x95ebebbd, +0x45c1b5f0, +0x1a765f81, +0x23ad73ce, +0xbc08e8a5, +0xd9d9f4ff, +0x87ff24a6, +0xa303688d, +0xae402c78, +0xa28e4527, +0x573d1f72, +0x3adb597e, +0x1b0225c5, +0xc4238307, +0xc296d436, +0x7d42b4e2, +0xd074a24a, +0x427b645c, +0xefcc812a, +0x8cdae433, +0xffdd2190, +0xda055a48, +0x71ec9286, +0x0ce25dd2, +0xe857a227, +0x4d5241f4, +0x7ed13913, +0x0e31dd40, +0x40e7f269, +0xb16f5400, +0x2c81c355, +0x6e2f789d, +0x7f9f9f07, +0x21ef9c58, +0xbae231d9, +0x3efbfc85, +0x2d806590, +0x81ffa707, +0x9fc88c12, +0xd8431897, +0x5d03fd10, +0xd943b352, +0x36719f1c, +0x4476db3e, +0x2c01e7e9, +0x34c3637d, +0xecd74927, +0x8a0cb100, +0xb1881d9f, +0x054db496, +0xba6d1c76, +0x1f5a81da, +0x504a15d9, +0xdd5ee9f2, +0xcefdea64, +0xb10f16b7, +0x745506d4, +0x339beb73, +0x29b35c62, +0x8d850057, +0xec5bed17, +0x35e31c11, +0xb1960fdd, +0x8f57c282, +0xb69d28c8, +0x9c3166c1, +0x80bd8677, +0x89ef60ea, +0xbaa627cb, +0xd1a5b90b, +0x77bd1836, +0xc0a06ce3, +0xbdb8cdb8, +0x92e5b7c5, +0x19162cc1, +0x15c9550b, +0xddc2be2d, +0x1838bcf8, +0x717efaaf, +0x58a4178c, +0xb01ebd88, +0x9113c826, +0x6d1febbb, +0x906a880a, +0x9b186168, +0x16b79850, +0xe5a6a5ba, +0x4a2c09e1, +0xbe21dfaf, +0x96a2e182, +0x2ab94e1a, +0xbb83f6fa, +0xa95e3e5b, +0x5ca51c6c, +0x57e0d31e, +0x7d81ece6, +0x084fc2cb, +0x8674c224, +0xb7e38ad8, +0x74990db5, +0x17d7d866, +0xded4510b, +0x8cdf493f, +0x9d372486, +0xc63be41f, +0x81d48f14, +0xe9a68937, +0x5e4fe12b, +0xba6db8e9, +0x4f37e149, +0x2bf1cd23, +0xb01dcdce, +0x703f1de0, +0x42bf5ff5, +0x7ee196f8, +0x94c62dfa, +0x15579890, +0x7bfb0eee, +0x84b9c216, +0xc86ecaf9, +0x18e0925f, +0x4332d52f, +0xbd84dd08, +0x75b63cd7, +0xad2ee7fe, +0xd3c23771, +0x4d8f5ed2, +0xccecec30, +0x9c9a8c09, +0xc3904cf2, +0xbf21a26b, +0x62955dfa, +0xaf3a31ea, +0x4331dd76, +0x3b324195, +0xb9229391, +0xaee979a5, +0x97b111f6, +0x2fb15bfe, +0x6faec284, +0x04447f2d, +0x70747497, +0xf5c37f5b, +0xd89bae41, +0xf0a834a3, +0x5b999f16, +0xed721542, +0x1f07bbf4, +0x07aa2d72, +0xa7f6e0e3, +0x3b20156d, +0xf6cdd073, +0xb6104180, +0xa890fd84, +0x55d6de6d, +0x334b314d, +0x211204b9, +0xeff64c38, +0xdcc46bd0, +0x531f638e, +0xdabb1235, +0x2542906b, +0xc0bb8d7a, +0x384cd322, +0xec7e6816, +0xeeda2f2d, +0xf1146cae, +0xb10a944b, +0x072dd87b, +0x8069c31d, +0x228eea8f, +0x2c82c2f7, +0xd328d2be, +0x198b94c3, +0x41dfb345, +0xb1f32bae, +0xd0843513, +0x26bcbb86, +0x9735a9f0, +0x20a08405, +0xb38e6ab0, +0xcf6d891c, +0xf9951a48, +0xbc77e3d7, +0x98db0a50, +0x77ed899f, +0xde6ae093, +0xe96d25a1, +0xa78972dc, +0xd43d090a, +0x90ce9596, +0x651498b6, +0xc0804d46, +0x67b848c3, +0x0ef411e3, +0x2db5bc0e, +0x51f56738, +0x1d058a76, +0xc2b51e1e, +0xbf10c0a0, +0xbcf7d1aa, +0x8ed5008c, +0xd0099736, +0x4cea59bc, +0xba837fb3, +0xaf945aef, +0x1200cee2, +0x331f2063, +0xde7c0c33, +0x42e6714d, +0x34c241e9, +0x838cf62a, +0x9cd89a03, +0xa0d19387, +0x317ae999, +0x9552403c, +0xf42ee390, +0x9d7c86e9, +0xb95020b3, +0xc164741e, +0xdde94ae6, +0x7b703032, +0xb7f1f95c, +0xd07cd6de, +0xd3576950, +0x20965665, +0xb0db922f, +0xf99fe603, +0x61790f0d, +0x2090a9f3, +0x60c06f37, +0x3ce3c5cd, +0x90bb1173, +0x8b38ce76, +0xac8b7876, +0x805d4ae7, +0x4f9c7a91, +0x88faaf77, +0xc1eabb13, +0xb0b2ed6a, +0x14859474, +0xd931b551, +0xc331dc34, +0x1ddc56c2, +0x705d6d79, +0x80813572, +0x71123222, +0x687c295e, +0x00255b1e, +0x48bf7d65, +0x5d35454d, +0x44e2739a, +0x3923c788, +0x11b5a3cf, +0xc49282d7, +0x85755b74, +0xe0d91f4f, +0x8b8a5b94, +0x94e9fb25, +0x5c1294ae, +0xaed85b86, +0xaba53f54, +0x86da0245, +0x03c5fbc7, +0x1c65cd5e, +0xbce2bae4, +0x07c146ed, +0xf55334ea, +0xd662212a, +0x9160878a, +0xed1ed7f7, +0xe4d99a26, +0x6fc43dcb, +0x47be4b3c, +0x6bd38d68, +0x44e614dd, +0x7c56d6c8, +0x83fc2d1f, +0x0b66d760, +0x237436c4, +0xba123ba6, +0xb92d4cd9, +0x9e5f61e5, +0x38d2edb7, +0xbabd514b, +0xba85e99a, +0xe7270252, +0x35567377, +0x470efe7e, +0x7fb573fb, +0x7ff7e3b8, +0x0ed6d504, +0x3283575d, +0x41f35ba4, +0xc304da9c, +0x86034eb2, +0xc4dc0ca1, +0x35285ecb, +0x521c4877, +0xd8f9c1d4, +0xca92bb2a, +0xa765a52a, +0xe643bff1, +0xc3b4b866, +0x0bbcc0b4, +0xc2f31054, +0xf400f47a, +0x94affad4, +0x1624395d, +0xe64787a6, +0x5e5548ac, +0x35b48a9f, +0xdddb0b80, +0x6074bd35, +0x797633c1, +0x65cd0a90, +0x0ab058d8, +0xa1555f68, +0xa7fc2266, +0x8e61e20d, +0x2b152811, +0x1ffdb306, +0x2a815bca, +0x2c2cd38d, +0xa5e840c8, +0x793e0247, +0x204aa346, +0x3789f249, +0xcef3fb45, +0x14cc6aa9, +0x909d4f00, +0x167a367f, +0x6fb8b980, +0x8a40857a, +0x021d61b4, +0xb07410af, +0x74bf8d37, +0x4b5f533b, +0xfb14a1c1, +0xf39c6175, +0x0a7a0965, +0x9a32c0cc, +0xf3e6d595, +0xef3a20a7, +0x35235f80, +0xff8b037a, +0xb3e64441, +0x0bf73572, +0xf8c833df, +0xcea5fa42, +0x5eda5a38, +0xad5f6625, +0x51473169, +0x041cfd08, +0x6472c2cf, +0x9997cb2f, +0x009267d6, +0xecacbffe, +0xa3c472ec, +0x1e23df0a, +0x9367d84f, +0xc2ac9ae7, +0x63c5c5a0, +0x8da7f769, +0x707186db, +0x0eb7ab44, +0x3a9a2307, +0xe24cf1ad, +0xc564dbc3, +0xdf07a85a, +0x0f7a7c70, +0x0c8a69b9, +0x87bab9ab, +0x32576d0e, +0xc17447c0, +0xf8e08fc1, +0xed5bc767, +0x4e26b889, +0xb4bd9e92, +0x5f4b2a5a, +0xda654416, +0xb244970d, +0x90392fe2, +0x4329f27b, +0x974f9cfb, +0x8b100b35, +0xc1375a6b, +0xef6b6b6b, +0x7d12d546, +0xd7c8f474, +0x62d79596, +0x1b957451, +0x4b279690, +0x8c0edf00, +0xdb1d6429, +0xf6598a22, +0xc1b8b263, +0x043a0a7c, +0x7be0a89d, +0x8656390b, +0x45e87f77, +0xd9691edc, +0x6923f0f9, +0x4d919c50, +0x2b0aa37f, +0x7e17fa97, +0xe02f000a, +0xd69d20a0, +0xd7783458, +0x83026a5c, +0xfa94735c, +0xd89ba7af, +0xfbf2f2b5, +0x2b1a3632, +0x480866a6, +0xd524b575, +0x4cc31999, +0xb5ab4263, +0x0126caf7, +0x92ee87f1, +0xa9c6a080, +0x3e05f6c0, +0xf6206b05, +0x68bb65ec, +0xc8e09d94, +0x7db0b4e8, +0xb10cbe91, +0x2cdb2fed, +0xd357a0ab, +0xd9579a42, +0x10880fc0, +0x14dc3ff7, +0xa21df74d, +0x89699c71, +0xd306dbaf, +0xfe122ca2, +0xd4dcea6b, +0x44efd14b, +0xd05e9318, +0x4b42f551, +0xd8bb87da, +0x1f37c4af, +0x7dc7b67b, +0xce7ade12, +0x1bec4352, +0xe23a54ce, +0x102b0089, +0x17db5b40, +0x3a08852b, +0x9206f0d5, +0xc7d8c601, +0x5e2f1479, +0x1f341efd, +0xc971a645, +0xf764d66b, +0x8f05964b, +0x6a7bf51e, +0xc1c45728, +0x5a58c692, +0xf591b990, +0xf78ceab1, +0x8ce1b5e3, +0x6c3ca98e, +0x66fe0045, +0xdad878aa, +0x153586fa, +0x8ceab70c, +0xe31ab218, +0x5385cd56, +0xa2328db0, +0xe99ab6c3, +0x334d11a9, +0xd9f2830b, +0x81d9a1eb, +0x2f8a150e, +0x229ad08f, +0x0cc69d3a, +0x28d95084, +0xcd282b6b, +0x555b4ebf, +0x5e6e757d, +0x0b89e2eb, +0xe79fadcf, +0x63020947, +0xe7844663, +0xa05155b4, +0xddf89882, +0x09b864cc, +0x88381027, +0x8d26414d, +0xd3fda3db, +0x83b862b5, +0xe316c58b, +0x7eec0ca7, +0x22dfb2d1, +0xd988589a, +0x8b2e2334, +0x0e118832, +0x24963785, +0x8cb02e61, +0x54a25fa3, +0x90278a6c, +0xb22b37ca, +0x117f3ccc, +0x19ea8125, +0x1c4e051a, +0xd3495aba, +0x8114181e, +0x763385bd, +0x34457b69, +0xd8c01255, +0x6f82b3ed, +0x647f22cd, +0x8d95a664, +0x5afd0821, +0x733b763a, +0x3a050ef0, +0xb7dc4e82, +0x3078dbca, +0xda683220, +0x95e3166e, +0x7f44a9de, +0xbf769fa1, +0x9da326d3, +0xc1f43017, +0x3f8d4527, +0xad005039, +0x6ef1ad2e, +0xf35e6ddd, +0xc774af57, +0x7006f4b2, +0x10a87b9c, +0x7a037373, +0xf1cb9d5e, +0x94d58a31, +0x6ee7acf8, +0x86f6159e, +0x1fa07375, +0x495a1c5b, +0x45b812ad, +0x5bd1624c, +0xf5a63baa, +0xea44fb1a, +0xb003f08d, +0xb02f6aa5, +0xc4215286, +0xfa852d4b, +0xea1c8eca, +0x45c36017, +0x4328c2f5, +0xb34b2fbb, +0x3703946f, +0x06cffdc7, +0x96c6fc03, +0x8f1d01db, +0xae314404, +0x3e2c1a4b, +0xe07a3461, +0x835eba05, +0xdf466dde, +0xe17360d0, +0x372fdb21, +0x197c0c47, +0x192fa42a, +0x1a742027, +0x445ea8a6, +0x2ce2fead, +0x77138b95, +0xc8c313e0, +0x95c3a015, +0x33cd021f, +0x9726260e, +0x7d60518b, +0xb563aacd, +0xc03d6177, +0x870f2d60, +0xa17aeb71, +0xb81737c6, +0xac2508eb, +0x7d9348e0, +0x3f24b8c9, +0x06d6c2a8, +0x3b18a2f1, +0xf685bc53, +0x718e4a3e, +0x78417511, +0xaf355957, +0xa94e5956, +0x18cf2fe3, +0x0cc54bed, +0x2029993c, +0xbea3ed3c, +0x18288536, +0xbbd2a4d7, +0x898ddce9, +0xcbbeb239, +0x0c8aea0f, +0x5a779aef, +0xc57f6351, +0x4593419a, +0x627f885e, +0xb1af1945, +0x19ba4aa5, +0xaa7a908a, +0xbea59b44, +0x9e80d474, +0xda8a107d, +0x2f714c18, +0x025a63cb, +0xc9cb038d, +0x1f3df10b, +0x4adba2dd, +0x974cfe6b, +0x6a74f484, +0x5d781c4c, +0x63b38e6e, +0xef15ccbe, +0x42de3cc5, +0xca0672ad, +0x415a8244, +0x117b2b72, +0xb6f4eb27, +0x346f81fe, +0xf3e13852, +0x85551fc0, +0x679c1884, +0x2641590e, +0xf75fd6bc, +0x9cd02e3d, +0x3ec0dafa, +0xb83ec497, +0x24880ae8, +0x785c9080, +0x6ae18a79, +0x8e5c60f8, +0x433ea6d8, +0x9bad9a79, +0xe543aa99, +0xbafdd173, +0x79c672ba, +0xa34f3988, +0x2ffcdd84, +0x029773d7, +0x275d8976, +0xc496fe18, +0x92be5ce6, +0x4a20c795, +0x0a9a1d0b, +0x22fb1566, +0x3c604ecc, +0xa10f7a51, +0xab875df6, +0x82d95d0b, +0x49c6f37f, +0x1d096708, +0x88069116, +0x3bbdc47f, +0x69c6251f, +0xd8e60996, +0xf7c0537a, +0xd8aff961, +0x4ccd6ac1, +0x9dc7784b, +0xbbfda119, +0xdfc5fa13, +0xbb145f69, +0x921bb1df, +0x9455c3e6, +0x43aa1c1a, +0xa9cb0e75, +0x0427e6a3, +0x64e481ed, +0xdbaa77f6, +0x30d4a29b, +0x8801b062, +0x7a82a56a, +0x00333a1e, +0xff399c13, +0x5dc5c366, +0x6f77e44e, +0x73326e5a, +0x03defd4f, +0xa0cd7325, +0x727c7a7d, +0x290d214c, +0xea608ace, +0x3d73e831, +0x7f38c71c, +0x4a39e02c, +0x50494c0d, +0xa25e999a, +0x06591c1d, +0x4868deb6, +0xfe6163b6, +0x741a7a3d, +0xaed3619a, +0x10e34e3b, +0xbec653ec, +0x13cf0931, +0xc933ab74, +0xd7c35ab9, +0x77fa78a8, +0x75580cbe, +0x26cbcf8e, +0xad2a1836, +0x47a894c3, +0xd86cbefd, +0x0d40be7c, +0xfe36164a, +0xba017905, +0x0afc151f, +0x29474b83, +0xa9a34dac, +0x6766df3f, +0x58bb9a38, +0x26e1a4be, +0x9e900f55, +0xacca54cc, +0x19255096, +0x79efa2e4, +0xe0ed000c, +0xe33bd021, +0xfa5bc72d, +0x910151f4, +0x79dbabb3, +0x7fc19387, +0x0415a9fd, +0xe721573c, +0x14330fd4, +0x9c685483, +0xd16b936c, +0x3c7656a1, +0x027febbf, +0x48145992, +0xf456a38a, +0x269871df, +0xdebdffab, +0xf3e0be63, +0xb2ea7ed7, +0x72f5bae0, +0x17babe99, +0x19149e58, +0xfbb5cfc1, +0x1a62db80, +0x95721591, +0x1abf27d8, +0x7bd28b35, +0x3d169f71, +0x56de3eb7, +0x7bfe58aa, +0x82015439, +0x7d4ee26a, +0x391c7554, +0x0dc8f603, +0x01879c37, +0x41f78be9, +0x601e0394, +0x038fb54e, +0x30a3484d, +0x712973f0, +0x289f0c74, +0xb3e24d36, +0x59f37773, +0xe3904b90, +0x10cb680d, +0x1c382501, +0xe7ada8c7, +0xdbf94e03, +0x1e155bc2, +0x4bf05629, +0x4dc6c3e5, +0x22efce99, +0x7c29cb51, +0x923d6149, +0xf3068c52, +0xea046332, +0xdf0b3b13, +0x65818e2d, +0xc20991cb, +0x86b8c4da, +0x6e3a27f9, +0x1cc2148c, +0xf72daeb4, +0x17c3a2f5, +0xb76d0105, +0x20381925, +0xa482e563, +0x028830a7, +0xe47b2895, +0x0c31c527, +0x4819aa0f, +0xe4f9eda7, +0x0ad4eff8, +0x0da1cd3a, +0x71917d7f, +0xdf701798, +0x36e525bf, +0xcd81e79d, +0xeb4d9c15, +0xc29d929b, +0x71544b7d, +0xee5ed4fa, +0x3b6572bc, +0x98097c29, +0x40c9e9dd, +0x7e58c0c2, +0x67f0810c, +0x8df6862c, +0xd0361cc7, +0xcf2eb077, +0x3f03a957, +0xc4fe698f, +0xa41467a8, +0x9ab7f277, +0xa2c41407, +0x317027f9, +0x10e317a8, +0xb057bc11, +0x0796f127, +0x8de575de, +0x210e2624, +0x6cc0528a, +0x7d81a5fb, +0x149da5ed, +0x24d56525, +0xa85f7b0c, +0xea4e9916, +0x27cca5f0, +0x5a101e7b, +0xf92e80d6, +0x51ba1e71, +0x7c43cf6e, +0xce753c47, +0xbe58fb6e, +0x8cc2b72f, +0x9b23c537, +0x51522dec, +0xfe77781a, +0xb18220ea, +0xcd132ba6, +0x4725457d, +0x195da3a0, +0xa72ccaae, +0xb543feab, +0x36bbdcc3, +0xa30d9cc9, +0x41b0f8e1, +0xa5d7261b, +0xfe032603, +0xe7a4254c, +0x78063d28, +0xd280f38c, +0x18492f1f, +0x3b85dfd9, +0x31dd95b5, +0x21adf169, +0x436774e9, +0x4cf45393, +0x44e646e2, +0x6fe2d542, +0xb55fd9e7, +0xe6d8d061, +0xee04162b, +0x71959fde, +0x128d0912, +0xb0c6d1ae, +0xf35d74ef, +0xcb50c552, +0x7d01cca9, +0xddcb646e, +0x2b6a9bc2, +0xd1bee3f8, +0xc2cc7d32, +0xe24e7d86, +0xde9fdf99, +0x9948f593, +0x2de94ad3, +0xb1ca25f8, +0x31381c16, +0x7e61bac9, +0x751b4451, +0x79b6fded, +0xecac8d1f, +0x8c16c15b, +0x04662215, +0xaeec0827, +0x595a4bd6, +0xe84337ee, +0xfe97b603, +0x54530062, +0x501f07da, +0xec86b0f9, +0x2d25e32a, +0x083ceded, +0xf8f27108, +0x63b2c92f, +0xf954c0db, +0xd2c712d7, +0xe1ecaa3b, +0x8f67f30b, +0x4d9deeb6, +0xac145932, +0x44d3ef6b, +0xe41d1bd1, +0x281a9408, +0xe588222e, +0xae780168, +0xae7ca20f, +0xff4ba449, +0x915a0dca, +0xb4802bd6, +0x5c51c14f, +0x90cac126, +0x10f7dba4, +0x318790da, +0x1abc6c39, +0x9626c2c0, +0xf84d2c65, +0x9d7f5f8e, +0x63501e4d, +0xf836655d, +0xc9f2f33f, +0x5d581ff8, +0x7dff4b09, +0xa51958bf, +0x2cdfccd1, +0xcc49e81b, +0x41cb52ab, +0xf8ca0a0f, +0x191219dc, +0xf4189d72, +0xe228550b, +0xc902cb19, +0xdeb8e82a, +0x3aeb3289, +0xaef61b53, +0x607c5f65, +0x08e3199a, +0xf31c2734, +0x083edb55, +0x5d591ba7, +0xe2e71e65, +0xafce83ad, +0x0e618eed, +0x7f2b1bc9, +0x8e398140, +0x50a9c7f0, +0x0abf9921, +0x8b0a1ca1, +0xf30832b7, +0x97ad77ed, +0x70c279a0, +0x986e00ca, +0x2c86c499, +0x7e6f711e, +0x244cfe68, +0xba97305e, +0x54fa7b5c, +0xb0e2fb35, +0x5a8cd571, +0xaf9b2054, +0x0d6f7a0a, +0xa586bf08, +0x8e342bb6, +0x5132410a, +0xa09ae1c3, +0x64d84761, +0x87da49c7, +0x50a4851a, +0xdb059401, +0x3bf74b79, +0xf88c9e2d, +0x9a94a725, +0x87664983, +0xb9aecb37, +0x451e1260, +0x658b362a, +0xf3fba82d, +0xab71a153, +0x68099093, +0x1a361be8, +0x36028b47, +0xb1f09361, +0x7ab7f3b8, +0x94823cad, +0x2b47cdce, +0x030746da, +0xb151c296, +0xa7d131e0, +0xfaecdee6, +0x2efc616c, +0x89bbb61c, +0xc8875742, +0xdad0fee6, +0xfe5cc539, +0x2b95c46e, +0xd53419e2, +0x3604ede2, +0xa516c26e, +0x604d547c, +0xc49b5071, +0x1cdb582e, +0xd9d465a2, +0x0b56091a, +0xbfa1245a, +0x33011931, +0xc2764f29, +0x8fc3f538, +0x7e942c59, +0x5798e2dd, +0xfa7a68be, +0xc4a90440, +0x25d485b2, +0xd32b6f22, +0xce9ec219, +0x895c581c, +0xaa8d8dea, +0x7c6f5872, +0x1ecf66a7, +0x31ddfb82, +0xd3ae5e1d, +0x4e8fb647, +0x6df1bf5e, +0x1b8cbad6, +0x057bb1aa, +0x0188b2c1, +0xbbe25f73, +0xabbf438a, +0x37e22af1, +0x3195fb2c, +0xd86f6ff2, +0xca5cfa7c, +0x5372094a, +0x0da409ee, +0x2d9dc06e, +0x2b18eca9, +0x4ba8e234, +0xd2e2d833, +0xee4b7b26, +0x213ee84c, +0xd6f66193, +0xdd47bd6b, +0xce226e5d, +0x5416df56, +0x04bc9dc4, +0x539536ab, +0x61c0c02a, +0xbc80cf59, +0x1e6ffa6c, +0x12a7dd2e, +0x8cecc497, +0xc719f6e0, +0x1e49c860, +0xf17a172c, +0xae8b1b0c, +0xe57b62b2, +0x90594b97, +0x86354683, +0x101bb301, +0x2662d95a, +0xd7cd301d, +0xe199ecc2, +0x61c23e00, +0x7ca8421a, +0x6022a746, +0xde51f369, +0xca08fd86, +0xb58b0f6e, +0x4f77090b, +0xe6078065, +0xe2092aba, +0x775dc6c8, +0x6cf85d6c, +0xa71c93ad, +0x6a9d8c46, +0x0c57ffc5, +0xc6ab3178, +0xd07c71e3, +0x58e36e7f, +0x70e51721, +0x91058dcf, +0xe2e5d84b, +0xd2dff2dd, +0x8f503c3c, +0x92bbc705, +0x9c5824b2, +0x779b0f77, +0x1768a699, +0x2c59276d, +0x2c5d001e, +0x9271d70b, +0x1f4a289c, +0x1c554fb3, +0x7f9c5b79, +0x9ce61961, +0xb33cae8a, +0x77248a79, +0x6ae1a8c3, +0xbff3107b, +0x4c0cb6fe, +0x502de9fc, +0x1215fe2f, +0xaf3cc204, +0xfc7de93e, +0x5e0002a9, +0x000b36ea, +0x3b2938ad, +0xfccab71d, +0xf8505e2f, +0x17f83321, +0x797e613c, +0x8f4bbf90, +0xc3b1af4e, +0x67819576, +0xde71cf33, +0x8c3cedec, +0x1ee97002, +0x7c572969, +0x23ea8695, +0x47d42e39, +0x0f990de7, +0xf55e6eb1, +0xc9b9f208, +0x299b9f4b, +0x27446eff, +0xaebf9641, +0xb1fc78f8, +0x6df126d3, +0xa5d4adb1, +0x5c78e114, +0x4dd17255, +0x4641c709, +0xea0c69fa, +0xec3b86da, +0x21e37f52, +0x3d746a01, +0x43352343, +0x3f3d3e2f, +0x6a3eaa84, +0x12319b40, +0x3d0be700, +0x88f49fde, +0x1e6f6f2d, +0xc1f775d6, +0xd936d6f2, +0x5c8db645, +0xa0b286c8, +0x43478701, +0xc3b03d65, +0xd154fb60, +0x7aab3b1c, +0x355c000c, +0x374004f2, +0xaea8ff25, +0x0417c4a3, +0xe197146a, +0x317c238a, +0xc51408a2, +0xdb828619, +0x504af888, +0xc544900a, +0x601a4a29, +0x752366e4, +0x1531f23e, +0x9194bd4d, +0xe21487d9, +0x60528f62, +0x9b265d48, +0xce0bd166, +0x6126261e, +0xb639d21b, +0xe520e827, +0x4e5b942a, +0x9694b540, +0x17e4a0bc, +0x65f7aeea, +0x2bb08134, +0x58802569, +0xd01a1a7e, +0x3ca366bd, +0x01b9d357, +0xe3d0c84b, +0x70276de2, +0x5630fd02, +0x5df479c0, +0xe20e2f52, +0x81b5565d, +0xb00adbbc, +0xfe604230, +0x794bf0df, +0xf25fd14d, +0xebc14754, +0x5f0c0b01, +0xd0e3ed31, +0xed1766b8, +0xd8ef9671, +0xd06f8f70, +0x5df01d7c, +0x01664b1e, +0xc31d58dc, +0x1032c970, +0x46dcc478, +0xd2009aa8, +0x45b24652, +0x766e9272, +0x845a5226, +0xb990c66c, +0xf9fb8924, +0x1396007e, +0x44d488fb, +0x02c2c487, +0x33c076e4, +0x7814d9af, +0xcbd89a05, +0xb987d1c1, +0x45aa24cc, +0x9ab85016, +0x8bf1b2c4, +0x1a46cf3a, +0x8515ce05, +0x5f97d785, +0x82b8fc21, +0x2739c7ae, +0xfd094bba, +0x5154409d, +0x4af76072, +0x4e4a5d92, +0xeaddde26, +0x821b236b, +0xb520a03b, +0x22a43c69, +0x7cbaf5dd, +0xdae39232, +0x0d2ac4e9, +0xd1e86951, +0x2f3acada, +0x40b4784e, +0x8895503d, +0x155234b0, +0x124ddf24, +0x3b195b10, +0xdc64da34, +0x973067d7, +0xc054af6d, +0x8b081512, +0xabc056fa, +0xa9827474, +0xc267d26f, +0x119e99da, +0xd1171dee, +0x4ee17464, +0x284d83b0, +0x327ad25f, +0xdbc31200, +0xdc6f1dee, +0x6091a38e, +0x6b5c1c82, +0x5e18793e, +0x96cd0f6b, +0xf6cb39bc, +0x4635169e, +0xe8443bfe, +0xe6889f39, +0x9f0147f5, +0xea9a88da, +0xf05788f2, +0xf06a9626, +0xb1a44f5d, +0xe2e93fe8, +0x60524d5a, +0x12767ede, +0x6a3dbf74, +0xe580bfc5, +0x6961f137, +0x51226ea5, +0xd180284c, +0x293450dc, +0xfecf9b7d, +0x31dbad16, +0x47fbf105, +0xe67c3fa9, +0x80300c09, +0x27eb0eaa, +0xff68cddf, +0xac6c4ca9, +0x63e552b8, +0x1879a428, +0xbab43924, +0x3eda894f, +0x53dc33e5, +0xce2c7c5d, +0xc6c44c78, +0x23075857, +0x895c89c0, +0x2973a07a, +0x674c80a6, +0x735d4240, +0x6141890f, +0x33e5001a, +0x602f311e, +0x5c65643e, +0x89669083, +0xbc8c3567, +0xee50cbf4, +0xc0bc4f6d, +0x8de4e268, +0xfc6d4944, +0x19409504, +0xe654c1c0, +0x5b52fa56, +0xf30f65b1, +0x3cc5f6e5, +0x1ee5f631, +0xa8c6ccf9, +0xb9f2b61b, +0x94b636a5, +0x1f7e419f, +0x7148a8de, +0x6fd2bc0a, +0xd9782006, +0xe7dd4320, +0x6bbe846a, +0x8b4e746c, +0x7cb36842, +0x3d8abbfa, +0x99d811e7, +0xb6661430, +0xae5e216f, +0xe44b08d1, +0x331fcab3, +0xa048f349, +0x0b465df1, +0x8b1b9412, +0xab05caea, +0x0e21ea43, +0xae2a5d2c, +0xa27386c5, +0x2bb0b5b0, +0x0d332e28, +0xd56df17f, +0x6f96db82, +0x9418009b, +0xc5f9ff54, +0xfd257454, +0x6bc916db, +0xd785ca63, +0x17e50aa7, +0xb186fbe7, +0x1131b079, +0xd47b5ac3, +0xdb25a276, +0xf8feb8fd, +0x8015c977, +0x6cc46185, +0x13586dcb, +0xc5f6ea1e, +0xe4cbad94, +0xb890404c, +0x783fa58c, +0xa901cf69, +0xed86acaa, +0xe0814e35, +0x69d67ecc, +0xa9ead96a, +0xe7e7aa15, +0x3448af93, +0xd810bf52, +0x0c5984e3, +0x89fe767c, +0xe27fec03, +0x3e479b5c, +0x6c3d0578, +0x95bc71c6, +0x35bdaa5d, +0xc6f5dc98, +0x6f9f0edf, +0x129a136e, +0x4862e00c, +0xd699e2c5, +0xd35fdceb, +0x4966f17f, +0x24087b60, +0x7b9c907f, +0xc0d93765, +0xbacb20ba, +0x1e7e268b, +0x57507bf8, +0xe782a136, +0xa9eec89b, +0x8b4b1db6, +0x36807ede, +0xcbd916f5, +0x7d68e4d1, +0xf1a5d00b, +0x6550a28a, +0x9827ab35, +0x6d343887, +0x4869249e, +0xf841de2e, +0x3d49daa9, +0xf647cfe5, +0xd18ba845, +0xd0ebc5f0, +0x3975acfe, +0x23e96c71, +0x4f8ca1cb, +0x716fe8c1, +0x643b011c, +0x4efd88ad, +0x1ed30fc4, +0x7da03285, +0x3568a759, +0xbfd77470, +0x2a9d08a7, +0x5875cb68, +0x3e5e9984, +0xa76690a9, +0x55c2f65f, +0x3d4aab64, +0x2f9045f3, +0xbeff8a22, +0x9f2cb371, +0xbee39228, +0x4b1f0f7a, +0xd3d0a94f, +0x71bd4325, +0x901888cb, +0xfe44cc77, +0x87386dbf, +0xf51a84a3, +0x45824fff, +0x06472f89, +0x2f636247, +0xa0190881, +0x4d492abf, +0x214abd19, +0x1ba123ab, +0xd271e139, +0x40fcc816, +0x79482b56, +0x97f01a3d, +0xef8d8956, +0x08ee3465, +0x2e57607d, +0x7174a6b9, +0x933734d4, +0x8f294237, +0xbf3e9b95, +0x2c1f53d0, +0x019b89cd, +0x394470fe, +0x4c1c8d57, +0xdc11dab6, +0xb72ab9df, +0xa8ce4dd7, +0x43ab9004, +0xca78905e, +0x3c75c474, +0x2ac63f2e, +0x7beb478d, +0x0182d22b, +0x8cebd085, +0xc026e91d, +0xf198490e, +0x0872a723, +0xab8d455e, +0x7be7da95, +0x9105c15e, +0xc367afc8, +0x66a8d313, +0xb87cccf9, +0x5c4a94ed, +0x748fb3f6, +0x61f93c63, +0x902451ac, +0xdbee6e8c, +0xd18dd056, +0xab054073, +0x90285172, +0x51c5f4bd, +0x9b0a1ce7, +0x49c11fad, +0xbbe3c198, +0x4f15f0de, +0xf9d29515, +0xf9f3d80e, +0x4d2ab8f2, +0x803b59ec, +0x61093dbd, +0x8989e2bd, +0xfc3ba663, +0xe7e6e339, +0x07384a2c, +0x96ee2fa2, +0x55d58066, +0x4f95807f, +0xf791f1d3, +0xbe86b140, +0x916aac72, +0x83333a7b, +0xb39060ff, +0x3d87c352, +0x1c55c47f, +0x5a89078b, +0x2741875d, +0xc53758be, +0x0028192a, +0x04bc70dd, +0xb1f7e00f, +0x7f8792c6, +0x01adab56, +0xfe38bfa6, +0x8328fec7, +0xf33fd106, +0xca02faf0, +0xe737658e, +0x7c668994, +0x7399dad2, +0x3ee98299, +0x33f65308, +0xec8385e8, +0xa8c0d3fd, +0xa9717f1a, +0xa43aad12, +0xd81c46c6, +0x66b74bdf, +0x18e9c8fd, +0x2385e197, +0x0d227a62, +0x171d7cc0, +0x259479fd, +0xe3f29dbb, +0xb25c03d3, +0x22ee70e1, +0xe2ada2f8, +0xb056638b, +0x4cbab5bf, +0x7e1af8df, +0x33bc7637, +0x16a42353, +0x95e0e440, +0x22f77f79, +0x3dde280c, +0x4d45310f, +0x311a9de4, +0x66b293b4, +0x687aced8, +0xcad8e4ec, +0x930d6228, +0x6b3fd2c3, +0x8574cf1e, +0x6aa90b36, +0x998fa478, +0x140ff6a8, +0x509c0ba1, +0xb59190fd, +0x1ba96860, +0xd7efe522, +0xc19d66ea, +0x08fbafa3, +0x82d953da, +0x8f2b3181, +0x114f3748, +0x988c02c5, +0x303a7581, +0x9b837714, +0x67357cb1, +0x91b8736b, +0xaadd7944, +0xe329fc95, +0x1bc1c832, +0xeae250e4, +0xb12c54ac, +0xf73f956c, +0xec8f5b49, +0x135e4efc, +0xfeafcc4d, +0xc46ff63c, +0x11e11c85, +0x71a5b53c, +0xcc881718, +0x439d2922, +0x203ceca9, +0xd45dfd5b, +0x28e6a9f1, +0x02245ade, +0xacaafc01, +0x7aae21bd, +0xa30a4a20, +0x4d282ad5, +0x830b5e15, +0x2740bd45, +0x7d2767ff, +0x314a52ea, +0xbbb29b9d, +0x91712421, +0xe79a2aa0, +0x06462493, +0xfa80366b, +0x315efe55, +0x1e10556b, +0xee15e09f, +0x7a5aa273, +0xf4a6c1f5, +0xda9cc804, +0x752c9392, +0x51e7090c, +0xbdc2b172, +0x4ce4e1d3, +0x4353e472, +0x3f2060cb, +0xf8f35335, +0x4892bbe9, +0x108c5426, +0x196fd78e, +0x79d2a3f3, +0x7d878d79, +0xc6ffc12c, +0x3fdad6a3, +0x50a62287, +0xacb565df, +0xd7a0c6f2, +0xd8715e90, +0xd9be1bf7, +0xf1cbb133, +0xb885ec5a, +0x460a96b2, +0x64e061e0, +0xbddd7ede, +0xc5c9b570, +0xb7db1ed4, +0xf7699daf, +0xa25a3581, +0xaf3e06ef, +0x959fe330, +0x4e8e03f7, +0x1ce5ea8e, +0x3ceb194d, +0xf0cd633b, +0xe5e88594, +0xcb919386, +0xf71816cc, +0x7a22d589, +0x6f96647f, +0x18b1c720, +0x369ed4a2, +0x15290947, +0xcc6ce198, +0xb68a45d9, +0xbc7499c8, +0x1048deda, +0xa2d81c90, +0xdeebe98e, +0x6eec9f2c, +0x7ae21acf, +0xe08cfbbf, +0xdfb8006c, +0x4e23066c, +0x2df857de, +0xa89d888b, +0x10c7e686, +0xd56db50b, +0xb3b24344, +0x2de8b21e, +0x19e52ad0, +0x766c2e46, +0x663598e8, +0xdae3a42b, +0xd5bf0f8f, +0xc7588e6f, +0x96a803a7, +0x4bfaf95f, +0x36a55b64, +0xe160f521, +0xeb44bfdb, +0xb12a8acb, +0x2103c6ce, +0x888593bb, +0x482ea36b, +0x9a510b8f, +0x8e546764, +0x0b40411e, +0xa2e2ffa4, +0x817efcb7, +0x9352d669, +0x61e7f81b, +0xbe41ea7f, +0x1b62c64e, +0x4b21042e, +0x38982d45, +0xc3ebd9ca, +0x9ae8458e, +0x46b39c84, +0x612ac252, +0x4c25ed35, +0x104d4ec6, +0x8f43ee3e, +0x1d901a50, +0x210787a6, +0x76ef13b1, +0x365729a2, +0x905bd3aa, +0x2e0c944c, +0x72c88690, +0xa3388fee, +0xa2eac9fb, +0x5017124e, +0x1db340f1, +0x6b147dd4, +0x9e9751b7, +0xdcf45a54, +0x462f7321, +0xbc4abe40, +0x3a743140, +0xd140fa26, +0xc580649a, +0x88d92898, +0x2a2da236, +0x53e36b19, +0x131e8980, +0x933c44ac, +0x355e1020, +0x58380ed5, +0x47f4b66b, +0xb4f852d7, +0x7126afad, +0x72d3cb30, +0x973ff2d6, +0x30e3d65a, +0xdadf262a, +0x63d537ca, +0x449e9216, +0x9bbe2ad0, +0x9eded24a, +0x7a7d4011, +0xad1315e7, +0xf8ecee47, +0x2b800f84, +0xdf985300, +0x5c7aa398, +0x35c5e8a5, +0xc32876ab, +0x49945d96, +0x3ee27ac4, +0xba97aacc, +0xbf76870f, +0x389f7909, +0x978452fc, +0x27495211, +0x5f7d625d, +0x58e84161, +0x1e7323de, +0x52c8228a, +0x131925fb, +0x6013ea6b, +0x531d9fff, +0xd2cc4426, +0x502b6a68, +0x1f0dd19e, +0x2d744bb4, +0x910931e2, +0x6d4b7864, +0x336adf19, +0x070960e7, +0xb68154ff, +0x520eb559, +0x8ba842eb, +0xf002ba86, +0xa57c0712, +0x2a7af3ad, +0x8a5b7643, +0x9eb871ea, +0x32b63e0c, +0x89937292, +0xa30c857c, +0xd5cb7e07, +0x06fc4016, +0xe4def41f, +0x9fc1c7af, +0x9ccad95a, +0x5d5473f1, +0x27f8cb3d, +0xecd869fc, +0xe3312ac5, +0xa5601726, +0xde83819f, +0xfa123f78, +0x1d67885b, +0x38d9d0fd, +0xe0d43fea, +0x7a485c97, +0xb106cac5, +0xf050b6a7, +0x2455ca8c, +0xbdf1e6d1, +0xc2d83e6f, +0x5ce0f88a, +0x682a7ab7, +0xf4264ad5, +0x4e8279e9, +0x05001462, +0x101c2d5b, +0x81caa265, +0x3e7408a4, +0x542d2872, +0x7e15051e, +0x626355ee, +0x2da423d0, +0x3eb9d7fd, +0x3a5846b9, +0x54866729, +0x2a3f226f, +0xdfaa106b, +0xfd00d085, +0xbbe1e0ff, +0xc22231f1, +0xab5c1b06, +0xc6c2220b, +0x5ecc1abd, +0xa1a7c6cf, +0x13f97fdd, +0x5664f5c2, +0x2d2cfa01, +0xb5af3ad6, +0x5a36075c, +0xaba2d3dd, +0x203635a9, +0x450531c0, +0x2126aef6, +0xe2571356, +0x4349aee1, +0x32e07a51, +0x768affba, +0x8e05fdfe, +0x7decee0a, +0x7648c11f, +0x1424fb4a, +0x61521cee, +0xa72ebadc, +0x2d8b8d98, +0x61293eb2, +0x940dd668, +0x1208fc94, +0x2107f382, +0xbee14c20, +0x41258487, +0xcc624b4f, +0x6d70506d, +0xf5a2a2a7, +0x1ba37e0c, +0x11d599f0, +0x91378242, +0xb1609ea4, +0xff037006, +0x6c1b3116, +0x7a3d6668, +0x4b2af188, +0x76a00f26, +0x46c4b482, +0xc4bbb12e, +0x63557193, +0xee7fd308, +0x45a86b47, +0x6126d22f, +0xefe3e43f, +0x39e93895, +0x3897e9b1, +0x694a0e53, +0x4c9312f9, +0xa42b2efb, +0xe1e17ad8, +0xac9e7ac8, +0x060ebf0a, +0xbdc74faf, +0xf2102731, +0xa9e02f6d, +0x0f0ce4c6, +0x5290f498, +0x8f7be374, +0x39db2129, +0x0d174e23, +0xd8bbdd38, +0x162d0535, +0x322a3dfc, +0x1524fafc, +0xecc686c4, +0xa0b326ff, +0x8bc58d18, +0xc531aab4, +0x87f08af1, +0x5cdcc853, +0x36c07acb, +0x7d9ec4e7, +0x3a5b4a01, +0xd3eae9c6, +0x4c2c14b6, +0x2b290911, +0x2eec903e, +0x89d11422, +0xaf78b269, +0x7697ddd0, +0x46125e70, +0xa6713729, +0xa06396ff, +0xf61289ac, +0x95cc874e, +0x589aaf68, +0x0b44d363, +0x5308664d, +0x42063d9b, +0x7c6387a7, +0x9dab4041, +0x9524ea01, +0x8f769979, +0x0a99876f, +0xb708e6cf, +0x233351ff, +0xd7664709, +0x4726da49, +0xba76e4a7, +0xac65ea4c, +0x5aae24ed, +0xaa003cba, +0xaf72c3ad, +0x2fd9f5c0, +0xcd889a5a, +0xefac5f82, +0x9808189e, +0xb42190b1, +0xce34411c, +0x02b88f6c, +0x20df436d, +0x55bcce82, +0xea272bbf, +0xbaf8ecb4, +0x9000fe2b, +0xbfe0a006, +0x2256f2aa, +0x7c884e5a, +0x4e894880, +0xc6b20f9b, +0x81b67a27, +0xff341c92, +0xc0b6abcd, +0x1982ba11, +0xda198370, +0x9c857027, +0xc3d9a3a2, +0xd495f9e4, +0xb8b81591, +0x7147fcd5, +0xf3a265d9, +0x66372986, +0x5b36ce5e, +0xe5ee48cf, +0x22e2fe5c, +0xa92644f1, +0x7e544aea, +0x399fd6e9, +0x558d1a24, +0x6ef1e175, +0xf9ffddef, +0xb7c2d8ca, +0x4c03f9ff, +0x1d3b4f2f, +0xc3cee571, +0x9768408f, +0xe80e8855, +0x5968e53c, +0x92395aa0, +0x993aa63b, +0xf775439a, +0xa56e9c82, +0x8650e16b, +0x61ab5942, +0xa772d389, +0x29e34965, +0x4c85c2d3, +0x2acf0c4d, +0x7154328e, +0x70ad9d3b, +0xcbd176b0, +0x2936577c, +0x99dca5af, +0xea2f13e8, +0x659f7577, +0xfb4b06ef, +0xb5c91e8d, +0xa19b2489, +0xd2d9c020, +0xda7edd95, +0x395b0bec, +0xfa9fac59, +0x4dd4ea6b, +0x5412c4d3, +0xc4553bf4, +0x8764f5be, +0x2a2db896, +0x01ffd24c, +0x5a057dc9, +0x290c577c, +0xb1d569c0, +0x43b9cd88, +0x87959465, +0x776497b7, +0xfd454fa3, +0x5756f281, +0x3ca05b3a, +0x8d5c96bc, +0xfec14ae7, +0xd47f494a, +0x8ef8c670, +0x461f06f6, +0x48abe0b8, +0x97d378c2, +0x6c7ab0d6, +0x3874e28c, +0xe82e27ed, +0x33708050, +0x153f9398, +0xb65c1f4e, +0xdeb33e68, +0xea59220b, +0x112643cd, +0xa2b1c64d, +0x81046e10, +0x647e4a1c, +0x207558d1, +0x427383f0, +0x8f02e66f, +0xde020bac, +0x60aba68e, +0x65ab4a0d, +0x55cf23dd, +0x76e0f836, +0xd415e6e0, +0x9f4b7d86, +0x8c3433ba, +0x4c5abdc6, +0x9348141d, +0xb8c3139a, +0x9029139b, +0x32bf8da3, +0x53209b12, +0x6d231f9a, +0x2c33a6e5, +0x55177247, +0xe36a8d02, +0x8f282eb6, +0xe016d157, +0x38237ca4, +0x763c156d, +0x9ac7ce9a, +0x9b102d46, +0x311a84a2, +0xc870c5cf, +0x98cd676f, +0x9a79e62d, +0xeee5ebf0, +0xbcd7a426, +0x587889f0, +0x4a90e0d9, +0x6dd0f684, +0x500ec477, +0xefaf248d, +0xc139bd7f, +0x22572fc2, +0x0dfb348b, +0x06ea5387, +0x5e20180e, +0x524b0fb4, +0x961261a4, +0xac0a563a, +0x70beddb9, +0x6f619179, +0x30884690, +0x22a5b58d, +0xd1a22078, +0x6bd3ab82, +0xa9cb6529, +0x2f171ebf, +0x64aeb967, +0x8020e1e2, +0x7a6237a1, +0xffa963c1, +0x79148110, +0x1d5916ca, +0x30f7c7d7, +0x10f708b3, +0xb4ede9ba, +0xe2165475, +0x6a090572, +0x71f5ed50, +0x96f23a0c, +0x09dcade8, +0x660dbffa, +0xd6bfbd4d, +0x51caa6b1, +0xb2f75117, +0x3cd655f3, +0x2d0588c2, +0x3a69a319, +0xaeda7613, +0x0154d005, +0x967b3b11, +0x7b1bd54d, +0xcb8af0d4, +0x5b512eac, +0x4e16e37c, +0xe1ca828a, +0x2bfe5c9a, +0x91a16985, +0xa3c95a64, +0x452b235c, +0x981d8c44, +0x6ecddbae, +0x33d2e2f1, +0x948526dc, +0x0698f60c, +0x3c92c581, +0x4eea4cc3, +0x7ffb287a, +0x3da03ca4, +0x7d15ae30, +0x5ecd9566, +0x0a081e03, +0x7d4d5aba, +0x2030e87d, +0x27123206, +0x2dead118, +0xb812a316, +0x16f3ff42, +0xcdf50455, +0x59cec923, +0x78fb61a7, +0x5e67ef81, +0xa8b2aa11, +0x5a2dd34f, +0x7ff14eff, +0xeb093644, +0xd75d0066, +0xc607c361, +0x6eeabd55, +0x16dde709, +0xfa78856c, +0x9d816cee, +0xe4765bbb, +0x9636d405, +0xbe44683f, +0xf9c55b08, +0xad18767e, +0x7720519f, +0x527382ec, +0x0d18f0e0, +0x73a3bc74, +0x51eacd60, +0x86761fa0, +0xa9df738c, +0x31dc193d, +0x991db59c, +0x38fb21f9, +0xaf5fa1ea, +0x84e39ad6, +0xb008ea3e, +0xe729827b, +0x0bec6c73, +0x43c02e4d, +0xd906d3f0, +0x949d8802, +0x1682b7a6, +0xceba4e3c, +0x863ffab5, +0xdf9069b8, +0xd2ebfcbe, +0xf531d9e8, +0xa7fe2a16, +0x9ae572ee, +0x18564c35, +0x09e3d88b, +0xa54e6bd6, +0x794efa0f, +0x72d6bb6c, +0x72b0ba22, +0xe6a62e6c, +0x03286665, +0x3255a0e5, +0x2b271c1f, +0x709a9fed, +0x2423bef2, +0x36616641, +0x4d8b6ec4, +0xccb2573d, +0x62ed3cd7, +0xbb22b413, +0xf6ffcf49, +0x752d968e, +0xe686d713, +0xa8db8092, +0x4cb2dc82, +0x22739d19, +0x444156ee, +0x8e9ba629, +0x5818a80d, +0x93a5a41a, +0xdf400d6e, +0x00448997, +0x6998e8b5, +0xee8918cb, +0x597ad974, +0x1c7b12bb, +0xe6a7e359, +0xa01eb806, +0xc86f565c, +0x07082693, +0xbba5eaa7, +0xd8a93cdf, +0xef4d25f8, +0x733098fc, +0xbf9bfe5b, +0x6bcf5e24, +0xe0c1346d, +0x1d446a7e, +0xb27fcdb9, +0x6b03548f, +0xa4d4a1da, +0xad8954fa, +0x0014b4e7, +0xc90e9724, +0x5b3d394d, +0xc9dc6ea2, +0xa0f0213a, +0x6fe12abd, +0x37226565, +0x58cb7e75, +0x841e5efa, +0xa07ba48a, +0x492989af, +0xdad0b38e, +0xa0244dd1, +0xb3aac155, +0x1d7fd61a, +0xa351b912, +0x4a406d65, +0xbb749f93, +0x11de56a3, +0xafc73690, +0x1937af13, +0x811657ff, +0xf2063620, +0x92e7734a, +0x32cf069d, +0x142848ab, +0x96172402, +0xe34fc2f4, +0x128fb128, +0x1b4d4660, +0x9d5ef645, +0xbee894fd, +0x72ae89e1, +0xd56cc48a, +0x40efc203, +0x90646cf3, +0x095e69dc, +0x0f522f45, +0x57db75ff, +0x396485c5, +0x1fc03c41, +0x23b815ab, +0xd5b13ecb, +0xd5f5c306, +0xd3d72943, +0x199a9392, +0x1aa4fb5d, +0x87eff8cb, +0xdfb33175, +0xa79f9b45, +0x76fc9c2b, +0x2fdd658f, +0x769988eb, +0x29a73eab, +0x99eb6006, +0x5f421f77, +0xcd1c2a8d, +0xba83298d, +0xd63ed37e, +0x6203cb50, +0x90309c0b, +0xf43d5d1e, +0x4f8e8d86, +0xcfb828ca, +0xe337abbb, +0xeabf08a1, +0xb9b050a8, +0x89dd5969, +0x934c5f7e, +0xf9f19435, +0xfe452532, +0x4c0d6f0c, +0x6abcff89, +0x94546cf6, +0x7063f6f3, +0x74271235, +0x30aa9e81, +0x2b99abf1, +0xe14d551a, +0x74159bf0, +0xa7315b90, +0x9ffc87e7, +0x826272ff, +0x743ac3c8, +0x7a0e493a, +0xa16ac368, +0xf0386c88, +0xc72d2225, +0xe10b7785, +0xbe0fd2e2, +0xd0713986, +0x6ac9a257, +0xfe2169f8, +0x3e706a92, +0x53681b46, +0xc43e30ad, +0xbb01b3c0, +0xcdab3e00, +0x6907197c, +0x35686245, +0x75e0ac77, +0xc8984073, +0xec8f2a6d, +0x35fddd35, +0xedcf2ca3, +0x41bcaf1a, +0xce5cd300, +0x2c3299d9, +0x802e3cd4, +0x50446526, +0xa9e9c477, +0x4e73d7f6, +0xfb5b49e9, +0xf8c321b0, +0xd8fbb4d7, +0xf30c319c, +0xfb9f9d48, +0x6d66013a, +0x5f3f2833, +0xa657f1e3, +0xdba6e527, +0x96711bdd, +0x92a81cb7, +0x1ef3ce65, +0xd6f0454e, +0x8e7708b2, +0xddbe0d14, +0x5dd0c288, +0x16c81a5e, +0x1e2e4857, +0x9d07a195, +0x5ab5cbb5, +0x9d0d959a, +0x32d56455, +0xa3c225ef, +0xf2e29026, +0xadd511db, +0x17e554b5, +0xce741ba6, +0x1cc36a43, +0xdb125554, +0x265ee566, +0x91e497a4, +0x5a1068d4, +0xc12165da, +0x1472db3a, +0x8180f5e1, +0x24595774, +0x53515a12, +0x36cea811, +0xf0ffff93, +0x3ad087ab, +0xb4ca2682, +0x05c38c24, +0x11f9b328, +0x363a8aaa, +0xf049c86e, +0x2ce30349, +0x20c3fd24, +0x93183e85, +0x6be502f8, +0x8bf6d7a6, +0x86b2489a, +0xddbf2946, +0x552cafa5, +0xf979d999, +0x22945d5e, +0xadc46d22, +0x4bbc48ba, +0x2081fef2, +0x15fda35d, +0x9127c6a9, +0x10ce62f8, +0xf92bd396, +0x976601b3, +0xbab6dbbd, +0x9de13bbc, +0xdda7ff8b, +0x9033637f, +0xeb3433a5, +0x078c94b4, +0x580ab0f0, +0x4ac2c5e8, +0x3ddf4f11, +0x008f12cc, +0xa81d0a39, +0xc156fbfd, +0xe6c3b083, +0x72924aad, +0x35345d1b, +0x23ba689e, +0xcd419556, +0xd3115472, +0x44ec01bb, +0x27906402, +0x45f3a450, +0x4c0c0e49, +0x16a593b3, +0x71dfe2e8, +0xfbf6a770, +0x3601b649, +0x78aa949f, +0xfe72a686, +0xaf92db5b, +0x811bc3c5, +0xb8c8d242, +0x0886d3b2, +0x738c420b, +0x85a7b82b, +0x2c28920a, +0xa501f404, +0x9cedee73, +0xca2f821c, +0xb54b3594, +0x68d3ee1e, +0x69d42af6, +0xd004d761, +0x3d9cc5f4, +0x73b8af7a, +0x463644c8, +0xe9e5654f, +0x0986a2fd, +0xecb9b1e5, +0x93c43059, +0x543135b3, +0x08a46e80, +0x7e0cfd3c, +0x9b8ea126, +0xbc006fc1, +0x87255eb0, +0x03400a08, +0xfe7022de, +0x58460478, +0xb977ada8, +0xe8728ddb, +0x0f54de54, +0xe3f9d63c, +0xfdcdc339, +0x1461348d, +0x71fc1949, +0x8571cc05, +0xeec834e7, +0x045c8780, +0x96460283, +0x9251a462, +0x97ded91f, +0xdb21d47e, +0x26b4d03a, +0x7d66bc90, +0x875e546e, +0x47994797, +0xea6e7ef1, +0xd2d5dd59, +0x70c99bb3, +0x5927e83c, +0x747f82c3, +0x11122739, +0xae351110, +0xb79e59d9, +0xa9e6c2cd, +0xa1403a61, +0xa2e07185, +0x18ef870d, +0xe62fca44, +0xbccf6896, +0xfac92938, +0x5fb43db2, +0x435f5219, +0x07010e09, +0x160c7f1b, +0xfd8bed5a, +0xa27b8f2c, +0x58ac5e66, +0x529ac152, +0x6ecfb6de, +0x9c623a9b, +0x049fc3cd, +0x32cb4261, +0xbabc06d7, +0xd1a19264, +0xb6afea90, +0x2d5bd6c5, +0xde458a0c, +0xadefb15e, +0xfc6de09a, +0x4f6f74b7, +0xb37ee5c9, +0x90787f07, +0x3bb4ce5a, +0x5ad6da2a, +0x87ba687e, +0xcf1d1820, +0x715f079e, +0xcf5f5c7b, +0x81364abb, +0x40da9806, +0x55ad5613, +0x1a345452, +0x704f6899, +0xeb82ad99, +0x230a666d, +0x99eca08c, +0x559e4afa, +0xb9dfcf95, +0xd18f9cc0, +0x90bd7210, +0xe2999ac3, +0xf2abd4d4, +0xf2a40809, +0x8074383e, +0xf3a892d8, +0x6d492182, +0x6c9b4318, +0x300f6cdc, +0xfe696bf1, +0x7e33f838, +0xfab25805, +0xdeef67d1, +0x689bcfe8, +0x25d1b702, +0xf3551b92, +0xd4a9d944, +0x11f41977, +0x67340f11, +0x03a836f7, +0xedf2f762, +0xe00026b2, +0x83ef5b94, +0x71d36c16, +0xc6ff75b6, +0xad1375bb, +0xdcff035c, +0xd0cf8542, +0x09371633, +0x6813bc88, +0xcdb5ddfd, +0x0798b090, +0x0caa055c, +0x593a2d47, +0x060e2be2, +0x47d20139, +0xf0f5a0e8, +0x84238ca8, +0xcdce158a, +0x7dcd9d43, +0xf131eaa8, +0xabeec0f3, +0x70224e11, +0xa09c6938, +0x55bd2256, +0x7445ce99, +0x22d277a8, +0xedbd0e0b, +0x5a77b221, +0x367490fb, +0x3b2631f1, +0x8cab1de4, +0x83a6137b, +0x2830d3d2, +0xead1c8c7, +0x76f4f822, +0x2611c3b8, +0x391586d4, +0x251d5a95, +0xef80673d, +0x7b6e60a9, +0x801426fe, +0xf44475a8, +0x10d45a94, +0xdac94be5, +0x9ec7ee44, +0x6d805dd7, +0xa1df49d6, +0x325c9200, +0x9a263b0e, +0x147e922a, +0x3681e366, +0x8ec94d1a, +0x8247e3ee, +0xbaf1d81c, +0x95e1fdba, +0x12250120, +0x7c7b6d38, +0xf5cd57d5, +0x6c2b3df3, +0x2c85c3e5, +0xf4565c4d, +0xd7fdf547, +0x43e8f70e, +0x69155e39, +0xf2fb5337, +0x0cf53a62, +0x30fa4564, +0x867a9ca6, +0xa1fe938e, +0x763c3f47, +0xbbd345c3, +0x38b17e57, +0xf76eda53, +0xb0544273, +0x3d0394bf, +0x847a4ba0, +0x71f1172a, +0xfde5bc31, +0xf68b92ad, +0x40c83b8b, +0x34ff21bd, +0xe2cdc49d, +0xdd7089b5, +0x45d65949, +0x0451089c, +0x0fa7d105, +0x73b56538, +0xfb79c972, +0xd9d3cee8, +0x8f968087, +0x8e6fc878, +0xebf0fd77, +0x5e7cc720, +0xa6e846dd, +0xbe0afae9, +0x1f4d10f5, +0xca487ad1, +0xb55a45e7, +0xe87b4f23, +0x227f5a98, +0x11b9a6a4, +0x79d826a9, +0xbd85bfa3, +0xffd55b50, +0x416f5abd, +0xbb9c6f23, +0x76e2fbdf, +0xb0758783, +0xb7ce27d6, +0xe8c93301, +0xcb7b2f60, +0x0df1c2db, +0x90688953, +0x64fd0218, +0x3d60d00c, +0x3e3bdc93, +0x25f18a2f, +0xd93f2a03, +0x065c4415, +0xafeacedb, +0xc5a24534, +0xb4b4bd23, +0x1a4dc438, +0xb76625d5, +0x47bd9e78, +0x05832b9a, +0xd7dd2388, +0x9e3534af, +0xc2ae03a0, +0xf5dda006, +0xaf4fbb0d, +0x20d2c043, +0x3179ff3a, +0x40438585, +0xb4d322d7, +0xc435221d, +0xd0d36cc4, +0x2163964e, +0xb984a8f2, +0x517cb518, +0xe2c33806, +0xb7827d91, +0xd5ea244f, +0xf6e70029, +0xc35aacae, +0xe4c8ec9f, +0x111af167, +0x7ab2add7, +0xd3dd3125, +0x90caa6c7, +0x4197de43, +0x5ef02e2c, +0x8c244250, +0xd23b4263, +0xd09602b8, +0x734b91c6, +0x5dcdc571, +0x20a52116, +0xab1e7bdb, +0x0754b8a8, +0x4569f447, +0xb319e9d5, +0x0b47811e, +0xeda95d2a, +0xd7355331, +0x1c25db85, +0xada9a718, +0x41ca90de, +0xf31a1c60, +0xbb3f5ed0, +0x9f22f406, +0xe7b6fb11, +0x6bda9207, +0x5f8f176a, +0x1a714872, +0xf3d050a7, +0x1d645fb2, +0xfd955af4, +0x98f33a91, +0x89f4978b, +0x17323936, +0x7b147070, +0x384ac053, +0xe1133c4e, +0x7b0dd82c, +0x38d4f443, +0x6636c996, +0x57210088, +0xde2881ae, +0x62631d31, +0xde094dab, +0x575875af, +0xc1c4a585, +0x80b5838d, +0x7d2437a8, +0xd9380611, +0x78b743d9, +0x172e4005, +0xc163cadf, +0x981eadc8, +0x1066baae, +0x2e140f2f, +0xd7028859, +0x2d77a65b, +0xd0c03d7a, +0xe178f5ce, +0x5bb6f12e, +0xd1a78fdc, +0xa838ee8b, +0x37378135, +0xa3f5d6c7, +0xda6a7bc7, +0x14a25c02, +0x8cc916d1, +0x1c3759f7, +0x035cb994, +0x092deded, +0xa6ca1e72, +0x9df764bb, +0xb29fa674, +0x32df3871, +0xfb900263, +0x73a79f38, +0x105483bb, +0x715b9505, +0xe99d80d0, +0x3155bda7, +0x0e27eab9, +0x19110487, +0x7b819460, +0x9d84e280, +0xee388893, +0xc20c49cc, +0x25cad5fb, +0xc948a9db, +0xd742ff40, +0x8acf80c1, +0x38a6def0, +0xb4d53c34, +0x3400c863, +0x07e25856, +0xd231c3aa, +0x126a46e9, +0x8fa5ca75, +0x2d433d6f, +0xb42945e9, +0xb66695cd, +0xb118b2e5, +0xc7097709, +0x001130c8, +0xabcde5a5, +0xabed2be0, +0xcc987531, +0x940ce0ed, +0xcb12b849, +0x6678d515, +0x1bc0b9c9, +0x39647739, +0xdc379b64, +0x599df7e7, +0xd1a37374, +0x5180a1d3, +0x6b7de18f, +0x982f57e7, +0xf3c135b3, +0xf2853149, +0x42f2b21a, +0x028ff30b, +0x63fcbb2d, +0x7a7e2ef9, +0xd7d4b4e1, +0x08d998c1, +0x0b5071fd, +0x69a35272, +0x8db279da, +0x2c119095, +0x8809d8e2, +0x1c3efe0e, +0x65f537f2, +0x768c8790, +0xee8a69a2, +0x3724deaa, +0x7799ae06, +0xbc008f61, +0x4491df46, +0x868e20a7, +0xb380bd44, +0xdb5e7039, +0x0f8245c9, +0xa27c1d90, +0x47d1fb58, +0x1606a778, +0xc7e58039, +0xd4c0caf5, +0x27f13157, +0x9c06c8ef, +0xd5b3cae0, +0x49b00dc2, +0xce60ef42, +0x9c3bce8b, +0x396a6288, +0x5fa5c722, +0xe874cdd1, +0x6fbf83d8, +0x850be501, +0x14a517b6, +0x23de324f, +0x243a854a, +0x80922960, +0x70171517, +0xd4164100, +0x9df3dbdf, +0xb797f752, +0x04f2493b, +0x77950d46, +0xd1023dd1, +0x398d8290, +0x9588f550, +0xed40bd9a, +0xcd401306, +0x9acdde25, +0x3011d2d7, +0x4ba980e8, +0xf58db8e4, +0x6a2d860a, +0xf316b3c3, +0x9f54ec3d, +0xfc3f4919, +0x4d5dbe60, +0x55a9e30a, +0xc05caf72, +0x0ce4008d, +0xe3c36561, +0x87fbef62, +0x73c5c93b, +0x1992fb06, +0xf2992514, +0x971019bc, +0x935755cf, +0x04d3a9d2, +0x1e41aa59, +0xf09ce89e, +0xd31a01ed, +0x0a0f3184, +0xe0254b89, +0x02b94ff0, +0xfca08fb1, +0xb10c763c, +0xa340912d, +0x34d0e42d, +0x0deeadb9, +0x20c44ac7, +0x992aeb2f, +0x3b221d79, +0x16df814c, +0x6ae3f64e, +0x2c9595ff, +0xb2320cb9, +0x53703664, +0x18abf247, +0xfd92604d, +0x79751fef, +0x02540866, +0x63ce99c2, +0xeac3e7f1, +0xccd5963f, +0xa727d011, +0x92763713, +0x1346b328, +0x4fb3c011, +0x7f57113f, +0xf5d6272c, +0x46a09f2b, +0xc6930e60, +0x5d105e1c, +0x60a0df1d, +0xf8997ee6, +0x9d4a92e3, +0x8178eb35, +0xf7427309, +0xe0e93fa4, +0x41cec2ae, +0x383a4104, +0x1061ae2c, +0x5a1a54e7, +0xcad33163, +0x60fcb1b3, +0x6d6f6f86, +0xfc014a29, +0xa4f5f6ad, +0x2837644f, +0xc15dc2ca, +0x9d194ad3, +0x756e9c61, +0x2816fc79, +0x0c840633, +0x7cb95292, +0x0aaf476e, +0x7499d4df, +0x825ce9ac, +0x78da0f59, +0xa90fa4ce, +0x4ab2e1f7, +0x107bad70, +0xc327d94b, +0x36883dff, +0x89342f1b, +0x915c7c11, +0x04dea431, +0x354434d4, +0xd7e48718, +0x2a4fd801, +0x236a401e, +0x7a889715, +0x365e6ecb, +0xf96425dd, +0x8e156cbf, +0x2be42a53, +0x7dfab32a, +0x0c7dc138, +0x20c067d2, +0xcace2a52, +0x4e240cef, +0x8cffa343, +0x0f16a595, +0xc1f8f528, +0xf0561c1d, +0x346f55a3, +0x7f56d245, +0x1a0a26f7, +0x0b32156c, +0xab4f153f, +0xc37085ef, +0x1494e375, +0xd5c62858, +0xf2a94664, +0xcbeb6229, +0x2ce379bc, +0xe117ab7c, +0x59d75a7b, +0xdb594547, +0x53d47fc0, +0xdd8398e1, +0x146381b1, +0xcb8375ee, +0x674ce2d2, +0x2d6a251d, +0x076bee89, +0x116adb8d, +0x17f70c23, +0xae67153a, +0x21ffc00c, +0xbe5cba2c, +0x57448a93, +0x1f1aabd5, +0x03b1f939, +0x3769d851, +0x7f76f21b, +0x43c4eaaf, +0xe359a8e7, +0x9b8420c2, +0xf3d21b9b, +0x6c616946, +0x1e59c8cb, +0xdcbf81a9, +0x13b742df, +0x28365c38, +0x465bd0c5, +0x1e2ea596, +0x8226874f, +0xdeaab7d2, +0x9433f38f, +0x482487ab, +0x0291a245, +0x5c3d3923, +0x0a97aec3, +0x3526a7cb, +0x17c53a34, +0x56569166, +0x49158739, +0x2db72ee0, +0x9c773125, +0x71853649, +0x5f464c1c, +0x5e57baab, +0x91dedeb3, +0x042d5ddf, +0x91fb9bdb, +0x1138f967, +0x04862690, +0xd6b7ea1d, +0x0f58d9d4, +0x7bea1c39, +0x86a44ff3, +0x6fe0b6fd, +0x6479d4da, +0x85ea2499, +0x0d9ef9da, +0x383350b3, +0xb9bb3838, +0x38d8aacc, +0x3a021ff9, +0x359777aa, +0x72fe4ce6, +0xeaa4c5f1, +0x97036886, +0xe1d9ce93, +0xa83cc8cb, +0x485b36e6, +0xd1adf6b4, +0xc4ff1968, +0xec5c1f57, +0x63064e5e, +0x0834d7ac, +0x5d3c60a4, +0xe12b3ae8, +0x2366250c, +0xc2cc51f8, +0x2f0c198c, +0x59e44812, +0xb7b93ca9, +0x3408218b, +0xdde7c964, +0xd1d7dab4, +0x4bb49245, +0x9d75c65c, +0xd4961d94, +0xa192b6ea, +0x28637896, +0xfd3507bc, +0xda67063d, +0x99b519c3, +0x448548eb, +0x1b46c854, +0x10f88b49, +0x343f4cee, +0x53b85be7, +0x799a660f, +0x314ece37, +0xcde669b0, +0x0e56a8ea, +0xaf2eeea5, +0x4f545984, +0x2a775388, +0x214af959, +0x81fcf923, +0xfc804b96, +0x62b0288e, +0xfec8b598, +0x0956323a, +0x0d8ded85, +0x69a6d2d3, +0xadd9a63c, +0x77948f06, +0x577ffc35, +0xfafd8311, +0xfa9dff46, +0xcbfa819f, +0x3dad3826, +0x38a06e02, +0x62e7876b, +0xa6a10ba6, +0xaa9d34f2, +0x7931ef4e, +0x0f9f93fa, +0x06a17e46, +0xf2f48860, +0xd19ec668, +0x50a97a10, +0x4aba6f5b, +0xdff30333, +0x3f0385a4, +0xb407bc57, +0xde5cbf38, +0x9889059d, +0xad0b9c6c, +0x11b8442f, +0x87e31c8e, +0xba9aa8aa, +0xe0ded102, +0xc0fef9f8, +0x2815d7ed, +0xd7a824ad, +0x0698d343, +0x366b91a9, +0xcd61fd11, +0x92190d6a, +0x173126c3, +0xec021a16, +0x0096f6a7, +0x7bda4391, +0x7c3ac522, +0xba73289b, +0x6923abfa, +0x337030db, +0xa409aa7d, +0x47ce57a8, +0x6ead16e5, +0xd58f6758, +0x5e219e33, +0x9d3e5f3e, +0x08d9da4c, +0x8b4eea3b, +0x58bcadf0, +0x1ad56359, +0xfbba0c94, +0x00ac9094, +0xf75f47dc, +0xd9283d26, +0x659460f3, +0x769c8475, +0xcffc8253, +0x9541b169, +0x1f91aa5a, +0x51dd2492, +0x0831bae0, +0x77e9b310, +0xa736a6e2, +0x6076eacc, +0x48df7da6, +0x3bef9449, +0x24c4eba0, +0x284772e8, +0x126caa23, +0xb65553bc, +0xed2d695e, +0x031afe9d, +0x96927911, +0x7f4c5753, +0xa53fc939, +0xc01a9718, +0x783edd8b, +0x03cdeb2f, +0x27aeb076, +0xe8893fcb, +0x4e4084b7, +0xc7de670b, +0x0d23540c, +0x89c3a20d, +0x8dc53161, +0xe9bbfb91, +0x5bdbcd71, +0x50965cf3, +0x205eb898, +0x0a5c2edf, +0xf5914409, +0x366c231c, +0xf11938e5, +0x32dd1ff0, +0xb4bd2a52, +0x34ab9013, +0x39935583, +0xdc100c15, +0x213ca6a0, +0x75d00c16, +0x5a5ec1e0, +0x0967d6f3, +0x6a595b9c, +0x22ee4812, +0x807170e1, +0x01ebe080, +0xbc0641d7, +0xa6dc1d5f, +0x30c7dbd3, +0x07293aff, +0x84e835d8, +0xf3cb3ff7, +0xfa0d9e11, +0xc965887b, +0x2e55417b, +0xbbb4ab86, +0xc1c49d36, +0xc5c1ea5a, +0x2ae293b7, +0xc733745e, +0xf21698f8, +0x42961acc, +0xc004b755, +0x11262274, +0x82d514d5, +0x9b9793c6, +0x5ad18bb3, +0x1597683e, +0x780ceb58, +0x0b23a217, +0xbc27f7ca, +0xaf572452, +0xbec5d2a7, +0x9a93a073, +0x52ec09a1, +0x35d9701a, +0xf1731c0b, +0x604d4703, +0xd08fa18e, +0xd7a0c7fa, +0x2ff3bee1, +0xdd3b745d, +0x96e53ec3, +0x0131ae26, +0x5fedf1fd, +0x8cbd9302, +0x24a023ed, +0x72a78f28, +0xc3ac87e3, +0xf1e53ee9, +0x162d5e0b, +0xd8d26251, +0xd73f56c7, +0xac06cb87, +0xa2943c9a, +0x4e8af8ad, +0xe6657ac1, +0x578b6297, +0x31741bb1, +0x07824e99, +0xcf86bf7e, +0x62646c69, +0x0af99ca7, +0x33df5e9f, +0xfcb7be59, +0xb23fa715, +0x86a9a898, +0x452d457f, +0xad1fd00e, +0xc70ad0ef, +0x9957b849, +0x62b587b2, +0xb4e38ed6, +0x609d5e4b, +0x2e70793b, +0x319c7683, +0xcee8b1f8, +0xaa91a953, +0x42577136, +0xbb2c298c, +0x5fe0741b, +0xe5baa358, +0xdfaeceda, +0x4889a822, +0xd738b97b, +0x02e95da1, +0xb68529af, +0xdbd651db, +0x883fe9aa, +0xcb3da7c1, +0xac219548, +0x3ad38c64, +0x67e92c5b, +0xa503b164, +0x08ec48e7, +0x13d35da5, +0xd0e8c985, +0x234c422d, +0x29dc4c0d, +0xdfbf3392, +0x9c77bcad, +0xaf9035a1, +0xa1425e7d, +0xfa92d693, +0xd7f79f80, +0xfc223950, +0x0d2cc613, +0x4548ddef, +0xcf384bac, +0xd029d63b, +0x34bb0074, +0x67d636fe, +0x6d206142, +0xc870b4a3, +0x6d6f088e, +0x39f9323c, +0x148ffbfc, +0x1a39c595, +0xb072a686, +0x378e9597, +0xfcd142b5, +0x80147553, +0x2c60947c, +0x067e4c7e, +0x45a63f8c, +0xee1b9d51, +0x4acfcf18, +0x3b38380e, +0x833e8ba5, +0xf86550a7, +0x133b8d52, +0xbcd74f42, +0x9b6a5dbf, +0x9efc0783, +0x5ac1d03c, +0x120cae06, +0x82c919e7, +0x6f380bf1, +0xadb22198, +0x384245c9, +0xb6dfbcec, +0xa5975e81, +0xcf2efb9b, +0x178f6786, +0xe08ca92c, +0x130bbcc8, +0x835b0e52, +0x2b6252fe, +0xeb1d496f, +0x1932843e, +0xc4c8cdaa, +0x6424c34b, +0x05c3314b, +0xd57476c1, +0x7e1cb896, +0xd2299171, +0x0b4298e7, +0x9b829612, +0x9f300dbc, +0xeda02451, +0xece6af01, +0x8610e87f, +0x6c6d94e6, +0x2ca5312e, +0xe874b9ae, +0x6144df7a, +0xd84f33e1, +0x4a31aa0d, +0x293d56b3, +0x93b52fd4, +0x4a5bdd2a, +0xe9b3ba48, +0x9d58cd37, +0x8d420c25, +0xe07b7580, +0x6bf8740e, +0xcf0aaeb1, +0x120ea30a, +0xa8b5f6ca, +0x778b8e57, +0x2a913247, +0xa2c848a7, +0x5e785f12, +0xabcc879f, +0x2dcd515d, +0xb3fe63a1, +0xa44e0b2c, +0x32bf8cc2, +0x42213acd, +0xa91c2a79, +0xf2d8f674, +0x7f1c7e97, +0x3ea9950f, +0x1ee43264, +0x0a40b820, +0x73b70689, +0x35caca16, +0x9dd353cc, +0x28f5b0ad, +0x452b4798, +0x1a6ea6ef, +0x42018049, +0xbe616751, +0x3edaf5f3, +0x781f59c3, +0x408e0722, +0xd8a09438, +0x2f5c6811, +0xce5f2fd7, +0x5b655873, +0x37ba334e, +0xae572620, +0xe60d825c, +0x3757913e, +0xc0dc01e6, +0xef588285, +0xa99ff5d7, +0x08d59cdb, +0xd2915e80, +0xad5daa06, +0x37618da8, +0x3170c9e8, +0x0df64f74, +0x8a345afa, +0x34184ccf, +0xcafb577f, +0xdd3b006e, +0x70fb9ae0, +0x483bed04, +0x519584dc, +0xdf7fa112, +0xbfcd97eb, +0x0b7868cf, +0x2f4f4f0f, +0x53030b0c, +0xc910b9c2, +0x6ae52812, +0x4eadece3, +0x5390a887, +0xb117a42f, +0x90803a20, +0xdd3533aa, +0x20df94d8, +0x0b790889, +0x1c3487dc, +0x98af92bc, +0xaedc05b1, +0x57c02525, +0xcba996f2, +0xa1df21ce, +0x6dc3a84f, +0xa2351133, +0x6d95d646, +0x0e9d7515, +0xe7dc00a3, +0x3f5b70fc, +0xa8d68aa4, +0xabada726, +0xcf2dfb56, +0xcaf5fb84, +0x4d50afc5, +0x9828a13b, +0xae9dbe00, +0xcd784e6e, +0x550cdb7e, +0x8e6ad343, +0x4d633353, +0x8fe58a0c, +0xa2fc7ca9, +0x534ff38c, +0xcefd4ecd, +0xab8cc417, +0x5af0d09c, +0xb97a52cb, +0x7cacc846, +0x71f7f87b, +0xb5e8992f, +0x1864e3fd, +0xe3a0d445, +0x0fed9c94, +0xbc19bd61, +0x05600582, +0x448715db, +0x841716c2, +0x1fa521f9, +0xbfd86383, +0x9dba954f, +0x6de0ff7c, +0x14ed6a5e, +0x5c3c69fd, +0x1eaa06cf, +0xad8b32a4, +0xb9f14db5, +0x5201c96a, +0xfa729f61, +0xf2d4c138, +0xf75a89cd, +0x3b56151f, +0x5c6e5c1f, +0x41900225, +0x8ec9fef3, +0x175023a1, +0x6342ff29, +0x8e73554e, +0x10d15db7, +0x81d7afc0, +0xbb3716c9, +0x83f66b37, +0xb3240646, +0xdce3a63d, +0x96ed5ee7, +0x9cea5cae, +0x50360bdf, +0xb5932bb6, +0x3bd11f38, +0xf7527d66, +0xbba1bcbe, +0xf17da723, +0xb1fd6a34, +0x76932171, +0xf9775df2, +0x917c8737, +0x3259ad81, +0xfd5270dc, +0xe1636961, +0x05e3e853, +0x668103bc, +0xfb0b3721, +0x4898bf68, +0x64f9392c, +0xc509fad5, +0xe2fea776, +0xea1f0368, +0xb7984ec8, +0x86bb38c7, +0x57b29126, +0x611bcd85, +0x89c84669, +0xd52f2bc3, +0x737063d3, +0xcca4c253, +0x418b9c92, +0x507f02d7, +0xffa4976c, +0x97353c67, +0x8c8655b8, +0x110ee3af, +0xf687ff4d, +0x45e9147c, +0x404e5bf9, +0x412b74cb, +0xbf74bb02, +0x5776ede4, +0xcf2032af, +0x0cb2545a, +0x2ed04f6b, +0xdd95fa28, +0xbd4efce2, +0x5b67cdc4, +0x94d18f92, +0x59180179, +0xef43d007, +0xfe3e4bf7, +0x9d5e5567, +0x9226de87, +0x2b931b0d, +0x57cb3954, +0x3ef2c94d, +0x887c5ca2, +0xe556983d, +0xe18099d8, +0x9168ee41, +0xc58ba9d5, +0x7cfb4752, +0x8195a156, +0x6678b9bd, +0xda722e72, +0x77cb8292, +0xa6123fc3, +0x0c929ea6, +0xe48d0752, +0xe027d2ce, +0xaf7c7457, +0x77a8361c, +0x0073ebba, +0x7acf7554, +0xc9d6e54a, +0x3dd2ec1e, +0x16765622, +0x88103ba0, +0x34991a99, +0x6903bed4, +0xd5dea69e, +0x37a609d1, +0x41651d4a, +0x974dc46d, +0xc9f77129, +0x5f52b747, +0xcbaf25c0, +0x54206b73, +0xf95a48c7, +0x4fcef184, +0x956d47c4, +0x1575f76c, +0xee29fcad, +0x20cc3aa4, +0xb934f3e7, +0x66529162, +0x4ad82c2e, +0x99c3ec68, +0xac94c1f8, +0x5c64b86a, +0x4b3245f4, +0x2f002b05, +0x36e7f54f, +0xa62328e6, +0xa7620efc, +0xd2fb006d, +0x55fa62fb, +0x4e8da856, +0xd10fd754, +0x6f984c0a, +0x8e9b4ce7, +0xbfde28c2, +0x53a275a9, +0xbc3afdb9, +0x7f3ee527, +0xc0b6768e, +0x9a413db6, +0x75232770, +0xbc818967, +0x835d91e5, +0x54d10c23, +0x2a9fd46c, +0x6fbd84a7, +0x9e109508, +0x634ad521, +0xf1672135, +0x71d46d58, +0x720198ea, +0x1576643d, +0xc2d58403, +0xada54298, +0x86e80a9c, +0x819ba7ae, +0x58abfa9e, +0x6e76240f, +0x1f319a3e, +0x81e16453, +0xc5d8c0ad, +0xd7a63acd, +0x0366173a, +0x9b1c836c, +0x56d7148f, +0x2fdfe114, +0x35b0eecf, +0x526162c1, +0x59f19e97, +0xbd0940d5, +0x8451dc44, +0xd135478a, +0xa68e82a9, +0xf3abaedd, +0xcd55c243, +0x1a614760, +0x9d35c6a2, +0x59535e39, +0xe2afe2dd, +0x539e322d, +0x0f8990ae, +0xf64124b3, +0x7952915c, +0xab5f6d30, +0xfbaa6833, +0xaee240e4, +0xf52592ac, +0x78b9e440, +0x25544eea, +0xe725db9e, +0x1a317eb0, +0x6fbe20d9, +0x71b7261a, +0xf1b96ab1, +0xfdd89836, +0x11384484, +0x8d9b3cf2, +0xae7ea158, +0x1d69ad34, +0x047f242b, +0x904473be, +0xaa7cba4c, +0x7c6b9780, +0x7486aca0, +0x771e5423, +0xe460b9d4, +0x8e8756a1, +0xdda14920, +0x84d0980c, +0x72fb088e, +0x9d8f90fe, +0x137ded0d, +0x684ac53c, +0xaced51bc, +0xe863f36f, +0xf2b142ac, +0x5fcabe24, +0x0226c7df, +0xc8bb1b65, +0xad0de715, +0x0654787b, +0xc52b3825, +0xdafdbbcb, +0x8ae0193d, +0x86cc8f41, +0x8f9d5b6a, +0x67f09b51, +0x61e6b6bd, +0xf668feca, +0xd892833a, +0x2af710f7, +0x37b95228, +0xc5474efb, +0x85a6d8e7, +0x3494a755, +0x250e894c, +0xa7dc1cf6, +0x82e6270a, +0x93894a43, +0xe540345d, +0x3bc03718, +0x85c1b000, +0x4ec86e44, +0x914681c2, +0x923f48f0, +0xede94c62, +0x70047f80, +0x154932ab, +0x9c864fa7, +0x4b04e6df, +0x6351368c, +0x9eb5e9a2, +0x03c0d691, +0x635b7f6d, +0xe0bcf3e4, +0xf881ba24, +0x64ec1e29, +0xff597d64, +0x71dfdeb5, +0x82f23825, +0xce3ac65d, +0x8f82ff07, +0x18438dc5, +0x2491f85e, +0x9b513cf2, +0x92d3f0a7, +0xce1ace6e, +0x1895938e, +0xbbaeba40, +0x017629ea, +0x37ec63db, +0x0e570cb8, +0xe6580628, +0x526b44fc, +0x30aa7152, +0x481b546d, +0xdc3540a7, +0xd2b427d5, +0x4ab80ada, +0x758b85f3, +0xa9ae0123, +0xf10d86de, +0xf5c6f886, +0x90022ad1, +0x476c87ff, +0x928866ea, +0x2a21948c, +0x6ceff9ce, +0xb048ca74, +0x0a53c2fd, +0x5e2d7d12, +0xdfc1aa05, +0x1d642b8f, +0xc5acf6f2, +0x8a49f289, +0xe9958df3, +0xf29f9aba, +0x21f98a1d, +0xb3c07552, +0x4569d7d8, +0x45b1e689, +0x14cbe088, +0x6d9b5359, +0x688ae91a, +0xc6d2abd6, +0xad065143, +0xe139551b, +0xf3c8ab73, +0x496d9bc2, +0xcfe93f23, +0x78d56acd, +0xa200e1de, +0xeef9c8bf, +0x33cd4635, +0x7bfec16a, +0x8ae1bb32, +0xfd5d5f7c, +0xa652906d, +0x48fc267c, +0x8ac9c851, +0x2a3e3f92, +0xa47058e5, +0xc67d2805, +0x8d7d87c7, +0xb5e25e57, +0x60d14ca2, +0x5dd307e2, +0x000ea7c1, +0x6372d805, +0x273cc839, +0x215571f3, +0x682ca22b, +0xe50061a3, +0xa651d07b, +0x67f77f55, +0x68f365eb, +0x7c12209b, +0x69ebd34b, +0xee18bb7f, +0xeb274f43, +0x84421779, +0xf04dbffe, +0xa1561c57, +0x32a84cd7, +0xa5246f91, +0xdcf5396d, +0x24bc6388, +0x37baa766, +0xa90feba0, +0x3b18d991, +0x381f15f2, +0xbd2e7b8a, +0xa31ad346, +0x464c43bb, +0x49d5b73a, +0x4c9edef4, +0x0d2f9353, +0x42acdbe7, +0x211b50b3, +0x8709c824, +0x6d771cc9, +0x3d6a4aff, +0x890ad676, +0x93c22a97, +0x57f55635, +0xf2e52104, +0xb1e52174, +0x80f4fca6, +0x6568839f, +0x61b655b5, +0xf373d7a3, +0x77be81d6, +0x404e6337, +0x80b3697f, +0x9b8a239e, +0xf495589d, +0xcdbe7c59, +0x55573c8c, +0x7d26873f, +0x791f396e, +0xf92570dd, +0xb86e2671, +0x70fbec3d, +0x381cf002, +0x45dda75e, +0xf1432603, +0x183bb955, +0x4d71a07b, +0xf658e17b, +0xe854fe36, +0xd5dcfdb2, +0x8415585b, +0x16aab9db, +0x960f654c, +0xff4a489e, +0x53b3f622, +0x26d15034, +0x63820784, +0x9e37cbb1, +0xbdf3b63d, +0xcda53f83, +0xf5188432, +0x4344526a, +0x5d9c8042, +0x0cb351ee, +0x688b69a7, +0x74f0de6d, +0x1dd71a47, +0x9b772880, +0x09b1d065, +0x6e3f831b, +0xd036785f, +0x7941bba5, +0xeead8837, +0xac069d15, +0x124fdd05, +0x3d41e361, +0x43205625, +0x3bb8fc54, +0x364150b5, +0x19c1a26a, +0x85016c21, +0xdf0b65f1, +0x4ab511cc, +0x1e6de8f4, +0x016f4295, +0xae36fd6c, +0x1bb6ac48, +0xf2a2ffdd, +0x12722a9a, +0xab405ab3, +0x58affc33, +0x96a27041, +0x68aee23a, +0x7ac0fdce, +0xae320f7f, +0x7e3526bc, +0xfecc1058, +0x917bd91a, +0x7fc5b548, +0x716d9450, +0x0ae5db42, +0xd004949e, +0x2898b051, +0x346fc451, +0x2bc54552, +0x90ccc2bd, +0x34e257a4, +0xc9a9a0e7, +0x1419f824, +0x5d501eba, +0x1fce4e5a, +0x01cb286b, +0x9b252de7, +0xf053388c, +0x36069f7b, +0xfadc39b8, +0xad90baaa, +0x669db3bd, +0x6253ad8f, +0x675e7cfa, +0xe5c80a26, +0x6bb054c0, +0x1c935da2, +0xb42bcfd9, +0x08ea5cf9, +0x538aec5d, +0xe588e80d, +0xbaf1f481, +0xfcf4fa99, +0x308bc603, +0x815d9134, +0xdd7ecd88, +0x80d99316, +0x000279be, +0x974e03c3, +0x09f8f6ef, +0xa92e8c0c, +0x96949a17, +0x8f198e33, +0xe8972290, +0xc5130666, +0xef23892a, +0x02fa3703, +0x0a5eb52d, +0x1dbb64e6, +0x09917250, +0x7acd993c, +0xbcde55d3, +0x85efac22, +0x21466b21, +0x5e5a1078, +0x46f90e55, +0x66dabdd8, +0x05f18baa, +0xae74e083, +0x03b106be, +0x6cf4163f, +0x8c5848ef, +0x9bea465a, +0xae10d11b, +0x3488a6b6, +0x80701234, +0xe3d831f2, +0x6ad0cabc, +0xc281f58c, +0x0c65f60c, +0x481c5fab, +0x21c024d9, +0x6ca173ce, +0xbe55f99d, +0x99c1ecb8, +0xdeb5b7db, +0x1b23e0a5, +0xaef639cd, +0xe2a01b59, +0x4b11b720, +0x36208043, +0x4c727820, +0xd5f009cf, +0xbc2902ec, +0xd2cf72ae, +0x1cbe8602, +0x43475970, +0x33e94e02, +0x113f441e, +0xd21cf686, +0x44f5fe2b, +0xf33b1622, +0x8a52349b, +0xb5f5df21, +0x70a9a82e, +0x3971a1c5, +0x4d1c7950, +0xed61b335, +0x99649f57, +0x2d33949b, +0xfb733c58, +0xa793c10c, +0x108f3f15, +0x5112ce88, +0xf64d8a9d, +0x191ef798, +0x9c88327f, +0x5fc8129b, +0x87aad365, +0xe0620623, +0x4449d0e3, +0x883b7b0c, +0x7d383f6f, +0x60f26d15, +0x365df7a3, +0xf87f6284, +0xdd67e0b9, +0x8ab1a44f, +0xc7b0a0b6, +0x87319799, +0xc1f2f56b, +0x1667b555, +0x60da48be, +0x5ba93703, +0x37d79c0f, +0x84db4286, +0xbd7ee69b, +0xd188542d, +0xd2e4c061, +0x553319cc, +0x108ad521, +0x08474ae1, +0x483c46a8, +0x066c82ac, +0x11fd3962, +0x83cf2479, +0xc4c5b7c9, +0x66b2d723, +0x46f0edea, +0x54ba02ea, +0x01380ff8, +0x16a3bba3, +0xed9a88de, +0x9f6d454f, +0x5f0d2a54, +0x21d4990c, +0xaf44e616, +0x4e10792f, +0x27a2e556, +0xcf0a2a91, +0xca117143, +0x579560e0, +0x0ab52db8, +0x233b796c, +0xe89078fb, +0x9941e8d4, +0x8f8acae4, +0xbbfff073, +0xfb58a83a, +0xc99bb841, +0xf48e77e6, +0x9e0c3a08, +0x6153c2f8, +0xd219fdde, +0xa6d1509c, +0x49069c0a, +0x19ef5841, +0x14453ff0, +0x2a1dd8d3, +0xb5cef596, +0xfb2032cb, +0xc5725201, +0x540cc343, +0x1f3662f2, +0xc2dcb75e, +0xb5db69f7, +0xfd77b6ff, +0xb8be301e, +0x6bce4049, +0x22c5ccf4, +0xb90a36f5, +0x2b7c14d6, +0x410eb14f, +0xfe15e7b7, +0xa7c3ac8e, +0x741cee71, +0x8cdec2a8, +0xf06cd2c2, +0x20be466a, +0xc1af9d73, +0xeed5e3a4, +0xcd197253, +0xf2fc5e6c, +0x731b9825, +0x0a546a56, +0x48558fe2, +0x502316d8, +0x20881ce0, +0xb3bca1ef, +0xd5b88485, +0x6f36204f, +0xf696e93f, +0x9171e297, +0x13d76c73, +0xec60ab5d, +0x8c08ca4e, +0xf5cad1de, +0x1c3d92a9, +0xfd16153f, +0xc309019d, +0x9a7e558e, +0x084c6743, +0x6458dcec, +0xcd857747, +0x0a4b2dde, +0x6d90365a, +0xb171431d, +0x28b7752c, +0x12bfd286, +0x71f5837b, +0xff133099, +0xf3ca0d13, +0x9b2964dd, +0x9badcc15, +0x25e584b0, +0x2be4b703, +0x858cef81, +0xb489cc9d, +0x75fa48c8, +0x638e7e6b, +0x01ad2db5, +0x477ae340, +0x03149508, +0xdd5d75fb, +0x695f05fd, +0x17dc0d8d, +0x1277d175, +0x1db481be, +0xea123314, +0x96ad45af, +0x0d58d022, +0x3c5aabc7, +0xbb58f80b, +0xd774855d, +0x05de57db, +0x8e8fc327, +0xb53ac7c7, +0x2bdefd5f, +0x174066ff, +0xce8b06b2, +0xb08acce2, +0x9512d0ef, +0x2c611025, +0x2cec63f4, +0x9380ffa2, +0x8f5052c1, +0x3de8be2c, +0x904c9a99, +0x8f7ac834, +0xfc1970ec, +0x9157874b, +0xb17ae61e, +0xefb6f321, +0xc8663488, +0x5f154c8a, +0x6ee9e7d0, +0xceea5e3f, +0x089f8bc3, +0x0909e72f, +0x825a30f7, +0xfd80af84, +0x0d7d0fd8, +0xc615753a, +0xa4b7cd99, +0x8d8a2999, +0x115da596, +0x75e8d9cd, +0x00ff5119, +0x042e6a42, +0x9836b582, +0x5775b4c5, +0x3a3b0f0f, +0x4712e941, +0x740d6763, +0xd321fd1e, +0x07af14bd, +0xd0aa8249, +0xe2741fb0, +0x3a3d207f, +0x3b6407e6, +0x6921e35f, +0x9c6d7f9f, +0x0228d456, +0x0654fd26, +0x2647c68c, +0xebd7d4e9, +0xd3ec4402, +0x0e6391bf, +0x906c376d, +0xc1663f48, +0x433cdb90, +0x8a7c01f7, +0x12d29de3, +0xf6c80232, +0x69b8d44f, +0xc68f870b, +0x856f3e3b, +0xa21d73bf, +0xc075898a, +0xcb3fe8b2, +0xe6515ecb, +0x22467e27, +0x991769ec, +0x5f457dba, +0xc92cb1b2, +0x355e3701, +0x904672eb, +0xae21aeb9, +0x7f25966a, +0xf3d56af6, +0x9b251e87, +0xd9b7707f, +0x5096ba92, +0xb0f46749, +0x82f4a69e, +0x9c192c1c, +0xe3c78ea1, +0x77710ab6, +0xb61e0b67, +0x0b0c8dd9, +0x3ff8db95, +0x98214f56, +0x548c24b0, +0x36b7025e, +0x57bb58ed, +0xf913a97d, +0x097134b9, +0x08080e9d, +0x6f3e953d, +0x3a8c63b0, +0x3545c083, +0x47e9dfe3, +0x43053af6, +0xe7d0c089, +0x390c0a14, +0xfce1a0b2, +0x4e27bc3b, +0xaefe311b, +0x057b049f, +0xb6d8beaa, +0x5564df7f, +0x26d126c6, +0x43e583dc, +0xce1d71d6, +0x4b8ec84f, +0xc31677b3, +0x726c2806, +0x074ad5f4, +0x2a4089ee, +0xf45ad5c7, +0xf62e3d31, +0x61ccea60, +0x866240da, +0xaef2e7c9, +0x69a3e0d0, +0x6f9b75a6, +0xc1c42d83, +0x4534629f, +0x5c0b95df, +0xae070dd6, +0x2bcd4f32, +0x66c74fe7, +0xacbb9379, +0x9a55e85e, +0xb8b3396c, +0xf81fb504, +0x2b6efe78, +0xe953e3c4, +0xef3872d4, +0x663242ff, +0x2cf4aa07, +0x564a3dbe, +0x9578aa65, +0xae9c5914, +0x8a7624d5, +0xeae0f3f2, +0x4e59f783, +0xea1192a0, +0x7a761773, +0x2824f1f7, +0xd1d0464f, +0xed2471cc, +0x31d07bf0, +0x6829cb8b, +0x40f4a392, +0x46c79726, +0x53e1abf1, +0x695b3b0d, +0xa9c6b278, +0x0a891a43, +0xb4700fab, +0x0591ee54, +0x5f2fd534, +0x030f1840, +0x9d269b63, +0xa18b5326, +0xfdb404a3, +0xf97edafa, +0x4bedfb04, +0xb674c262, +0xe6ff5988, +0xa7dd0736, +0x4b7d9c7d, +0xd4bd7952, +0xf1bceb99, +0xc0a7c28e, +0xa60febb9, +0xa7cd3747, +0xcdef2813, +0xeafe3123, +0x13ee3cbc, +0xf119dfcc, +0x90d22713, +0x45f8f6fa, +0xd6d9f17d, +0x797047f1, +0xfce4b610, +0x0ad8c6e9, +0x54533df3, +0x16d12516, +0x32ee941d, +0x0807f502, +0x21ad6f5b, +0x96514c8c, +0xecc05788, +0x47fb35ca, +0x886331e7, +0x5aa1c7a5, +0x15ad2616, +0xd525b2d7, +0x77d869ca, +0x800ccc15, +0x26151274, +0xfd47c92e, +0xfdbb5bd9, +0x9fc9f38d, +0xdf22058c, +0x74636e13, +0x93d83b71, +0x3a28ebcd, +0xcb6e9892, +0x2153c071, +0x8bc1c07a, +0x11662ea9, +0x04ec079c, +0x6f9e5377, +0x0bd1b99e, +0xcbe93465, +0x458bd81f, +0xd3231cb0, +0x45fc0557, +0x5afd577d, +0x7542480c, +0x58eba9b5, +0x7c06c6ed, +0xf309833c, +0x4764c6a0, +0x61edac30, +0x2cc80331, +0x08da6af3, +0x5429cf18, +0x7ef2dfdf, +0xd11b01be, +0xe9098184, +0x1a76dd4b, +0x99a0099d, +0xfef71fcf, +0x8fa50f4a, +0xb0303843, +0xe285bfb5, +0x8f3f1727, +0xd79e8162, +0xe66a3ca4, +0xac9c8edb, +0x747b5029, +0xd12780a4, +0xb85fbf07, +0x8985cad1, +0x47e7a807, +0x38f536d4, +0x4c9a79fb, +0xc50b23a3, +0x944cae85, +0x3e2100e6, +0xfba3ad7c, +0x65abe2fe, +0xcc4d2ac9, +0xfce5a5e3, +0x3741a330, +0x9d100a6a, +0xf678303c, +0x821a8adf, +0xe430206e, +0x5323af6c, +0x1cbe8b52, +0x8945ae46, +0x1768385c, +0x8f52509e, +0xb786a998, +0x3d6a4e39, +0xc5429322, +0x80e6d123, +0xdc295c5e, +0x619fbec3, +0xe1a5d9c0, +0xd6a58bb4, +0x782399c6, +0xca3e9d06, +0x1eb63090, +0x396084d9, +0x16473175, +0x303fdf87, +0x94f0d2d3, +0xa8ba8555, +0xb6c10ced, +0x45b8a188, +0x260c8eee, +0x22386ac3, +0x0be6e4e1, +0x4a6fd75d, +0xee931091, +0xb1175d4d, +0xe3c7d8e6, +0x046ebc35, +0x0d9c98d3, +0x3bb1acbd, +0x424d744f, +0x5e9097eb, +0x257d2637, +0xfc96dd2f, +0x55a55d3f, +0xb29a2bfe, +0xd4eac408, +0x270d2a06, +0x4e0746be, +0x0dcd5eb0, +0x2c686dd5, +0xa0846091, +0x60a38b14, +0x1cdab4a8, +0x50438c3c, +0x5ba35746, +0x49d50f08, +0xe0cb2b15, +0x9929e1a9, +0x48c2e8dd, +0xea3c000c, +0xfc2526cf, +0x8b66225e, +0xd4ed4884, +0x61244f21, +0xc8984ca7, +0x4e0a1230, +0x2ac04b15, +0xde350fda, +0x00d477bf, +0x31db0982, +0x1db60749, +0x61f0e7f9, +0x4795939d, +0x458b007a, +0x91d29022, +0x84c97bd9, +0xd7d1dea3, +0xc2b142cc, +0xaa2ebe14, +0x8845a95c, +0x51b68d89, +0xf3a6f029, +0x652eae27, +0x4864c360, +0x15124ac8, +0xb18567de, +0xa9264b21, +0x102e265c, +0x3c3aa885, +0x1ba77d34, +0xbd29f34a, +0xbc033080, +0x5213330a, +0xe8db1c66, +0x94233781, +0x2a7c891c, +0x87d424a8, +0xb8c8a917, +0xe9997cc0, +0x167e8d52, +0x27176724, +0xc587c8fa, +0x0437ed5a, +0x3c52f374, +0xb316141c, +0x4f679deb, +0x15aa4695, +0x5545a15b, +0x732878e1, +0x50b8f25e, +0x360e5de4, +0x39e268a6, +0x1ce4b1f7, +0x9b180243, +0xc33d326f, +0x18c2b1fc, +0x3342236b, +0x59822314, +0x731cacfa, +0xcdd87333, +0x2ad62c32, +0x0cbd6559, +0x8ff52416, +0x0725869b, +0xdc74602a, +0xde04f2bf, +0x2a166a09, +0x8dbcb75a, +0xe9feb86f, +0x0d1f3f7b, +0x4351c1fc, +0x99dcc8cf, +0x4b7c62e0, +0xb58afb85, +0x41629aa5, +0xe1911b78, +0x3cee5b9e, +0x215f5638, +0xe463a600, +0x287c5332, +0xdbdb4e66, +0xf2882b35, +0xc2a3f828, +0xe3ec49fa, +0x0fa61bb9, +0xbd666486, +0x002c26ba, +0x54251984, +0x2be28703, +0xcf4d88f3, +0x3b8559a1, +0x2c58576f, +0x21370370, +0x2d479a0c, +0x9bc9746c, +0xa2a7f1bf, +0xf4695d45, +0x24f6a882, +0xc8874b05, +0x498e409b, +0xa06e7e6f, +0x6433d31f, +0x065d0c5d, +0x20036a13, +0x54abba94, +0xe8d5651d, +0x254085f5, +0x445b3d62, +0x2fce6a04, +0x448d7be6, +0xf1690f38, +0xfee31e73, +0x5df98964, +0x64a41a3e, +0x7a1b818b, +0x2884380d, +0xdd3bec46, +0x20da36c0, +0xc6903601, +0xe73518d8, +0x6b7eb6ca, +0x5a85a730, +0x3c6faa3f, +0x5769c015, +0xbe940b37, +0xd3c319bf, +0x47e285ab, +0xd8821b55, +0xd58c1b51, +0xaa3f53b5, +0xe63d7452, +0xe19b5d45, +0x76d14a7c, +0x6d87cf9e, +0x9ab98149, +0x09546295, +0x873acc9d, +0x25c2796c, +0xd8670fec, +0x861ea18c, +0x37c061de, +0x3ef94c0c, +0xa6a9862f, +0xab426245, +0xa0547dc2, +0x298e1c76, +0x43d4eade, +0xeb6f23e7, +0x81a703c4, +0xb4075d28, +0xdbf99364, +0xe5400fc9, +0x801b2dbb, +0x58f53a49, +0x8ec881db, +0x53d14b09, +0xdc5cdf98, +0x4029b480, +0x5b53544f, +0x8a588bf5, +0x9bcc212e, +0xaa218e80, +0xd25a8bb9, +0x917306c9, +0x6d1dff8e, +0x8d039e78, +0x516f0807, +0x144aeebc, +0xcce0993a, +0x9cb00464, +0x5b798789, +0x3257db10, +0xb6388bf8, +0x3aae9ad8, +0xf3595bc7, +0x07eb0713, +0xa3ab2e3e, +0x37af6f76, +0xd1ba95f0, +0xe6bccd54, +0x85e2d351, +0x2dc5e2b5, +0x23bfd847, +0x36ba0e86, +0x8766fd36, +0x021f2f6b, +0x97af6193, +0x277c95b9, +0x9c578e91, +0x9254a2d8, +0x0b1e5949, +0x3523df03, +0x55176a22, +0x9c5959b5, +0xc729c8ae, +0x5cd9864d, +0x8b4d7e9c, +0x2cc0c9ef, +0x771b87c0, +0x21b03c64, +0x79ca94f7, +0x4c548e27, +0x1d0732df, +0x4dab787b, +0x89871b09, +0xfae0b7a9, +0xb16a7205, +0x05c0f228, +0x36b78511, +0x3be8c07a, +0x43666de0, +0x4a887f97, +0x5fe62751, +0x72c92ff4, +0x43efe8c8, +0xb2b6e7ed, +0x2fafb1e7, +0x681f5680, +0x2852676b, +0x11a4da8f, +0x2390931a, +0xbfe45016, +0x27a22ded, +0xae5e2b91, +0x2c87d565, +0x13dcdfb9, +0x2a9a307d, +0x60b56f00, +0x74704392, +0xa8c81d65, +0x229f77df, +0xb9e71cb0, +0xd7034511, +0x2bf799d9, +0x808df8cf, +0xee4113c3, +0xabf751c9, +0x7ce83b2c, +0x8f5d29e7, +0x59520969, +0x679c7f9d, +0xd882fc94, +0x108cae4d, +0x69682a63, +0x8d8d34c4, +0xecf88893, +0xf0ba23b0, +0xc9d95230, +0x68bfd388, +0x29004433, +0xf5d48055, +0xb519384c, +0x685a459e, +0xb66fcf5a, +0xf5dfc48c, +0xd0a86873, +0xed836b83, +0x1ea2f9a0, +0x6202bbe1, +0x0af0d4d1, +0x0eaba4f9, +0xc680fb0b, +0xb2a72e04, +0x81f51067, +0xf80ffd57, +0x457a4738, +0x404d4581, +0x8d338eb6, +0xdb4f97ae, +0x321c068f, +0x980a065e, +0x859dc84d, +0xda98c283, +0x6dbfc6b0, +0xc271a49d, +0xeb3dce1c, +0x8843d79c, +0x124df4cc, +0xe9b66077, +0x3f03adcd, +0x420fea60, +0x243fb7bc, +0x5ba256c4, +0x7c0a48fe, +0x13ef71a2, +0xe6665306, +0xc13ea54f, +0x83396e78, +0xdb58ce8b, +0x67554b9c, +0x4233e95d, +0x3545f717, +0xc0a938b4, +0xd676cb8f, +0x480b7540, +0x2a4871b8, +0xe8868d38, +0x91d44801, +0xeeb49d9d, +0x0c26b650, +0x3ec0865a, +0x95a04ab9, +0x75cb80c8, +0x0795c1b7, +0xce339a88, +0xf75de422, +0x611c8235, +0x1aefcf78, +0xe8d739f8, +0x8e52e02e, +0x79a80dad, +0x173a7a0d, +0xba5e0671, +0x5eb83c79, +0x90666a1c, +0xc270fb9d, +0xd946737c, +0x6c2f67b2, +0xcda853e3, +0x6eb9cc5a, +0x3b0f6a62, +0x868cfbdd, +0x7c4c741b, +0x8d8723a9, +0x5f8f5433, +0x0e50c3ce, +0x1de437d7, +0xbd3fceaa, +0x49b48e7c, +0x5bfc292f, +0x512430c3, +0xaa203d86, +0x7e36058c, +0xd2da8692, +0xa109a2d0, +0x24436df8, +0x69a78275, +0xe57761cc, +0xa6080e1f, +0xb60493f5, +0x3fa0fa4a, +0xe6f0e759, +0x15eb4f56, +0xd9e086a0, +0x2cd34bfb, +0xd88668bc, +0xbf852945, +0xb3105869, +0xb0d3575e, +0xa5ab9d3b, +0xf4771160, +0x8d098ef6, +0xa2ab3801, +0x4a3a21e5, +0xeb66009d, +0x96270dd1, +0xd6bc33b4, +0x2797feec, +0x61b01865, +0x30d4bb0b, +0x90bfaa82, +0x49b26ee0, +0x5c0a0c14, +0xd4ff874b, +0x26184a3c, +0x12e60338, +0x06931826, +0xc584b2e8, +0xaa1e9e1d, +0xa82514ac, +0x3bad2d0a, +0xdae3fcc5, +0x9e4f4f61, +0x52b7ede0, +0x36fe7d56, +0x955d05b7, +0x0f514eed, +0xa99a7f2d, +0xcecde652, +0x33b62032, +0xf06077c1, +0x05def205, +0xc8ad2432, +0x6dfd150c, +0x08b72685, +0x5d2d44b8, +0xfc6590f6, +0xe1ae47f4, +0x5c83bbf3, +0x92a71c43, +0xbd2ade26, +0x1cdec2b4, +0xb6dae300, +0x6fd4f70e, +0x622ba458, +0x693b1b3e, +0x6fe82554, +0xe13a64e1, +0xf38ff5d4, +0x9bcd3f34, +0xb399c67e, +0x87f939cc, +0xfcdc904b, +0x8f9f9909, +0x4eb98808, +0x14a1bcca, +0x90f1233a, +0x010a6bb9, +0xb3a6320b, +0x032fe117, +0x0690c5d3, +0x5e4a7dee, +0x5f2cba25, +0x67c9a8e8, +0xd5563b20, +0xaab75ece, +0xa5b1f641, +0xa6a59631, +0x9304e9a7, +0x0beedf4f, +0x2a81db21, +0xad11065e, +0x86b338b9, +0xc657bb3e, +0x3cf37e0a, +0x429a7fd3, +0x91a7da4b, +0x0d4a33d8, +0x2fd4ecd7, +0x4bb84336, +0xad61689e, +0xe46db4ad, +0xb328e3af, +0xbf866698, +0x68204c7e, +0xbdde2475, +0xf3782612, +0x8453accd, +0x46dfb357, +0x9bf42b51, +0xa0599b4a, +0x955c376c, +0x04dbcae8, +0x08a633b3, +0x53bfa53c, +0x587d3744, +0xbaae1ee2, +0xe19b0821, +0xd6ba74b5, +0x6676035b, +0xe8c7cf93, +0xec8fd2fa, +0xbe07e396, +0xf6edf996, +0x3d1ad348, +0x16584a19, +0x6b1db56b, +0xd799328e, +0xbe8209a3, +0xcfdbe878, +0x3f7f4f6d, +0x5acee50c, +0xa99b8b38, +0xc2123e14, +0x5af7997e, +0x46191926, +0x98f4d2e0, +0xba4174c9, +0x78e6748c, +0xc8903a24, +0xe679ecfe, +0x975c0ea9, +0x147ec530, +0x322dc36d, +0xeb4bef45, +0xa956d570, +0x348be3e6, +0x67d5992b, +0xb4eb4e15, +0x3ebe4b18, +0xb920c797, +0x7d54cb54, +0xb8162780, +0x903e158a, +0x165b03f5, +0xfde2e40f, +0xb015a328, +0xd279f58f, +0x61e0c782, +0xf2d5b05f, +0x97fe0aa8, +0x17c34eee, +0xcd3f566f, +0x2d7202b3, +0x905bc72d, +0x279ed8ca, +0x80d08785, +0xf4b637dc, +0x6af92c1d, +0x50ec8db1, +0x8c5d62ac, +0x41a00136, +0xebc718c4, +0x4425ca09, +0x1625d9ef, +0x3b6ab64d, +0xa86c0a78, +0x87d2ab1e, +0x7a7b5304, +0x705442dc, +0x00abbcb6, +0xdf6fcf80, +0x792574df, +0xd206285c, +0x7dc27a7b, +0x44c41daa, +0xf7e4bf23, +0x76a1842e, +0x8db4ea58, +0x6f4e4f39, +0x9c04ff8f, +0x9cefdddd, +0xb6fe1672, +0x70692f76, +0x79c1ea6d, +0x1af6692e, +0x6d4f0b50, +0x91bac7a8, +0x0363ebd9, +0x7bf73f03, +0xb9908a3b, +0xcb0454d5, +0xc1c1cb23, +0x12af306c, +0x86a02af4, +0x3acefeee, +0x39dcdcb3, +0x1b465001, +0xaebd0d04, +0xa40a13bd, +0x554bd1ae, +0x9a2ec3d1, +0x0b7e780c, +0x0eeb27af, +0x631da1a9, +0x88eded77, +0x470092fe, +0x01b8d06c, +0x81601be0, +0x6a6a56a9, +0x31822728, +0xd2a57b49, +0xa94f8f35, +0x598ec689, +0x7666b9a6, +0xe4324fff, +0x7e974bca, +0x4822020b, +0xdece8d92, +0xbea94903, +0x1993ead7, +0x83cd518e, +0x7b0fa7d4, +0xc03922fc, +0x42457122, +0x169aa59f, +0xa743de4b, +0x8464afd5, +0x2b95a7dc, +0x5a771589, +0x0de256e1, +0xc68bf78c, +0x2ff1c7c1, +0x3daa4f8d, +0xead2db5c, +0x1804f4a2, +0x145d2426, +0x6b97b03b, +0xac6ad2ce, +0xe215965c, +0x3ef2fa4b, +0x66127dae, +0xc8c04cc1, +0x06bdb252, +0xdc8a868f, +0xba67efa5, +0x87b5e298, +0xd78cfc23, +0x5739dea1, +0x4e628f2f, +0x00461245, +0xd8382786, +0x6d08e46d, +0xd26a7a40, +0xe71abcd7, +0xc0faee89, +0x01c9b969, +0x0478e795, +0x10ada9c1, +0x4acaaded, +0x8669031d, +0x960a190e, +0xe1162083, +0x9d26384b, +0x14b6e1a4, +0xf77d0f85, +0x445da26f, +0xa5523a09, +0x4806015d, +0x7f36b9dc, +0xb3373755, +0x3d6f317b, +0x1bba318e, +0x8ca400d0, +0x3c883e15, +0x63568898, +0x08889d99, +0x341510e8, +0xb7a94bf1, +0x4248b0d3, +0x1ea97cb5, +0x34ba52b1, +0xd425a2aa, +0x6ae3007f, +0x73cee2ca, +0xe80e7a79, +0xde37e242, +0xa1b59e56, +0x064e3f8c, +0x1cfd2d1f, +0xc8ee3af3, +0xbe5d7a3e, +0x3078dc38, +0x969ef5f6, +0x9b67d602, +0xc8369af2, +0xd79721aa, +0xe199a2be, +0x6f3e2913, +0x30c55438, +0x4e1c77e3, +0x0db683be, +0x1a48dfb2, +0x0dddd295, +0x472a02fd, +0xa3cfc5c1, +0x67607abb, +0xa92ae0ee, +0xd0413ee0, +0x58c262ec, +0xf9423781, +0x82b94da3, +0xcc83cabe, +0xac9b7b24, +0xf2a79760, +0xd3638ac9, +0x4fdebba3, +0x1c73ec61, +0x5b93a2d7, +0xc3eb09ed, +0x05e10d43, +0x30bfade1, +0x3b74d5fa, +0x976e60a5, +0x9d770aba, +0x1678be16, +0x76d62163, +0x272981e5, +0x40131a3c, +0x0df045bf, +0xc554ae7e, +0xa247757f, +0x8c11201c, +0xc77af68e, +0xd85f5d35, +0xa81d463d, +0xdce3cc19, +0xe9082529, +0xea544900, +0x17425060, +0x8930946d, +0x08eb5d20, +0x1baa7391, +0x3f4b4e25, +0xba974cf8, +0xd85ecad0, +0xb009298a, +0x251aee51, +0xdba93219, +0x2760e183, +0x0559ef3b, +0x202dd2ee, +0x023a04ed, +0x0fe22e40, +0x9abde270, +0xa40cefc6, +0x33f7773d, +0x2937a6b7, +0xcf17ae0d, +0x6c9e3a7e, +0xc5e1de7d, +0xb58178d3, +0xcc9cdef7, +0x2d2eab0d, +0x419d4a1d, +0xb4f69390, +0x9d21f2ad, +0x4cb82d18, +0xa957b42a, +0xb0c39fe6, +0x80b03c51, +0x5d235da8, +0xaea02d71, +0x8632a5b1, +0xb5c4b85f, +0xe4f7592f, +0xff59a828, +0xfdd0897e, +0x6193c8ca, +0x7249400f, +0x68471d60, +0xe6f25c42, +0x616320da, +0x82f455a7, +0xdb9a77a6, +0xaefffb41, +0xb8ebc1c0, +0x7cc95cea, +0x682f0d2b, +0xad0c98f1, +0xe8bc8713, +0xae54a244, +0xae4a051c, +0xbc22d8ad, +0x4d26d619, +0x0e1a301d, +0xac50647f, +0xb8dbbcc2, +0xdcfa8bb5, +0xf3ed5b33, +0xa364e1a3, +0x14a6ab89, +0x200df99b, +0xc4477c2b, +0x73671111, +0xff5311be, +0x8e048666, +0x879d1fea, +0x3df82792, +0x701db371, +0x7db99ef4, +0x8498ed24, +0x35407d34, +0xdd43b0f4, +0xa5ca32da, +0x68a96714, +0x5cc44bc4, +0x290c6220, +0xaf8d56c7, +0x0d67b665, +0x769a1653, +0x29f48b22, +0x477bad8b, +0x172938fb, +0x7923d4ef, +0x347b664e, +0x687b065f, +0x578721e6, +0x6aef06bd, +0xd0968b72, +0xd1a37fb3, +0x7dd9ce2f, +0x8e37d096, +0xe4197562, +0x44e6ad32, +0x89e8f199, +0x2a13671a, +0x5be08640, +0x8d474bb0, +0x04366aa4, +0xb1ca20a8, +0xca756ea0, +0x80022ae3, +0x5baaa5dd, +0xdaeee096, +0x800b4a66, +0x675c690f, +0x23a14494, +0x0bcd4cbb, +0x8b1b516c, +0xd8033892, +0x25ea6c1c, +0x0136df6f, +0x7a886b62, +0x50933b23, +0x7da57e67, +0x642505cc, +0xa6ef5300, +0xb532df36, +0xc2eb5040, +0x7a90b4ed, +0x3f918205, +0x8d6e553b, +0x923f8e90, +0x4cd3caf2, +0x218b0f7d, +0x309863b9, +0xb7deaf38, +0x46a08cb9, +0xcf0132d5, +0x0f7ffd4a, +0x26694636, +0x41f5f32a, +0x8c48e81f, +0x0d28eef7, +0x54f52153, +0x63644c48, +0x0e97fcf1, +0x6437976d, +0x6ea2b5d8, +0xb8819a81, +0x04b9ebb2, +0x73c6e914, +0x57806018, +0xd5840c14, +0x401bed6a, +0x5fafffa9, +0xcb565be6, +0x9947faf6, +0x33919c26, +0xa737463d, +0xd3708c8a, +0x82aabf07, +0x5d7cc0c2, +0xaec28a77, +0x972ae200, +0x8256cdbe, +0xe5272d71, +0xac883f1b, +0x7042713c, +0x0790091e, +0x9f98128d, +0xd953f409, +0xdb1d88e0, +0xc4144430, +0xd2ea4419, +0xb04ca5bd, +0xb44897b2, +0xccd09c57, +0x3f8bb789, +0xd5af1018, +0xf30f6eef, +0x34001a89, +0x065bf09f, +0xaef8255c, +0xa3a25d85, +0xed7f87a6, +0xbce3a60b, +0xfb0e280f, +0x89af75a8, +0xb7af6a02, +0x7d725621, +0x054372e0, +0x0552f952, +0xcadfdf65, +0x77316093, +0xd0d7227e, +0xb93e1fc0, +0x20d599a1, +0x05eaac33, +0xd90fd70e, +0xf798a056, +0x6f49cbe2, +0x8c924619, +0xa257af91, +0x09df5b8f, +0x9da9b175, +0xd2fdd713, +0x537f5a7c, +0x4126723c, +0x212a2fac, +0xabb9498d, +0xd4c8830c, +0x26964ad9, +0x9ea3002f, +0x8f786565, +0xdb65393b, +0x8effe174, +0x960207b3, +0xe358e202, +0x2f34bf89, +0xb9973900, +0x8f8c7169, +0x5500b72e, +0xd4c9f52a, +0xe31864f7, +0xc6062ac9, +0x36a53549, +0x8fa80822, +0x02163f6f, +0xf4d6832d, +0x80fbbaaa, +0x46b2db24, +0xa23b0d2f, +0x0551f4c5, +0x7197b3b8, +0x1f8038df, +0x354c00a5, +0xff270dc3, +0x3a3572f9, +0xf1ce127a, +0x378d61d4, +0x530765ae, +0xea775611, +0x411b9c28, +0xd77ee248, +0x414b3a64, +0xe5d196d2, +0x781f09b8, +0xe002e218, +0x1cb421fc, +0x7203d051, +0x821486a3, +0x66744e9c, +0x3657e177, +0x57e7e519, +0xb612660f, +0xf4bb4be5, +0x64224add, +0x147ea441, +0x5d42fbf1, +0xd9eed67d, +0x82037d71, +0xdb7f9bb8, +0x9454f072, +0x3422d79a, +0x8acd232b, +0xef08d237, +0x8f4e2107, +0x0165914e, +0x7443fc4e, +0x90e1d100, +0x7cff458e, +0x245c1a4c, +0xf64ff88c, +0x4136d812, +0x074be17a, +0xe7f7af44, +0x3365065b, +0xaf927728, +0x1afe212c, +0xebd77bd9, +0xd00186e8, +0x3beb4143, +0x864ef1c5, +0x5bc0af6c, +0xc6682bd2, +0x359fb567, +0x65bb9a4d, +0x3def2300, +0xd5e39a8c, +0x2c8e8bdb, +0x37a96393, +0x000cd414, +0xd798c64a, +0xf9a94296, +0x8623d41e, +0xa4f776b2, +0x5e56ba81, +0xb45e703a, +0xf5a37148, +0x19bd8bc3, +0xeba46392, +0x1f5aa5a6, +0x0628be4c, +0xf31d1922, +0x671011f2, +0x49ddde7e, +0xb3e5bbfe, +0x4006ca22, +0x97979607, +0x57183a2c, +0x0c88d1e2, +0xd59368c7, +0x975563e8, +0x68cbfc3c, +0xe13eb4b7, +0x4bd42097, +0x1a19d028, +0x884d320f, +0xff29c8f6, +0x5fbd1645, +0xc5850c0f, +0x7396eedf, +0x67ec66c1, +0x2202d000, +0x0ea4915f, +0x4639b458, +0xee7482a9, +0xe16a4328, +0x0f33f980, +0x4d4465dc, +0x350a5d7d, +0x58b03bd0, +0x417468a1, +0x15d735ff, +0x6c627fc9, +0x021d06a3, +0x1e726b7c, +0xcb6b590a, +0x5fd4a359, +0x57147675, +0xdc36db24, +0xc76e7800, +0xf4c9dda1, +0x135fc9df, +0x28561695, +0x6270ed79, +0x82799159, +0xdbdb9418, +0xb2dd97e5, +0x565e7a00, +0x1fb66f33, +0x1c4134f2, +0x2cbd7eab, +0xac2dc040, +0xed26902c, +0xbf7c15a7, +0xa473c980, +0x173e752e, +0xabc43d95, +0x82a7e194, +0x27aa27b7, +0xeafc353b, +0x8962924a, +0xee346a1a, +0x5915c7bd, +0x52a66bde, +0x1e1aaf0e, +0x98141ee9, +0xba0e5fa7, +0x00d841e1, +0xf7d595e1, +0x13090c21, +0x33bb3fcd, +0x4b01e251, +0xd5aa2754, +0x9c6c34a6, +0x7fa88b5b, +0xbe667dfe, +0x80b4a61f, +0x29fbe805, +0xad4b75bf, +0x07a4d8a2, +0x1be044cf, +0x2318e90b, +0xec1f37fe, +0xdea9fe92, +0x33ddd34e, +0xd5dd22ba, +0x5256682b, +0x92dc22f5, +0x26bfb403, +0xfdfcb5d0, +0xebf61eed, +0x25a4bf9b, +0x597d2513, +0x334d937e, +0xbae85f28, +0x10a3eb53, +0xd02327c0, +0x5aa2586b, +0x0562c286, +0x2bb064a9, +0x94027588, +0x25438af5, +0xc763d05d, +0xa54978e8, +0x572d4269, +0x217d1ce4, +0x0660b927, +0xb6fd5dc4, +0x6908c80c, +0x7b693630, +0x024a5033, +0x29b40b31, +0x46971fbd, +0x9af0358d, +0x38af6197, +0xf53008f8, +0xffe7442b, +0x610e2d1a, +0x70a45316, +0xbdf245e1, +0xf6925684, +0xb4656545, +0xa3ce03de, +0xeb41ed4f, +0xddf1805a, +0x732bbc50, +0x01586cb1, +0xcefa0761, +0x65068545, +0xf578b50e, +0xb508f15b, +0xa64772e8, +0x4098c84f, +0x5906bcfe, +0xccf2611e, +0x9391cce8, +0x0b646873, +0xc662551b, +0x0d05250d, +0xe20485de, +0xfea533ba, +0x354b71c5, +0xf0761379, +0xb670194d, +0x9db89121, +0xf5b23fe9, +0x05f4c75d, +0xef607a1d, +0x0e0f1d4b, +0x231e38b9, +0xd81ee7f5, +0x620f4bec, +0x4d9e9bbf, +0xb0b326a3, +0xb0d7944e, +0xd680e89c, +0x01d70afa, +0x34c0747a, +0x28e37656, +0x381b5ebd, +0x48154af0, +0xb61e54fe, +0x3dd9ca8e, +0xbfec9356, +0x6b51cf96, +0xd909045d, +0xbd765152, +0x4da21b45, +0x74d9961a, +0x5792803a, +0x89f0c0a5, +0x74b6153d, +0x74f563a5, +0xbb12c155, +0x846965e8, +0xde832f66, +0xd63d79e6, +0xdad1b10c, +0xd069e914, +0x78ade880, +0x5bb04b3c, +0xb908efe8, +0xaebed01d, +0xb0b8c7e6, +0x0a109196, +0xf4d3f8d0, +0xdffb8fd3, +0x49e8614c, +0x956ff613, +0xe1fdf235, +0x8a03c7db, +0x2483b1ac, +0x2b39cb7d, +0x3c1fe5a7, +0xde24a4f9, +0xa2015d98, +0xd7a7a5c0, +0x0099b2f4, +0x8cf49066, +0xa0e258a0, +0x12ff9874, +0xacff432c, +0xdfd41188, +0x1d79fb94, +0x08adcac7, +0x60191cf6, +0x6eeab3b4, +0x782eed64, +0x5ac69571, +0x03694088, +0xcf6c1ca4, +0xe9bc61be, +0xf743e909, +0x6fb38b3d, +0x3157b38b, +0x2cf84497, +0x0551cb3e, +0xbfa5d89d, +0xa5c44505, +0xe94d3fb0, +0xa08ab3af, +0x8dff24cc, +0xcf0cd593, +0x6cf20a19, +0x7f2053a7, +0x96f544f8, +0x10993bea, +0x15e0208c, +0xb1953e4a, +0xf4e47f13, +0xbac85dae, +0x3d0a154e, +0x74b89ce9, +0x34d3bac2, +0x0d2f1a92, +0x823999b2, +0x6a064c51, +0xbf252bc5, +0x1064971c, +0x50e9b988, +0x7c555587, +0x0ef2d322, +0x2a2987b7, +0xc9efbe20, +0x1a79fa75, +0x8c21deee, +0x8c1a6405, +0xbb100bb0, +0x8c532516, +0x6a9a3f65, +0xd8c87dc2, +0x320c4be3, +0xf3bf0ba8, +0x0bc89181, +0xf23d54b3, +0xd23c77f7, +0xf2743a29, +0xe34fdf0e, +0x580743f9, +0xc85cc2f9, +0xa4029789, +0x295199f3, +0x15d87e91, +0xf056cc70, +0xf7384409, +0x6f1e19bc, +0xc8bb65e7, +0xb649cdd4, +0xbb57c624, +0x60a61ca0, +0xbd6ba50a, +0xc1e69e5b, +0x15354990, +0x1d576008, +0xf65aab32, +0x9c3aeebd, +0x54030180, +0x147f698f, +0xdbf7bc3f, +0xf9d148f4, +0x6cc8f97d, +0x4e636315, +0x04a2345a, +0x1d66f24f, +0x72c53a7f, +0xbcce0e36, +0x9ca07966, +0x2ab29a1c, +0xa94e4532, +0xf9e7467f, +0x1c92093e, +0xc31734a6, +0x43c67880, +0x100d5d96, +0x389a6020, +0xa83757d3, +0x0ab0c060, +0xb7bfab66, +0xcdbf5f35, +0x0d890770, +0x77366b54, +0x7cc27c31, +0xab6648ef, +0x0bc6cf6f, +0xca1c1a8b, +0xce402970, +0x3f07146f, +0xdea9108e, +0x5b796653, +0xb3e26373, +0x8385b766, +0x7455b76c, +0x6c972283, +0xebc1b20a, +0xc643a0f2, +0x9733e7ec, +0xc7af8cf0, +0x910ea8bd, +0xa9ea1952, +0x2a6c9ef1, +0x4221fe28, +0xa17485be, +0xd1fe1e9a, +0x4e5f21ad, +0x96a7c8b4, +0xae7398c4, +0x4f02d267, +0xa965d1b8, +0x2762d957, +0xf6e8c334, +0x7218fe25, +0x0aeca79b, +0xd67c1a9c, +0xe94f3142, +0x61ccec57, +0x8fe38491, +0xb3374d43, +0x5492ed27, +0x2bbef340, +0xaf127883, +0x074cbe27, +0x7533b634, +0xfd84f8ab, +0xd7412d0b, +0xebccd6d7, +0xdda9768d, +0xf2481579, +0x981085f0, +0xba9ef241, +0x65236cfa, +0x4522f805, +0xbd964b48, +0x95801a51, +0xadfe27fc, +0x24a1858b, +0x05c4ded3, +0x29fa34ef, +0x336c3404, +0x7955820c, +0xb5baf219, +0x4b059ed1, +0x613f87e1, +0x100ee013, +0xeae55ee2, +0xf5b1a6d2, +0x69d1023e, +0xbb36820b, +0x920c58a9, +0xd3e01f1d, +0xff9d4565, +0x06ef598a, +0x00046ebc, +0x7a37506f, +0xd3ae20be, +0x50a2dfff, +0x25b69306, +0x528418d4, +0x6364a15c, +0xabbb74ef, +0x0d43758d, +0x6de17252, +0x52509180, +0xac094dda, +0x745b58b4, +0x367a5ce0, +0xaac3f242, +0xe9117a5e, +0x61066756, +0xca5b7068, +0xc4a48844, +0x5c29b906, +0x711d48bc, +0x7324ca01, +0x7b70bcfd, +0x5b532ad1, +0xe370a975, +0x617bf881, +0x89a9406f, +0xf0fc87f1, +0x6d6a0f39, +0xc70486b1, +0x88f77ffd, +0x916ff0a8, +0x93a7e905, +0xfd9b6846, +0xab39f2e5, +0x3a512ba1, +0xf7344722, +0x40f0eab4, +0x4f718a1b, +0xa5f544ca, +0xe070117e, +0xadea7cc2, +0xa80d7065, +0x84638a07, +0x98bbae19, +0xbebceb6f, +0x29b2dfda, +0x539ed248, +0x79ab5e7f, +0x7413f3f8, +0x35d39d3d, +0xe5d4e86c, +0x5484fc2a, +0x6a64a041, +0x096e66d5, +0xadf48259, +0x833540ed, +0x868a02b7, +0xc94435b3, +0x90442dd1, +0xbd5e85cf, +0x51328bb7, +0xb08f7680, +0xcfc2233c, +0xa93bde04, +0x8cc61864, +0x5fda8dc5, +0x21fddee3, +0xa0e5eec6, +0x94b31136, +0x6d6c5fb8, +0x5decc5c5, +0xc30d9c5a, +0x1baa87a4, +0x692e0126, +0x404d12e5, +0x2d29ea8d, +0x6d68ff64, +0x6156478e, +0xd671d920, +0x41b04058, +0x1903b150, +0xc3c525f1, +0xa1b95060, +0x483483e1, +0x9f41b12e, +0xfdf0c72c, +0xfc8342f3, +0xe05a1bae, +0xbb67b044, +0x519c2f94, +0x3b5c356d, +0xdee285a2, +0xd4131b69, +0x7a06702b, +0xd1a17d69, +0x6e252a56, +0x10df25df, +0x3b9b5cf4, +0x3b4d6b5f, +0x5428916d, +0xd68c68a5, +0x03aed4ea, +0x7c5c998f, +0x80323f0d, +0x0f2ca06b, +0xbfff34de, +0xfc0dd277, +0xa9bded48, +0x75ff67c7, +0xab55e48d, +0x43edbf40, +0x43015081, +0xbb4305d3, +0x026a5f47, +0x54730816, +0x5dfb0d6d, +0xd755b7ef, +0x2343d665, +0x6a28d05e, +0x323cc2f3, +0xbe21d750, +0x10ad081e, +0xcd50113c, +0xb1fe5b6f, +0xc6303b7e, +0x8385a086, +0xfaa84213, +0x3a0b824c, +0x9080e718, +0x06cfe087, +0xb3fae67d, +0x3f3cee99, +0xd46f901f, +0x207f0c58, +0x9019cf77, +0xa3e90030, +0xf3ef92f0, +0x5f02844f, +0x33a5debd, +0x368a6275, +0xe0d7f593, +0x4ca79ffc, +0xbbe58cca, +0x1e206537, +0x81819690, +0xbbd65e7a, +0x40bd95eb, +0xda2f6c43, +0xa50c4510, +0xc52ea383, +0xcc652e6f, +0x68f0779d, +0x131454cc, +0xc5e8c348, +0x545315d5, +0x1565559c, +0x2b2a646f, +0x3b55a54d, +0xdd0c74d4, +0xc3d6ca5e, +0x824da04a, +0x3aa9a8e9, +0x8ffb92bf, +0x6a0130ea, +0xd2b28b5f, +0xbbc837c9, +0xbd9f3f89, +0xac8b912f, +0x084b6bef, +0xba441e44, +0x494d6ee8, +0xadba7027, +0xd6b15d81, +0xcd4f2ba1, +0x033503d1, +0xd998aed6, +0xfb6df4c8, +0xb8c51004, +0x6821032a, +0x0be740a3, +0x2c99d120, +0x63bac27b, +0xacb26d7c, +0xcb5ff3f0, +0xfbf0811b, +0xc15a86af, +0xcb94a8d2, +0x40e5dc9c, +0xd4ff91d6, +0xa1091044, +0x10401442, +0xa6b13236, +0x45f44d25, +0xfed4f28f, +0x6abb2625, +0x4cbccb57, +0xf41de926, +0xce1193c4, +0x03f779a8, +0xb514cced, +0x677a39f3, +0xf3537a81, +0xcc2248cd, +0x9ab301cf, +0x43d48b31, +0x3af3cfe4, +0x852accda, +0x477fc54d, +0xc959de5a, +0x08cb7128, +0x6939a677, +0x4d5ce571, +0x59761e28, +0xffa5d982, +0xc4bc8cea, +0xfbbe6d9d, +0xc924ebb9, +0x3a86a4cd, +0xdf04e36c, +0xdf234d71, +0x6bf20e6d, +0x89738e5b, +0xbe40720c, +0x14c53910, +0x0cda751b, +0xeccca396, +0x6bffa91a, +0x9e0ff78b, +0x3a8abc37, +0xcc973621, +0x6f63b98a, +0x8a8abca2, +0x65478d42, +0xb320f06c, +0xd8fa73f6, +0x30049761, +0xb8ab0380, +0x24c10800, +0xad1447df, +0xc7f6a9a7, +0x523aad49, +0x0d798a98, +0x1f1752ed, +0x7a73a30f, +0x58d8797d, +0x3ccb0fc9, +0x8f93dac8, +0x825ffc98, +0xd224f76c, +0x84fc6155, +0x8f2df817, +0x988a9463, +0x54f26f20, +0x8db24789, +0xdd0eccc9, +0x6de85bae, +0x963d5fe2, +0x5dbcb07f, +0x4ce1bf0a, +0x0e31538c, +0xc720369e, +0xf3de6f5d, +0x1e3f04d4, +0xd2a46c4e, +0xaff8cc52, +0x0f465eb7, +0x81de263f, +0xa10cee93, +0xb29518c8, +0x3454dbcd, +0x6b519ce7, +0x46d67489, +0xafe020bb, +0x7bccd910, +0x8922c33e, +0x32cef0bd, +0x89563bb4, +0x8c009438, +0x1d5c4f40, +0xbbe6d61b, +0x8b584ae0, +0xfa361546, +0xbd5596f5, +0x405bd072, +0xd26334fc, +0xe763ca04, +0x868d7212, +0xecbc3aeb, +0x69d3f288, +0xeb5e368f, +0xb429c569, +0xa8e7ba1d, +0xc919ba09, +0x4838e77e, +0xa637adbb, +0xdb820aab, +0x1fb6f676, +0x7fee9055, +0xd90adb82, +0xa32bca9b, +0xa06207ca, +0xb6395066, +0xebfdb6ad, +0xcbfc7224, +0xda40c0e6, +0x30ec5c10, +0x45ec0433, +0xc6a16e29, +0xd20f7668, +0xeb2e6812, +0x2748efcd, +0x681d7b12, +0x3655aec8, +0x4d0f1a8c, +0xfab44ed7, +0x8bd004a5, +0x9d338a8c, +0x084b6f39, +0xa14dd855, +0xd98c60e6, +0x6fe96bb7, +0x8676f204, +0xbbc0e47d, +0xa6f122e9, +0xc29124dd, +0xef38966e, +0xb1d9e9f5, +0x0cb771eb, +0x3623e13d, +0xff75705b, +0xa3cd6b62, +0x3d2740f1, +0xeaa573c5, +0x99a11c61, +0x98706c62, +0xdb4e074c, +0xdb188471, +0x4296d52f, +0x8c5d7d24, +0x6f94cc34, +0xfc0710a9, +0x061969eb, +0x4139c6bd, +0x3cfd360e, +0x58901f2e, +0x8f086fc3, +0xee2f3b0b, +0x192efb1f, +0x4435b678, +0x325601fc, +0xab41e19f, +0xc0441a95, +0xcd812c3d, +0xcde86bfa, +0xd40460b6, +0xfa0dadd1, +0x3ea95d91, +0xda74567e, +0x18e5db18, +0x8d37f341, +0xa534c05a, +0x63ce1aaf, +0x12436661, +0x13cee79e, +0xce8348bb, +0x6c2c6557, +0x1bcc853a, +0xb3ef39cc, +0x02be5a3e, +0x67f8c313, +0x19e730a0, +0xa6685bc4, +0x37aa384a, +0xee667870, +0xcccdd036, +0x183359bd, +0xd5a529b4, +0x383eb582, +0x611ea028, +0x3581ef9b, +0x1f14089c, +0x39786146, +0x12d72b29, +0x8c0ba01b, +0xf6c622b2, +0xdc9aad6a, +0x9f857010, +0xf28915a3, +0xe231584a, +0x63132053, +0x07d5c93f, +0x2ddd34f4, +0x936603ab, +0x7cb7c94b, +0xc16de619, +0x701c9ca9, +0x00ac9721, +0x93526ddf, +0x3f152644, +0xd52d3d62, +0x6a980731, +0x1fbae209, +0xd3e74119, +0x3d9b6d78, +0xd0609390, +0xf699fb47, +0x232800f8, +0xc2c9cfd0, +0x02e95917, +0xb2e588e8, +0xb003af34, +0x8f816389, +0xcc64d7c0, +0x404499b8, +0x0eff3fd0, +0xb76aaa06, +0x54493f24, +0x81dec1c7, +0x4fb7c28e, +0x659f1e02, +0xebc18ca2, +0x4f87953c, +0xf27f8179, +0xcc28ef95, +0x15fd1ba5, +0xf87b4e4c, +0xc97f1ecc, +0x1254b52e, +0xd4f560ac, +0x770b03db, +0xd5b16444, +0xff4d55d9, +0xc843914e, +0x1e85147e, +0x852f7c02, +0x282cd2e3, +0x06626de2, +0x5b373f97, +0xaf6e84a2, +0x2619e621, +0xf244e087, +0x3f08edff, +0x0f58f299, +0xf4a50873, +0xe2b2368f, +0x061eb007, +0x46d42b19, +0x9c94aa20, +0xb59da202, +0x1459cfbd, +0x52653b47, +0x3d03841b, +0x06311461, +0x735aebca, +0x35026606, +0xe62af51a, +0x395dd2c0, +0xf26a3d8e, +0x128adbe5, +0x69d0805a, +0x38f36ecd, +0xed689da9, +0xe7396523, +0x1f9db234, +0x736f0f03, +0xf31aeb8a, +0xefac9e61, +0x9815ec4e, +0x1bef31d7, +0x9fcb2c35, +0xb3f55716, +0x35d6c6d7, +0x2553319a, +0xd4221bc6, +0x548c7157, +0xc9b87dba, +0xb2198374, +0xe7b53c8d, +0xc59dc938, +0xf1e6a838, +0x36b06420, +0xc773496c, +0xf03b42c5, +0xf9ee2c9f, +0x156c988b, +0x93cf4a30, +0x6bf9b8ef, +0x20497dd1, +0xfd4fdb71, +0x7a398dc9, +0x06d90459, +0x6c2b8543, +0x2fc733eb, +0x7e2b0488, +0x19c5a015, +0x22628473, +0x6c7ec989, +0x97befdce, +0x2aae136f, +0x12916137, +0xee870a15, +0x5335d249, +0xe557cd07, +0x5b92e159, +0x37dbc3e8, +0x8c481776, +0xd443f503, +0xc13da89c, +0x1cf50916, +0x54ced192, +0xc93e994e, +0x100d2ac2, +0xa7757f03, +0x3a4443f0, +0x7c1c5d4d, +0xbe12b207, +0x697e929a, +0x7f7d8ae6, +0x45248aca, +0xe78ba6e5, +0xfba39446, +0xb23c0c11, +0x03059c11, +0xa19da9fd, +0x6f8a1d88, +0xa1abe96f, +0x04380455, +0x73bb6313, +0x698a484f, +0x0dc27abd, +0x8745edb8, +0xbdb31345, +0x793a633e, +0xedec72f6, +0xeb0859c7, +0xce6d0e26, +0x3471b834, +0xdf38259f, +0xdcbc9a17, +0x9cbebc38, +0x33ee8d2a, +0xa5d9bd0d, +0x55ff9d0b, +0xcc8e2c9a, +0xdd014ad9, +0x4b7ede6e, +0x3d5fd038, +0x1e48f5c9, +0x98df5c1d, +0xda2f0bc7, +0x2200af15, +0x5173acd7, +0x73e2cc03, +0x9401fc4c, +0xafcdbbcb, +0x7cca1a91, +0x83a6a9ef, +0x66de185c, +0xf3f6192d, +0xa967c832, +0x383c6208, +0x7746eb31, +0x7acb46fb, +0x3dfaecdb, +0xa973ba0a, +0x3494fa45, +0x9359994a, +0x631e10d4, +0x41c487c5, +0x05b21520, +0x2483c631, +0xdfd90fc8, +0xe9e7bffa, +0x7d61791c, +0x85757dea, +0x6ed7de27, +0xa897bbe0, +0x0d4bc317, +0xcf56abe1, +0x46f080e6, +0x7454d699, +0x61700521, +0xadddf8a7, +0xb8866e8e, +0x4341a029, +0x33a7f9bb, +0x438513f8, +0x3d50f247, +0x0001fa90, +0x26c66497, +0x7fedb633, +0xcf17584b, +0x8e25eb52, +0xabf1af97, +0xbf62c5e8, +0xc0b8d4d1, +0x476a5fe6, +0x1c0c5825, +0x0a6dacc8, +0x264cd07e, +0xa4cbefa7, +0xc8df9d45, +0xccc41157, +0x2091037d, +0x57192945, +0x2a8a044a, +0x6c25a961, +0x0d983934, +0x5a5f3909, +0xf38833cf, +0xeee95c86, +0xefd72f82, +0x9a3e7ca3, +0x66b185b9, +0x2d69c21d, +0x8ad939c3, +0x62e52394, +0x75882580, +0xff6e6c13, +0x2a2b7715, +0x51d16f9f, +0xac9a5ef1, +0x31b1a384, +0x0c822123, +0x708e8bfb, +0xe8f20063, +0x75fdf461, +0xa34c140a, +0x17451027, +0x188b3c07, +0x3043ac68, +0xdc846398, +0x2b9d9bca, +0xe4558cc4, +0x8d41c349, +0x78560063, +0x603220ee, +0xc3905b3e, +0x6aba8267, +0x3394ec03, +0x37f5a245, +0x1848770d, +0xdb0bddc4, +0xc54508d1, +0x57df8d8d, +0x96b3ccd6, +0x40a8da6f, +0x31079a6b, +0x94fd6893, +0x6695cab0, +0x808607cd, +0xf160c383, +0xd226cc4d, +0xe8c741d3, +0x25b485f9, +0x9b0a7bf4, +0x2de0c781, +0x1a6ef21d, +0x66b82c8a, +0x3ea7bc71, +0x0c4d8eab, +0x14e17b6a, +0x3ea65a25, +0x945fdc31, +0x380eaea7, +0xf5b59fb8, +0x5eda6443, +0x12110457, +0x9e0e54b2, +0xbdf4d88c, +0x2cac219e, +0x6009261b, +0x1bae047e, +0x65d5e8ec, +0xe2e012a8, +0x48f8f76e, +0xe01e3aaf, +0x5847914d, +0x68016a72, +0x07d01e0e, +0xccc99b8b, +0x46cba744, +0x0ed13b07, +0xbe6a0e24, +0x8d72262e, +0x7198b253, +0xecfee7ee, +0x885643e5, +0x773728e9, +0xba085347, +0x2d2676e1, +0xb1d3572a, +0x8c2f7f53, +0x3257cbd1, +0xc7ae2c93, +0xe867032a, +0xe9db52d4, +0x524917b9, +0x77380601, +0xeb183267, +0x2ad486cd, +0x9e2824b8, +0x25fc4d73, +0x051dfe1c, +0x34edc18a, +0xed18e80d, +0x5d272eee, +0xb2c26a35, +0x5c635f5e, +0x1cf9b0ca, +0x69b470c8, +0x443f9b53, +0x85e87315, +0x7755e0f3, +0x7f1872a7, +0x4b1cf514, +0x658ea219, +0xd1c48528, +0xe28d8822, +0x6388575a, +0x5e259634, +0x1689dd23, +0xa1bed4b1, +0x7aa18ab2, +0x2d7f8da5, +0x00a32392, +0x35194fee, +0xec8225d2, +0xb8a92d87, +0xafd75259, +0xa4411bb3, +0x758f526e, +0x9c2e30c9, +0xaecbff5b, +0xf127a1d0, +0x4b3e1849, +0xf94dda29, +0x3ae0f287, +0x1255619b, +0xf442a7be, +0xebbdd89b, +0x5edf205b, +0xbe627ebb, +0x7b29da3a, +0x70379be6, +0x529256cd, +0x90e81a5f, +0x51b14840, +0xac6e5b40, +0x49f29838, +0xd5d24df8, +0xea48047e, +0xc461d1e5, +0x974a39e9, +0x083767b6, +0xaa80fe71, +0xdeb39cdc, +0x55f8538a, +0xa861dc34, +0xd791c048, +0x88104363, +0x8fc891fc, +0x788a50ae, +0x5e7a72fa, +0xad5ea9f1, +0x980ab9c4, +0x09998324, +0x5ab1245c, +0x6fb146e2, +0x42cbbf35, +0x99f2052f, +0xd1e62193, +0x9c0e130e, +0x5ca0e6d6, +0x0e00aefe, +0xad063605, +0x48b765e0, +0xffb48b93, +0xaf543ff6, +0x2a84950d, +0x89c25d72, +0x37fd48e3, +0xa13901be, +0x0cbf942f, +0x05f2db0b, +0xcc99cd13, +0x5df4048d, +0x5d8288ba, +0xdf79fd6a, +0x44ba824b, +0x4e5c79be, +0xbba1437b, +0xe842ea0a, +0x6ef33c70, +0xa5422168, +0x6321c0e3, +0xbbce7f66, +0xa54293f6, +0x02d2d845, +0x88c37169, +0x8a5cb66c, +0x9d571b1e, +0xb11fee3b, +0x4c3eadd9, +0x65801257, +0xdbe3f767, +0x0433807e, +0x371ed7fe, +0x701336e1, +0x0300deee, +0x5a0fac3f, +0xf491bfcb, +0x3c476600, +0x0c0b7b88, +0x77c618ec, +0x443c44ae, +0x8e85bb13, +0x5463cc48, +0xf8f4bae8, +0x2e44f9a2, +0xbca5febc, +0x78b2de67, +0xcab11776, +0x2c4880b8, +0x256bc0de, +0x39459582, +0xcaa07f4e, +0x146086c4, +0x01492c74, +0x22c0b04a, +0x82a673c4, +0xcf95116f, +0x436e2fef, +0x9a3d020f, +0x5c9e99e7, +0x974a7627, +0x98ac8ab1, +0xae925118, +0x4707adb0, +0xe159b373, +0x5fec512a, +0xcb75c82d, +0xdcee6ccf, +0x98703662, +0x46155fc4, +0x44703fe4, +0x43e17652, +0xa40ae7a4, +0x3d603ba4, +0x364b6501, +0x25ac9938, +0xebb5ec89, +0x13ebd21f, +0xad788b4d, +0xfa6c4a38, +0x0920e639, +0x99d9f400, +0x293306a4, +0x3fe54681, +0x03ac7f18, +0x400840ce, +0x1cce78db, +0xd0afad05, +0x41fd5655, +0x4023993b, +0xcb539f78, +0xc1174ebb, +0x89753a22, +0x7bd90955, +0xceb84e27, +0x1980ca31, +0x2216ae01, +0xbe8ef770, +0x40b62e63, +0xb1328839, +0x071052d4, +0x3aba80e4, +0x81fe7449, +0xf39928fe, +0x40372e7b, +0x65668fa3, +0x3af767e8, +0xb63746d9, +0xc6599f4a, +0x6c4848e4, +0x66396bd9, +0x9a5cace1, +0x3bad16e4, +0x72fdbc51, +0x5b97e333, +0xa4ab01a4, +0xcc1ca5dc, +0xa5bab446, +0xdd921e7f, +0x1e79e312, +0x36938a1a, +0xb80da345, +0x4db26ddd, +0x0fb16c2f, +0xb97a10fe, +0xe2496c6c, +0x1cb0203c, +0x431f49af, +0x535e27d2, +0x07eaa785, +0x5e65a0e4, +0x1f959ce4, +0x23a15df4, +0x0093b752, +0xacffbccc, +0xc80ab717, +0x26b2d04c, +0x2013dd27, +0x07423415, +0xd29d2b3e, +0xcc22d48d, +0x3c02c414, +0xd473be93, +0xcfc11737, +0x47512896, +0x4165ddbb, +0x8516fb56, +0x3ddd0221, +0x6d5b31fa, +0x81b392a0, +0xf43b36a2, +0x518d212a, +0xc593ab62, +0xf597d70b, +0xffe5df1d, +0xb24d4117, +0xa566947b, +0x647563d2, +0x931f73e1, +0x4abdc837, +0x398383c7, +0x220c91a8, +0x5f09f06b, +0x10efedcf, +0x9a37bf7b, +0x6a8501f7, +0x994909a4, +0xfc554d58, +0xa7aa1ef3, +0xa83ae1a1, +0xc7b12904, +0xb1838685, +0x3531bc5f, +0x0419daa8, +0x7ae0b979, +0x14bd6479, +0xc0fd5b0e, +0x3306e9df, +0x06e1b190, +0x3199caf0, +0xdd7f21fd, +0xc7aadd6f, +0x32332b42, +0xc7d36013, +0x8951ceec, +0xc4b1cf14, +0x5b0e5631, +0x3cd8eb98, +0xb97998d9, +0xf10bf34c, +0x847973ac, +0x9027e9fa, +0x06914554, +0x79097b4b, +0x9a778d84, +0x60f4975b, +0xb0693fcb, +0x7d9f0aa9, +0xb49b97bd, +0x9a57ba0e, +0x4ea322ca, +0xec1716bb, +0x29a2a83e, +0xece73423, +0x58e4ff90, +0x046eb673, +0xf9257738, +0x3961c5cd, +0xba6b2906, +0x5552c433, +0x69507706, +0x6a0369f3, +0x97d81b8a, +0x20247585, +0xce4823e0, +0x0678964e, +0x4d5727f5, +0x616498e0, +0x911a929d, +0x5ac2e89a, +0x44a588a9, +0xed4b3268, +0xcc226002, +0xef72bc16, +0x41d06675, +0xbf9e35e2, +0x7a0ff4ea, +0x95ea5f22, +0x48dbbe7b, +0xfb9ed72b, +0x065e54cb, +0x50d81e4d, +0xe2eef746, +0xd34da49b, +0x9deef321, +0x5b4c7c13, +0xeaa6036c, +0xf7f825a0, +0xcc1b06f2, +0xd9a7e303, +0x8f50366e, +0x12e4983c, +0xf6e3bae5, +0x418a88de, +0x9183481a, +0x98720bc2, +0x90ff5ede, +0xff870219, +0x12fe5bef, +0x764c9139, +0xe48f529a, +0x0cd5f72a, +0x2521825c, +0x60203a30, +0xf26e9ee3, +0x7b65f00f, +0x56b7af4d, +0x6f603714, +0x1f24ef5f, +0x180ff451, +0x9c4ce4e4, +0x5c1c072d, +0x371f8858, +0x862eaebd, +0x968f0d8c, +0x0a53d9bd, +0x177a677c, +0x2cc4a01b, +0x0b78a54b, +0x67aaab52, +0x9d14c912, +0x37eae7f5, +0x1e6acf75, +0xab82faa1, +0xbc38bb9d, +0x2fb0863e, +0xf4ddcfd0, +0x35afe71e, +0x33b74c25, +0xe10d455e, +0x8cd45448, +0x4e16b43f, +0xd60953c4, +0xe90bb194, +0x37c7cb89, +0x72806865, +0x50ef76ae, +0xe4a9f34f, +0xbb034c3a, +0xb8cdb6fd, +0xc697717f, +0xad4ddb96, +0xde038059, +0xe0afcb86, +0x20019528, +0x6e9a4837, +0xa35d41e6, +0xbb032621, +0xb6c3caf1, +0x5fc08863, +0xd898d2bc, +0x5b8eb6dd, +0x795adbd4, +0xbd2df42c, +0xe2931ced, +0xe152d58e, +0x2a49e0db, +0x0218e377, +0x91bfb7e4, +0xb83f8f58, +0x3ea6c8f4, +0x123f1aaa, +0x55211d0c, +0x27004e6f, +0x5642b17c, +0xe1460cf9, +0x4f72a5a9, +0x12a6bd79, +0x60e4906d, +0x5f93cb11, +0xa75917b4, +0xe90ba793, +0x90f4f20d, +0xebf86de0, +0x46b56e27, +0xe3de28c6, +0x3f283d5a, +0xc4ddd819, +0xbf3de0a1, +0x6465cfc8, +0xbd646ac6, +0x9215f816, +0x5c6cbd29, +0x44ff004a, +0xd147cdc3, +0xe3b46974, +0x9b217c41, +0x3881d2a5, +0x01a6700a, +0xd4f0c626, +0x4e99a574, +0xdb533089, +0xf063ba28, +0x644a51fd, +0xa8bf07e0, +0xed7fee7a, +0xbee88fc9, +0x518184cb, +0x683f0890, +0x79e913f0, +0x39eba37c, +0x1d870322, +0xeeb8938b, +0xdc2e7d72, +0x62aac2ec, +0x5d7de655, +0x4c0d17e5, +0x9c7254b9, +0x4cf29855, +0x71561284, +0xd6df7a08, +0x0e4e4fcb, +0xa89e2bb0, +0x7a383d26, +0xaecb2c0c, +0x2a4bb5f9, +0xde0e70b7, +0x39c6f3f4, +0x39167a14, +0x5cc61b01, +0xd033af71, +0xca2732e1, +0x315c6aec, +0xbfbccbe9, +0x49285bc4, +0xea9468c1, +0x00679f17, +0xead88ad2, +0xae83f929, +0x26f8d7e4, +0xdb84c068, +0x313d3f50, +0xc9ca8605, +0xa734f110, +0x86bbc39d, +0x234e5044, +0x67444cbc, +0xb4769d98, +0x25e83c7b, +0x80df4b00, +0xee7461c1, +0xef3f16c5, +0x676041be, +0xf0f868ec, +0x84deaf8a, +0x6282e9af, +0xbca99dcf, +0x52604204, +0xf733c0c5, +0xbfee4ee6, +0xc2ebf7e0, +0x8ccda2d7, +0xad43adaf, +0xb76e0cad, +0x2c11666b, +0x03fed639, +0x6e73e28e, +0x29abee17, +0x20ee884c, +0x7b53365f, +0x5ccfc02c, +0x8d460c8c, +0x1ca31714, +0xcb38840d, +0x6773d3a9, +0x27b8198f, +0x2fd63527, +0x1bb3502d, +0xd9615866, +0x945ac35e, +0xbca0a3a3, +0xccf54198, +0xff9e77be, +0xa202d684, +0x0cccbd17, +0x8069a677, +0x3ea6d68e, +0xdbf727e9, +0x743ea3f2, +0xcff6dc00, +0xed513240, +0xd9309cd7, +0xb329b21c, +0x0788f1e3, +0x0fe9f6e9, +0x7a01e69d, +0x4ac76b81, +0x8677e30b, +0x68c38406, +0x8834bdd7, +0xd6361d95, +0xeb7a001e, +0x4cfcbca6, +0xf56c862b, +0xa7eec4a9, +0xa2cf206d, +0xe7beaa32, +0xe660cef8, +0x012f470c, +0x54d411c1, +0x26610bf0, +0x2b2c4205, +0x0dcaefcc, +0x0f90c85f, +0xb6c3aa1f, +0xe0d8bb90, +0xd6f70655, +0x3a72b2f0, +0xabe0d0ab, +0x714aadff, +0x8d6f6c26, +0xf77d880c, +0xcc16d2e0, +0x4baa7169, +0xd898b629, +0xfbbf1be5, +0xf34bd1cf, +0x26528b51, +0xc2d863bf, +0xc9415904, +0x3d29ec5a, +0x1e4668e9, +0x5e169f9f, +0xa7d91fd6, +0x90c42d16, +0xc0b4b60b, +0xdfbfe045, +0x594f1610, +0x5057227a, +0x24ac59ce, +0x11eb8b0d, +0x578795f1, +0x8f72ff17, +0x7d223cfa, +0x2b2bc65a, +0x454944ee, +0x8b267bff, +0xe33507f2, +0xe9fb3e43, +0x119d6be9, +0x18729869, +0x71011b80, +0x02eae306, +0x10d8421d, +0x56484c38, +0x40ca45e8, +0x0e28dc7d, +0x6efa4092, +0x7f99732e, +0x26ae6e9c, +0x5979faf5, +0xe15ba498, +0x805263c2, +0x3111ca84, +0x44439563, +0x2e30893c, +0x2ca0d147, +0x1c066a4b, +0xa10dbf97, +0x1c318955, +0x220c9b0f, +0x139b1568, +0x9eb831ea, +0xed05ee79, +0x693d4d68, +0x9c6ba893, +0x70f3e2f7, +0x3809f6f5, +0xc884febc, +0x060f4659, +0xec861537, +0xb6eb940b, +0xd917ee12, +0xe3abe3bb, +0x478b1db5, +0xac4077e6, +0x66abee43, +0x52a819e4, +0x7845cad0, +0xe6353633, +0xd68fe591, +0x617b9d24, +0x53488ce0, +0x6e90b779, +0x0417c865, +0x0305b56a, +0xfd89a98d, +0xa8cfe448, +0x7d54861f, +0xfe875048, +0xedc00199, +0xedf31c7d, +0xcd1a8a82, +0xa9ccafe3, +0xb75754d4, +0x1a96374c, +0x393a12b8, +0x2ca353d4, +0xef4480e4, +0xa647cce3, +0xbb8c9653, +0xfcbb4a6b, +0xf7d3607a, +0xbf52036c, +0xa46b534e, +0xa41d9279, +0x75e590c8, +0x12504adb, +0xb4e6f65c, +0x831a9eff, +0x9909cd45, +0xe343b9d1, +0x9944a93e, +0x7ec16727, +0x7f10891f, +0xf491fc56, +0x9e164cc0, +0x1e9c565f, +0xa1ebf765, +0x8449e2e4, +0x6f2309de, +0xf37531b5, +0x20530701, +0xe69bc075, +0x10b8d547, +0x76f38c48, +0x85dc480d, +0x8f52c351, +0x8063713a, +0xe1f41bd4, +0x754a5faf, +0x378ad23c, +0x9eac875e, +0x297fe9a1, +0x524a50f5, +0x060c3652, +0x2606bc07, +0xc7049b0c, +0x29f6278b, +0xd0b5b18b, +0xef74ea16, +0x18bec035, +0xb1b1d459, +0xe030d9e0, +0x3d8fa395, +0x3e6b6619, +0x7ed20989, +0x37dee365, +0x201bed93, +0xf70ef091, +0xfc19d7c5, +0xb7b6f663, +0x9f0b1c2d, +0x99bf744e, +0x565db7b2, +0x42bd3414, +0xd09cb1ab, +0x5bf56758, +0xdd52c9fe, +0xb28b0cec, +0xc5ebc2ad, +0xc45ebd1e, +0xeb56c2b7, +0xda77e984, +0x8f91a696, +0x68f24552, +0x72334b94, +0x1e9d78ff, +0x520b1c1d, +0x8f41c3bf, +0xa50c79aa, +0x28fadae4, +0x4802f1f9, +0x184cd218, +0x2556b4e7, +0xe0e60701, +0xc385f198, +0x634886e0, +0xcf688cfb, +0xdbabb125, +0xf6c2fc9a, +0x25812bdc, +0x9ec25bcb, +0x91b3873c, +0x975f6d2b, +0x75394de4, +0x622cfd2a, +0x00532f1f, +0xc5c6da20, +0x910e6961, +0x2562e8b0, +0x2241f81f, +0x22de48ad, +0x9a308c9a, +0xa88d1736, +0x4117f92b, +0xc5f8185c, +0xee546755, +0xcb03a1c6, +0xe00da224, +0x30bc1ea5, +0x16494adb, +0x1090630c, +0xe33fa835, +0x09e8cde8, +0xef1be4b8, +0x7b84ad8f, +0xb0c4daaa, +0x78fdcc5f, +0x286bc413, +0x4945cf0b, +0x291d3b01, +0x23f40fd9, +0x01dd507a, +0x49556853, +0x7f975095, +0x4f005633, +0xa9940274, +0x75c8e218, +0xcb7e71f4, +0xc2a7bdec, +0x3f3409a4, +0xa81b8bde, +0x8a755250, +0x149db236, +0xbf2365d9, +0x04b8d0d8, +0xe16af44a, +0x5cfe52c7, +0xd4dae5ba, +0xd7bddf7e, +0xf78bc75f, +0x70f069f2, +0xae73bb04, +0x56b551fe, +0xa9c6a0c6, +0x29a99d5c, +0x5ddbe201, +0xdb24dc2f, +0x47212680, +0xed5868be, +0x388618f1, +0x0facfdcf, +0x946c6bfb, +0xe6ad8a62, +0x95ca2224, +0xa35ad176, +0x19221f1f, +0x4ef7e58c, +0x50a7f2cd, +0xa7fbe7a7, +0xc6c758b2, +0xd2b0d72c, +0x545507a9, +0x7f0fd74e, +0x15fb69ff, +0xc35d3046, +0x5ad99fd7, +0x0bb66a33, +0xa80784af, +0xe6058333, +0xd425310a, +0x63cd5b63, +0xa57c3e84, +0x9fbd3951, +0x851d86c2, +0x40a8d772, +0x278b6d55, +0x5d1f12f8, +0x11ff8c5f, +0xba5f9b06, +0x069c7b28, +0x95bf261d, +0x2c0902c8, +0x5c9d052a, +0x4941c140, +0xf209893d, +0x69e8223f, +0xca4cec62, +0x1de74c5f, +0x62917bf9, +0xd95b4411, +0x12fb4bdf, +0xad1eac8a, +0xd0cdd885, +0xd2675fd6, +0xad1c97ff, +0xaab912c3, +0xe52e7f10, +0x8e71f922, +0x4412dfd1, +0xd52d82a4, +0xee126a23, +0x71280f0e, +0x6a131326, +0x672ac789, +0x56e9f842, +0xe49d857e, +0x0091d69a, +0x89bcecc9, +0x10a51836, +0x6abbeac7, +0x2ff82771, +0x2878e3dc, +0x27be4ae2, +0x10978723, +0x33943774, +0x3ae1dc7d, +0x619394be, +0xf9217365, +0x44a27e04, +0xeb67bf44, +0x9ccf799d, +0x2b11b18f, +0x3f6170ae, +0xb8fef298, +0xe219e273, +0x6afe0a5c, +0x31640409, +0xc51ddcdc, +0xebee3209, +0x825bed63, +0x0a3a2602, +0xe1e88425, +0xe5babd75, +0xdf077c38, +0x1fcfbcd1, +0x1aed7275, +0xe1726b33, +0xa0f5f877, +0x79631bc1, +0x5b79557b, +0x5d223797, +0x80cb618f, +0x55f3b828, +0x84548d9e, +0xa577ed37, +0x949cfe03, +0x638075a9, +0x3f5b14ad, +0x9467ac4d, +0x8abffa7f, +0x5cfbf93f, +0x47606597, +0xfbe328b3, +0xda3cbe25, +0x77d59dd4, +0xaf47b4ae, +0x9d9ff651, +0x1d1f5ecf, +0xd32987a8, +0x09e8dfd7, +0x1a85a79c, +0xb9de3231, +0xdddeeea6, +0xd06f0bce, +0x9095352b, +0x87045a6f, +0xf862f4b8, +0x0664c82b, +0xc450bab6, +0x6e74ae71, +0x1897e441, +0xc5a84bc2, +0xd45e4cf2, +0x2f45f7bb, +0x2e4d9634, +0x41463923, +0xf1d7409c, +0xe7a57aaf, +0xa18b0c07, +0xd33f7176, +0x4bf4797b, +0x9444a117, +0x72e220e4, +0x73576f6f, +0xda539402, +0xe38afa8a, +0x197a2437, +0x53a8348c, +0xdc8d5c89, +0xc889190f, +0x7b4f049d, +0x8324d268, +0xe7752894, +0x76bb5175, +0xc056ce75, +0x35122102, +0xaf493b42, +0x7ca20ca5, +0x6a76f383, +0x5d957855, +0x5b289e4b, +0x3dd8dce4, +0xeb0fc52d, +0x208536a5, +0x98b62cf5, +0x8f4557d8, +0xa07c2799, +0x7a99e7e8, +0x95a522bf, +0x03b80d0b, +0x8f059638, +0x4dc0001c, +0x65f5ab7f, +0x1955cb10, +0x6e858e9c, +0x2f66c078, +0x4e1f2b7e, +0xbb29fe24, +0xacf2025b, +0xa2616e02, +0x6880078a, +0xda343479, +0xf17781a4, +0x2cafc942, +0x88600a4b, +0xd8a389c4, +0x9c62bce0, +0x1d578ac8, +0xbc14daa3, +0x94495756, +0xff95d4bb, +0xc194b580, +0x38149d37, +0x9f6d2da9, +0xb860a836, +0xb2b1cf85, +0xa6b56a66, +0x151868be, +0x5c73be4f, +0xfe353b27, +0x65cb6790, +0xc90ca01f, +0xe836e951, +0x337e7a8a, +0xc90e175a, +0x5957b633, +0x19533ab3, +0x6bc3d84a, +0xa12c3033, +0x4db36b5d, +0xc7ae86db, +0x23d9cb06, +0xea602d97, +0x220b622b, +0xf17609de, +0x84cc9576, +0x4478d682, +0xff9ee147, +0x7d93b70a, +0x438c4280, +0x0d3640f9, +0x2cd9ee33, +0x5a28f64b, +0x4c3d5558, +0x01fef7de, +0x9a521a09, +0xd64177f8, +0x7d7a8d51, +0x65be33c1, +0xaa2b1778, +0xf6e20af0, +0xf7b1045b, +0x0b6e91cd, +0x374ce2fe, +0x8d4039b4, +0xb794dc44, +0xa10fa45b, +0xaf959f6d, +0x405edde5, +0xcab57569, +0x4edc648c, +0x51e0abaa, +0xfd4d2503, +0xb7d511b5, +0x5fe0ce7d, +0xe40dff53, +0x3a6336e7, +0x8ffb743f, +0xd6899238, +0xb8b72292, +0xed7da1b3, +0x25287fa2, +0xc5885de0, +0x3bfb96d9, +0x1360283a, +0xeb2f2010, +0x5fea5b38, +0x28a22642, +0x77dce918, +0x3b08d49b, +0xda00c125, +0x0dadaca7, +0x88e69fed, +0x59860632, +0x8b527408, +0xb8907330, +0xafb4dea0, +0xcaf377a8, +0xac520b96, +0x3731fb71, +0xc786ef00, +0x8f8449c0, +0xa2df8066, +0xbc1219fe, +0xc53023c2, +0xb55783d7, +0xb0531997, +0xe7c35ca6, +0x6c5c58c7, +0x17bd690a, +0x7814e871, +0x328221b4, +0x6a5b0202, +0x56a53a8d, +0x622da537, +0xcce3df89, +0x15fb2183, +0xecb1366f, +0x9c274275, +0x0c669b98, +0x28ea8868, +0x96aaa7ca, +0x1f4c4337, +0x0b30376e, +0x8651e88d, +0x68539c7e, +0x76d4fe3f, +0xf387da89, +0x00fe45c7, +0x645c9f6d, +0x45f8e9b2, +0xf7d54f91, +0x53867742, +0x5e6369b3, +0x9355c4c2, +0xde135991, +0xa8bb1a14, +0x0213d40d, +0x3dbb51ef, +0x15c8d667, +0xc5f137b6, +0x7c07ed1b, +0x14f3910b, +0xb941f104, +0xe6fee72b, +0x7c0223dc, +0x1f3ba467, +0xedd1200a, +0x5d3efff1, +0xc2e9db27, +0xf6509fc3, +0x9cbae8ed, +0x743aacd7, +0x63a4afc6, +0x235babb4, +0x6957f86d, +0x91029479, +0x5150ec41, +0x700474ab, +0x681dc647, +0x30867742, +0xc0f9a8b5, +0xdb0a8862, +0x477b8bad, +0xed709e73, +0x3ab31426, +0xebde5c70, +0x786ed2f9, +0xc79c565e, +0xb4e193c7, +0x2180d37f, +0x3877ecab, +0x2dd6a00d, +0x83c29bdd, +0xe8fbb7d5, +0x1dde35ac, +0xb775c4dd, +0xbe8f1f53, +0xec4e965e, +0x57a4bcde, +0xd112f5d4, +0xf1ca9ff1, +0x0f11f1c3, +0xf8e41eee, +0xf5708fa3, +0x7cc60e59, +0x23523a33, +0x6b28d83c, +0x3a6c9249, +0xe15cd2d2, +0x11fe3908, +0x612099ec, +0xf595708b, +0xc669e3c3, +0x2285a09c, +0x00794388, +0xecd8f744, +0x55d68748, +0x6c24bd14, +0x82a32721, +0xc0d69d87, +0x34bf228f, +0xc8ca8d05, +0x2de1d04a, +0xbfca954d, +0x75d7ae7e, +0xa7bab667, +0x51c4296c, +0x0bfba5e7, +0xb8c352d1, +0x726eb3b6, +0x65622f3f, +0x989bb844, +0xc6fac4db, +0x47775708, +0xcc9a7434, +0x401bc2d8, +0xca167359, +0x11025abb, +0xef0344fe, +0xd32c1626, +0x06f162d7, +0x17efc179, +0x8835b964, +0xf3775b82, +0xa1df5905, +0x5ca9c489, +0xd1878fbd, +0xdc162e6c, +0xfc73c492, +0x5abc6dca, +0x4a0270ac, +0x09e87a1a, +0xc18f380d, +0x79f0b5d2, +0x8c9c1432, +0xe7bb5902, +0x9375968b, +0xe0c93fd0, +0x1d7c21d3, +0x629d9e87, +0x9a44cae6, +0xf3294ca4, +0x47762610, +0xd70e919a, +0x65dfb948, +0x0d933a54, +0x496e301e, +0xf88ac2e7, +0x599831d3, +0x6bcb5486, +0xf3aa7a15, +0x6415e505, +0x2057504a, +0xf1dc4819, +0x04462377, +0xa6b091fe, +0x0b6e13f2, +0xfa5be929, +0x1efe0981, +0xae20b57e, +0xfc5a7239, +0x6636161c, +0x89985454, +0x4637f78b, +0x92350d77, +0x03cf1655, +0xc8655d5e, +0x4891e3a8, +0xf967fe88, +0xfc245e2b, +0x70797fba, +0x0417514d, +0x89ed5a43, +0x2f091799, +0xa374449b, +0xa023e769, +0x56ac01c4, +0x87d741c6, +0x0ccb4747, +0xefce2e5b, +0x361f8811, +0x73daa5d2, +0x3fcdb7d1, +0x8e3bcd76, +0x30c97211, +0x4e5e12aa, +0xee212aaf, +0x73583131, +0x2c88dbb1, +0x9cc81515, +0xa8555e00, +0xce71f25f, +0x80878f43, +0x01ab9fe7, +0x9a28429e, +0x3f1048b0, +0x5afa4067, +0x56407fc5, +0x797d37e8, +0xc057dc13, +0xc6c5ae41, +0x9f5c4316, +0x006d1e54, +0x0ea54ee1, +0xc1974e97, +0xa05b22b2, +0xb864d974, +0x81c9a5eb, +0x3592f3e2, +0x4e23319c, +0x6e622a43, +0x1d79b2a7, +0x91291c7f, +0x2444889f, +0x2df8dafb, +0x91741c2e, +0xa86fcdd2, +0xf5d701cb, +0x5d01ce01, +0xae34dcd7, +0x40ae2ab0, +0x66ce70ec, +0x193641dc, +0xd3935025, +0x03ef3ddc, +0xc67144b3, +0xe4ff2ab9, +0x824672fc, +0xd9be3d28, +0xb06edc62, +0x2625ac08, +0xbfc67ceb, +0xeb652eb8, +0x452c3333, +0xb89f3873, +0xa52d1bc7, +0x87d4706f, +0x7789733a, +0x7093f12f, +0x61a47e0f, +0x648846c4, +0x4b266952, +0xf78c3ffc, +0xec495f8b, +0x856b6c41, +0xf00ec308, +0x39975f7e, +0x908d3b8a, +0x7aebcfc3, +0xd2d5c63f, +0x2137ce59, +0xa7f4841e, +0x473cf6fb, +0x89c41b31, +0xb619e105, +0x7ff485c8, +0x319e7a05, +0x7a6f1ec8, +0x48c6bd2c, +0x1f17ec80, +0x389e43e2, +0xafcdd596, +0x6fb58a5f, +0xe68d970b, +0x31db015b, +0xcb7bafc2, +0xea0b3c7d, +0x30697b3a, +0xbaa8f9bc, +0xa2f54028, +0x5a119e8c, +0x915856fa, +0xda0ee996, +0x046d93cd, +0xa8544f4e, +0xf289e4a7, +0x21ad92e4, +0x29339667, +0x37b0e4f2, +0xf2fa7198, +0x88534b6e, +0x5a70be1f, +0x96743659, +0x5a21fef7, +0xe262d213, +0xffb4d0f0, +0xc482bf24, +0x0e67689e, +0xe056eef9, +0x4c1a99e2, +0xe65a5926, +0x8b970e84, +0xd2ceacbf, +0x99325a62, +0xc9c092d9, +0x1723ce3b, +0x53c82763, +0xdeac63f7, +0x2ce5bc6c, +0x3d5835e0, +0x76ea9f72, +0x6ba339a2, +0x3331fbf8, +0x89f80f68, +0xbc978200, +0x86d931c8, +0x8d319b49, +0xf5f15707, +0x3fd25e6c, +0xb2a101c6, +0x101ed9d0, +0xe180a281, +0xc404f0ba, +0xc45d22be, +0x38cfd8a1, +0x3133b8b2, +0x5994362e, +0x80fd7f59, +0xfc54a1d9, +0x6d36299b, +0xa19caf34, +0xcfb9d72d, +0x2042ad66, +0xeec769d0, +0xf2aa86f6, +0x5ad96a64, +0xdc52e9fc, +0x16894e0f, +0x1a463cac, +0x0d1729fd, +0xc4442a22, +0x5032d6cb, +0xe7fef582, +0x459294ea, +0xfb28bee0, +0xdfe821ab, +0xcd5ab3fa, +0x50104634, +0xbe8e26ce, +0xd15b7d16, +0xd8123a6a, +0x1a783318, +0x9c15a5b2, +0xd2218db9, +0xa94bdd7c, +0x65494016, +0x127975b2, +0x183669f0, +0x12afe8c3, +0xc1bbc51f, +0x83dab486, +0x64e51099, +0xf4de377b, +0xd5fe875d, +0x1aa92f75, +0xf449a31d, +0x0636511c, +0x882f7e4d, +0x6904fb93, +0x046c4637, +0x2d56b616, +0xd7c029a7, +0xfb52856a, +0x19a0ee77, +0x3853b405, +0x0a2507e9, +0xf2626275, +0x6b3c31be, +0x490add01, +0xe2b3406a, +0x809a8758, +0xe3529a70, +0xfb6d421a, +0xf9fdf11b, +0xc7fb0294, +0x78a12245, +0x233d42a1, +0x71943852, +0xf3f40317, +0xf2b766c7, +0xe494521e, +0xcbb94590, +0x384dc549, +0xc4a9ac6b, +0x1bfa4a37, +0x4e95aeb0, +0x5904b612, +0x783635f4, +0x6acc979c, +0x55f33084, +0xbbca3d3f, +0xc1720d41, +0xc13286eb, +0x0955c837, +0x10fd47b6, +0xb6d09539, +0x7d8e43c2, +0xa6d7ff0a, +0x85c8a1d6, +0xf86921fd, +0x6348a771, +0x5ed57d23, +0x47c2c4c4, +0x5a0afb0d, +0x1c965645, +0x6eee4e1a, +0x7d36af31, +0xced31269, +0x464fd8d5, +0xc2a5ac0e, +0x6799b611, +0x540e0233, +0x2b44f9f4, +0x3bdc0894, +0xb671f5fb, +0x949f5e5b, +0x8550f32a, +0x82af7a27, +0x812efe70, +0x93fdf7f0, +0xd34194ae, +0xb32a5666, +0x60b8233e, +0x7fd519c5, +0x4477c420, +0x82f00d48, +0x701f73d3, +0x2b81da55, +0x87a8eb44, +0x3ec985e0, +0x1f6c33d9, +0xb85f826b, +0x9464814b, +0xfb53c62a, +0x67234668, +0x34f314f3, +0xd2e47c93, +0x76099e91, +0xec4f2304, +0x705cfc0f, +0xa0363ee5, +0x8f24d780, +0xa6dbb97d, +0x2a18b35f, +0xe5be081e, +0x1163529f, +0x6e392479, +0x0d7946a4, +0xb6263a1e, +0x21769b8e, +0x146f1944, +0x575fa69b, +0xeb4509ee, +0x933171b6, +0xdbb3c1fc, +0xb25c6b68, +0x723ec672, +0x2c0966bc, +0xe27aec37, +0xbac60a29, +0x50746d15, +0xb379a3a8, +0x248f7c5c, +0x8b7d0265, +0xcddb64d8, +0xaf4f523a, +0x89ae76f8, +0x3e6984e2, +0x51a5d396, +0xf461a604, +0xf899d4df, +0x458a88d6, +0x0885e83e, +0x8018167f, +0x9937181a, +0x74eb6087, +0xb0d42cb0, +0x310b51ed, +0xaccf4d95, +0x8851be7e, +0x076324d5, +0xd99536e6, +0x5ccf1638, +0xc448aeae, +0x15eddc05, +0x452ab774, +0x8757a433, +0xe9d288df, +0xe0ecfd7a, +0xab3f1b97, +0x5b4b624e, +0xd79aac03, +0x8a240fde, +0xf3b0dce8, +0xe39ad076, +0x651fcc39, +0x68463985, +0xe3dc49f2, +0x15b10785, +0x17b6dd18, +0x94686780, +0xd69dc8f8, +0x45ffbe50, +0x02f29451, +0x433a274f, +0x238fa902, +0xca46fef5, +0x14c76a68, +0x74b3b65f, +0x5ef9ea08, +0x428ecec1, +0xa85c07c5, +0x05ae9a8e, +0x26f04d16, +0xd3f6bfaf, +0xa7082abd, +0x2e38f3d7, +0x9588bb4d, +0xe2ee0024, +0x329c421f, +0x0fc4e145, +0x5f37999a, +0x1b50c10a, +0x2ce488e5, +0x77d1756e, +0x8b7918bd, +0xb0131e63, +0x3829e45a, +0x1ead1f84, +0xc68428d9, +0xfc3dbef8, +0x1db12597, +0x287f9f4d, +0x61c0f222, +0x6efbc34e, +0x382d4272, +0xda0b5ff1, +0x8db3235d, +0x819c2c35, +0xa6a9b35b, +0x9a75d093, +0x5780fb10, +0x2c9bc469, +0xefb52bbe, +0x3937bc31, +0xcc0095d7, +0x5d4dfc14, +0xf7ceb3c1, +0x5655538b, +0xef0a5a11, +0x2c098641, +0x3bfc97a3, +0xadfd42f5, +0x477ea4c1, +0x93bc0145, +0xb1db1e47, +0xeddd558f, +0x36baab93, +0x945c37b8, +0xa735eda7, +0x49e8c8c4, +0x37ddb4b4, +0x55e1cc90, +0x09ef1af9, +0x739596c8, +0xfd1462e1, +0x32c2734a, +0x7413b58b, +0x518e3de1, +0x21bb2a62, +0x431616ff, +0xc89f4092, +0x437e46f3, +0x2db752ee, +0x1cd88256, +0x602737d7, +0x014a96db, +0x810577e6, +0xc78e113c, +0x49880652, +0x2f6f9e78, +0x9ecba1f7, +0x237f8dbc, +0xcf9134b0, +0x7c79b88f, +0x0d389894, +0xb244304f, +0x93b80b54, +0xa3bc1216, +0xd4d3f23a, +0xc35b1fcc, +0x573a93f8, +0xdf14132b, +0x3a212d65, +0xe45212d5, +0xdd2d5709, +0x3e5d82a3, +0xc9f598a4, +0xbfca5abf, +0x5abe84aa, +0xe19da3bd, +0xd4a29d79, +0x34d3ca68, +0x3bf5a0de, +0xc7cdc3bf, +0x77c6e779, +0xe84b4851, +0x94a38ab9, +0xde9704e1, +0x1651cfc2, +0x40f8d659, +0xf56b8928, +0xbce54655, +0x3fbdd475, +0xd6402c1f, +0xf0ef99ce, +0x73d81ee6, +0xfac3e3a8, +0x011b233a, +0xc0f9335a, +0x8d85493b, +0xf40e4d57, +0x7eb4257e, +0x265727c7, +0xbb6b9546, +0xdf39caf7, +0x1b20624c, +0xafb8c88e, +0xe8621ad8, +0x23eb85ac, +0xb53fcc7f, +0xb5fd2aec, +0xf5a0062c, +0xc0ddf901, +0x80d1ba72, +0x286cd2bc, +0xc9eebca0, +0x140946f7, +0xec9b42de, +0x81c627a4, +0x976c2406, +0xcda5aafa, +0x775579eb, +0xd2a681e1, +0xed897c88, +0xd0e1f118, +0xe51f8cf1, +0xa65654af, +0x037056db, +0x10ce4ba2, +0x02a7a09b, +0xeb81a966, +0x484f6283, +0xbe940208, +0x03098272, +0x270cbf9e, +0x461527f2, +0xde63079e, +0xcfc9bc63, +0x1e67a508, +0xea2ddd01, +0xfc40766b, +0xd7a64fcb, +0xb3aee735, +0xfc5d7f34, +0xac545c9f, +0x6cbb9937, +0x968b389c, +0xe0723b9f, +0x30ed9425, +0xb5752d5f, +0x811324e7, +0x08df1135, +0x38cf84b7, +0xa106211c, +0x4d8fca09, +0x766a87e6, +0x5fff90e3, +0x0bb26296, +0x7f35b7f4, +0x73809f57, +0x50f3ebb0, +0x915c3393, +0x99aabb9b, +0xf3e8a9cd, +0x37c51a8e, +0x78ad5202, +0x177b7ec6, +0xd9ef4fa4, +0xf334f441, +0x3d52b31a, +0xf6002e7d, +0x10dd0374, +0xe10e1757, +0xbe55ab1b, +0xd8c0b3d8, +0xcbb49736, +0x155bc8a7, +0xac979f47, +0xd89e8727, +0x52f09ff1, +0x24a704b7, +0x3a1b9cd3, +0x9127c16d, +0x5fee958b, +0xf1eddf7e, +0x943921c5, +0x17312c12, +0x393632a6, +0x0f95a39f, +0x2dfca5b8, +0x43d7df73, +0xe3b30f99, +0x70cddce7, +0xce337b82, +0x3b77c94b, +0xdf6dfd6a, +0x95524f06, +0x231aac1c, +0x27f0ce33, +0xcc1ee59b, +0x3476ead2, +0x354f22dc, +0x7a6aa57e, +0xc01d4564, +0x1226d7f0, +0x63bc7bb1, +0xb1f14215, +0x425c5692, +0x9306eb74, +0xd4a3566b, +0x54ec988e, +0x6671d396, +0xeb624432, +0x0e3891fa, +0x2f3d63e3, +0x4a8f129c, +0x45acfa3d, +0x930441a3, +0x91c788eb, +0xbbc492b9, +0x5f2c167f, +0xf6a011d3, +0xc1f0b2df, +0x12dfb209, +0xfbe147da, +0xe5bc320b, +0x8d65dbac, +0x3768b6b6, +0xf17feb9b, +0x2d5af967, +0x0bc61d36, +0x85c88d93, +0x602f7e82, +0x162f6c71, +0x67fe9800, +0x146f439f, +0x67716b5c, +0x61f56df3, +0xaaec3487, +0xdc938e1c, +0x9e6b8f4b, +0x4e211cdf, +0x3cbc4dac, +0x76c2e6a2, +0xc7757122, +0x959b5546, +0x9defab96, +0x265e4c78, +0xb1352475, +0xf5c1b81e, +0xb68af323, +0x52a29dab, +0x1822c9a0, +0x4ea43b53, +0x73a44069, +0xf8344709, +0x2cd481e1, +0xd87a53d2, +0xf83f2b2e, +0x5d85b205, +0x1f61fbc3, +0xfb71ecb1, +0x0ef345e1, +0x9fe1acbd, +0x0e870cae, +0x8263529f, +0xb0f34ef8, +0x781054ff, +0xa2379fca, +0xbac3468c, +0xa5571951, +0xbd1dd04c, +0xec44f59e, +0xf7272ab2, +0xe29d0d6b, +0x7c33caf5, +0x56d9a3e4, +0x6e32a7d5, +0x6b02bac6, +0x034783a9, +0xc38a80d2, +0xf9857c4c, +0x59f4f6d7, +0xc9e29b4f, +0xc9da77b9, +0xf1037f15, +0x7e125974, +0xaf01e6ef, +0x9f5fea48, +0xd4d28d4c, +0xb650c86a, +0x0cbea545, +0x1bec5ec9, +0x14d56305, +0x7c7739ef, +0xbd0327cf, +0xf5fcf2d0, +0xde51a290, +0xeccffbf1, +0x049acb2c, +0x7f74c1e4, +0xce9e5785, +0xa9318011, +0x460d3572, +0x475617c6, +0x60964456, +0x7b7dcca1, +0x81474dfc, +0xd4ea88d2, +0xeed235f5, +0xcf1c2368, +0xc2819ccc, +0xbb67f851, +0x814bb4bf, +0x152ef4e2, +0xec9b7caa, +0xc02606c2, +0xc601b536, +0xad54154c, +0xebb1d365, +0x4e327cbd, +0x732b8613, +0x86e3de24, +0xdcf5bfc5, +0x272befd9, +0xa8e5faaa, +0xa77f3883, +0x95a87c56, +0xa5f5f909, +0x3f0d32eb, +0x4585f31c, +0xdc7748e3, +0x37490a8a, +0xfa8fbe10, +0xf925db81, +0x8d58b780, +0xa45ce466, +0x180d8a17, +0x4cc4af6c, +0x059f38e6, +0x29dff1c0, +0x23469b80, +0x55fad0f6, +0x91e39e9c, +0x6f8ca2aa, +0x579f14f0, +0x8a203a26, +0xf878ef23, +0xa6d02b0e, +0xd24ee9e3, +0x35148411, +0xab9adff9, +0xa6cd1651, +0x4b45bbfb, +0x8faf8e7b, +0x4c234b95, +0x3d0e5c0f, +0x1ab6b3be, +0xcf350a91, +0x2b1fa42f, +0xd54e363e, +0x73eefb13, +0x772e03cd, +0xb5fd90e6, +0x0fc95553, +0xe796ede0, +0x7f35d3dd, +0x9b13e59d, +0xfd10d8df, +0x02506948, +0x9a6ca113, +0x3de0b6a9, +0xe4f6c5e8, +0xdc72b5fd, +0x46557146, +0xca1652fb, +0x2542ab95, +0xa43b0b79, +0x6a05b310, +0x391bc5f6, +0xa943e0f8, +0x687fa463, +0x37029ac2, +0x83d398d3, +0x3d093d0f, +0xea86f3d2, +0xac901b85, +0xdc8d93c1, +0x8bd24799, +0x5a952e38, +0x2c149cab, +0x05f65fd5, +0x56269e16, +0x7eb5b110, +0x9d8b6d44, +0xaad9c998, +0x65127da1, +0x65e0c1a9, +0x0eac5ba8, +0xfc61b66a, +0x3e17ea4c, +0x5c2e2ce3, +0xd830c266, +0xa3eed9d5, +0x3d3ae8fc, +0x993fa7a4, +0x837e8e13, +0xbb9da780, +0x04424ffa, +0x57267664, +0x37225356, +0xa86228b3, +0xb7406f68, +0xf0331a3b, +0x09b18589, +0x4a98a7ac, +0x0c986897, +0x5e2f4026, +0x85c26c58, +0x6eb0cfbb, +0xdcc3b384, +0x5e153d03, +0xf67a2417, +0xf542283e, +0x29802274, +0xc3757ff5, +0x816f7827, +0xee8a65e5, +0x650385a0, +0x7ff834db, +0x35d8b1af, +0x3038b2f9, +0x7852d01a, +0xdab41808, +0x575db996, +0xa53c7848, +0x0fce4d4f, +0x71f796ab, +0xb0dab97f, +0x9052cc07, +0x68ae7bec, +0xd641bf66, +0x396907d3, +0x316b6851, +0xd51a4932, +0x95f23eb2, +0x63fcde63, +0x9d462dd9, +0x42a4e932, +0xa76b49fe, +0xee3db276, +0xd4a568bb, +0x60a1b774, +0x03cfae3d, +0x15c485a8, +0xc310725a, +0xbf1c8941, +0xa5530373, +0xdc195911, +0x055e9a34, +0x5d2bdf86, +0x0fecc80d, +0x4361988c, +0xfe8726fd, +0x5fa52b9e, +0x314ab393, +0xc24e4d1b, +0x6bca70e3, +0x73a61cad, +0x4164c82c, +0xd3b4ddfa, +0x9bff601d, +0xc7f60d0f, +0x73ffbfbb, +0x4e447abe, +0x0c29282c, +0x18eaf4c9, +0x8bf8d5c0, +0x9cdbc830, +0x6a05c572, +0x8cb7f9cf, +0xbea637f8, +0x1cabd285, +0x78b6ea30, +0xc1aa0a63, +0x35c952cb, +0xde72be92, +0xfb67e486, +0x960eb266, +0x116b2d3e, +0xe6651b8b, +0x06f88fb8, +0x950c10b9, +0x3e08ecfc, +0xc06ff515, +0xbb45cb4d, +0xae76fe5d, +0x44d992e4, +0x21485e92, +0x5379c4cd, +0xd1aa8b2c, +0x8eb24b93, +0x2efb4004, +0x8ccab7c1, +0x78df71c1, +0x3a712f42, +0x2f383b96, +0xb9cd32a9, +0xcd2120ff, +0xbae869d9, +0x23398e7f, +0xca7e752a, +0x27f9b7e9, +0xcd50fab5, +0x87480e9f, +0x009bebb8, +0x8d198af9, +0x209e2f4e, +0xcb34de50, +0xb33a36ff, +0xc7f32190, +0xa2bbf37a, +0xdd045244, +0x23f692a6, +0x4adb4663, +0xae5c7012, +0x5f590ad2, +0x9de3a46a, +0xe571ec72, +0x1007e5d7, +0xc9ff35a2, +0x5aa44e45, +0xab824f4a, +0xe57f0e6e, +0xf6212460, +0xa2d1ecf2, +0xf14ccad6, +0x8b752b50, +0x9e53f79a, +0xf0c856ac, +0x17880fac, +0x2543c45f, +0x4e730ddd, +0x5e49e26d, +0x1e81aac0, +0x2c4ab688, +0xa013a547, +0xc81e1627, +0xed44f8a3, +0x35d77f9b, +0x2c603121, +0xb96ed04d, +0xef616eba, +0xb19dd3c0, +0x6e0d8205, +0x6553b562, +0xf0dc4a7b, +0xa8f5904e, +0x83fdd5c7, +0xddf4a7d8, +0xe38733a4, +0x5b1cd30f, +0x64386feb, +0xe1b107ad, +0x406fe2dd, +0x6b6b28c0, +0xd7e07bc0, +0x4ed34d40, +0x771a34af, +0xfd6b3a60, +0x7123a384, +0xf24c462b, +0xaee69bcd, +0x709f53ae, +0x3ca57364, +0x90100ffe, +0x92281ef9, +0x9f47769d, +0x4e81e4b1, +0x5a781050, +0x487260a6, +0x0fb34873, +0x76915abf, +0x45e00d30, +0xced094ef, +0x2c304556, +0xbd92066c, +0x37528e19, +0x7a1708d5, +0x9fbc2088, +0x7f0fadd1, +0xfe303755, +0x6995135e, +0x26d9d682, +0x3b5cc98f, +0x83aae747, +0x55e2a2da, +0x9bd1d4d3, +0x564f5351, +0xac6e527e, +0xcfe67536, +0x3f2f4761, +0xfc69fd89, +0x47779121, +0x4c64ddfa, +0x63d5a815, +0x248223d6, +0x93faaa0b, +0x3f997c2f, +0x442de58c, +0xdb7a5d69, +0x262a8d13, +0x4dd4339b, +0x11158d1e, +0x3ad54e78, +0xa72e54d0, +0x8e56bdb6, +0xdd871c52, +0x09da1873, +0x9c1a1f65, +0x4b982e3a, +0x71d74f1b, +0x3ec00cc3, +0x3185cb8d, +0x513d3d80, +0xfe5fcb24, +0x0bb1d548, +0xfa4e5cac, +0x610d4724, +0x7c9fd569, +0x613a5711, +0x71431931, +0x587b2863, +0x28807cf6, +0x616617a0, +0xd1093306, +0x4004a3ea, +0xd85df682, +0xb8aef824, +0xbcfce1ce, +0xf3d21745, +0x29bbcbf4, +0x12c5bc75, +0xa6833ec1, +0x3d1ad9bd, +0xd40c07f4, +0xd0ca387a, +0xc1bc7130, +0x5fddbbf6, +0xec42fd5f, +0xadfced15, +0xd248bb99, +0x31a825cd, +0x98a7c90d, +0x7b247861, +0x8647677c, +0xf92878b9, +0xeb6d9982, +0x150b46e3, +0xcd22b76d, +0x4d8d9e73, +0x76c8d1ca, +0x1ab1ef79, +0xdaa59685, +0xf0addcb9, +0x7b395040, +0xa2aed7f7, +0xbe73e7a6, +0xef0443b4, +0x7e0df3d9, +0xa4a59ec6, +0xb0d8d784, +0x09884c43, +0x0776042e, +0x073f3fb4, +0xafc81d4d, +0x07a49212, +0x32c75278, +0x0cfbfedc, +0x4821728a, +0xf82fec45, +0xafadffa6, +0x7f308aed, +0xa105fbd7, +0x0ba0b398, +0xf8ec5bfa, +0x7dbe1168, +0x3823c399, +0x00e93336, +0xe320b595, +0x601b76de, +0x0892f52d, +0xb3f643d9, +0xb7334643, +0xbf36cee4, +0x119228a8, +0x2661ade6, +0xdf7e311d, +0xc91cf4eb, +0xf45ae1cc, +0x328e00c9, +0xd67f154e, +0x4d9be090, +0x8c81b990, +0x1fab7b2c, +0x59f9a498, +0xf0e66283, +0xb023a9c2, +0x6442d930, +0x50607bd9, +0xc2175e51, +0x012d2194, +0xaa118e75, +0x9a7465df, +0xdbf8f318, +0x3cff4d50, +0x552b0f0b, +0x263f36bc, +0x031f82d6, +0x8bc81d34, +0xe2f0420e, +0x93c759c4, +0x36edcfa8, +0xb3b29fa8, +0x066405d1, +0xbe4b467a, +0x70d2cbfc, +0x72f39751, +0xbe21a194, +0xaab42863, +0x6a79e9b9, +0xce38f829, +0x532e97cb, +0x71ce6744, +0x85e8b877, +0x96d50676, +0x51a3770e, +0xfb8e5197, +0xe6ab4e7c, +0xb448b3df, +0x520ad283, +0x8e3898ca, +0x10b9e60c, +0x03ea34c5, +0x8a149f0f, +0xb0b21c64, +0xa79dd906, +0xbce70a9e, +0xc2239336, +0x65d4873f, +0xf2306d5b, +0x15049573, +0x44f12880, +0x9a7bacb3, +0xce9706d7, +0xfac65bed, +0xb91427a4, +0xf8d889d7, +0xcc253a8b, +0x2bec79d4, +0x7a8378c7, +0x0449fcd7, +0x5a871e11, +0x8b990d09, +0x5ba4df9f, +0xf77e201a, +0x2af9f47a, +0x659ef04e, +0x1d3cc60f, +0x0eb61285, +0xd2b8d34f, +0xc9cbe278, +0xc789b25f, +0x9ad83523, +0x38c82e34, +0x48a12da2, +0x27dae6b4, +0x22ec12eb, +0xb19bc085, +0x781e83a4, +0x00754446, +0x0062aa87, +0x28d02ac3, +0xb52ac6df, +0xa497fa71, +0x60206204, +0xa516dca3, +0xb474b152, +0xbfeb8b45, +0x7d9eacff, +0xcc3dc349, +0xeb385804, +0xea1a0733, +0x16a7bc64, +0xf1d83576, +0x728a091a, +0x3089d80c, +0x58b3439d, +0xede690ed, +0x87797316, +0x1f8fb673, +0x7150fdc7, +0xdae62458, +0x8ae61ecf, +0x6ee3db67, +0x17edcba3, +0x1e0f339e, +0x8cdd15a4, +0xfa38de2c, +0x381a8bea, +0x38c25a43, +0x950c1565, +0x38a9a1d6, +0x04b80d53, +0xaf6e7b66, +0xc03a2b6b, +0x8cd717d3, +0x71f3ef14, +0xbf4d3833, +0xcd9a42cd, +0xee5f72a9, +0xe778f9ef, +0xab87168c, +0xcd17b9c8, +0x3331e94a, +0xd72f95f2, +0x0a0cd8f3, +0x76dd1e04, +0x1876a267, +0xfcbe6056, +0x75a90a1a, +0x857e1e77, +0x8d0eeef8, +0x1201f8e2, +0xcbbb2cc1, +0x52c82e5b, +0x0f65fb92, +0x1684d77e, +0xd17c9243, +0xda8d530d, +0x4a9653bb, +0xf6111f06, +0x5ac4f788, +0xe3edc252, +0x767c1a52, +0xb03cd3fb, +0xb5074077, +0xf26999c9, +0x83e51a06, +0xb49db1f5, +0x03fcabde, +0x8bdd12be, +0x94b6be0b, +0x86a097a9, +0xc42adfa5, +0x36954f74, +0xc65e1f28, +0x10d962b5, +0x5797ec19, +0x8e4a62b4, +0x915e3bb3, +0x6a012413, +0xe89f3a9a, +0xf2362f04, +0x3ec11c18, +0x42d8d24e, +0xa33a4dea, +0xcbd10460, +0x3ad83636, +0xd202b321, +0x2e8990b8, +0x8f05b04f, +0x1b989813, +0x4247817d, +0x499da9e8, +0x33991e86, +0x558491b1, +0x894d42b4, +0x8b34374d, +0x31209b03, +0x13744d1d, +0xe2412f2f, +0xbeddd4a5, +0xe52f990e, +0xaf877f16, +0x7d3990be, +0x22bffc5a, +0x27d21ebc, +0x26e505e9, +0x9c7b58d9, +0xdecae562, +0xd7085621, +0x33299d65, +0x2f42fa7c, +0xe4bb25b7, +0xe5189989, +0x58beb98b, +0xcd318474, +0x1c40a2c1, +0xc707d783, +0x6c64dd47, +0xf7a8e168, +0xa698ef61, +0x5ba8a921, +0xfae6c07e, +0x0868647c, +0x75e97e7e, +0x827d37ef, +0xc2f84a4e, +0x2d7d68e8, +0xdca40707, +0x37cadd71, +0x8a76b93a, +0x6736a551, +0x3715df20, +0xaa330e1f, +0xa170f417, +0x4b94c949, +0x5912feb1, +0x44dae728, +0x3b5c41f4, +0xb6e91a61, +0xd980946d, +0xe97e9f9b, +0x04458410, +0x55acd802, +0x6d82f132, +0x327316a5, +0xa07f4501, +0x6798ef57, +0xc3ff6936, +0x1ee9d396, +0x49068068, +0xcef10100, +0x0b7d54b2, +0x489fa11d, +0x9f1c8be3, +0x4848c68c, +0xd20c59f3, +0x5d424e0b, +0x4e142a7d, +0xf4667207, +0x9afa5994, +0x8d3a3b39, +0xf8e41053, +0x1042c5ea, +0x4c53cb1e, +0x5d7e8e53, +0x13889ad2, +0xcab52ba2, +0xc9e5233f, +0x901bd877, +0xb641e7c2, +0x276becac, +0x19f489f6, +0xc16482ee, +0x0be0b28f, +0xa8306597, +0x49b7b4a1, +0x9b2643de, +0xa5f1ad1d, +0x333aebfb, +0x07a8b83a, +0x1b5fa602, +0x4ef2674c, +0x6e207a8c, +0xf8caa7b7, +0xa86aeedd, +0x5d543443, +0xc650bedd, +0x8ce7b4df, +0x60d1733d, +0x8ab41a1f, +0x777be452, +0xf383afae, +0x41abd6cc, +0xda6f3f1f, +0x7396205e, +0x98b0bf1e, +0xbad031a1, +0xd49cb708, +0xb72d8aba, +0x8c43f396, +0x6f5b1c24, +0x6ce9a577, +0xae5386ee, +0x11bb3b32, +0x1c1e4bca, +0x08d2265f, +0xf1dd71d0, +0x847e6183, +0xd8069e84, +0x47c425c1, +0xc73e9fbe, +0x5cfbe3bd, +0xb7462300, +0x8a70e6de, +0x84eb0bfd, +0x0d6d2fce, +0x8894c892, +0x5d925813, +0x39115909, +0x90e05acb, +0x8e39444e, +0x411c4961, +0x968f3613, +0x4d22e729, +0xf9cfb47f, +0xbbe3bdec, +0xce7090e7, +0x1c457555, +0xfdd9585b, +0x4c484e78, +0xb808b06b, +0x41ce1df2, +0x4e87df1a, +0x329f3492, +0x1474f207, +0x6bc30f2d, +0xe9c02cca, +0x23c9c774, +0x98757648, +0x1cb10a69, +0x0d3d7607, +0x7e8d815d, +0x0a5b723e, +0xb3150c49, +0x6baed342, +0xa838137b, +0x0780a28d, +0x4fcea5f2, +0xc8df3747, +0xcc43662c, +0x01d18f68, +0xc7b79939, +0xa71b30de, +0xb748ba58, +0xa8881555, +0x25247e28, +0x6c0fbd15, +0x71f7330a, +0x5b141b9e, +0xc5d51127, +0x1763c14f, +0x018420da, +0xa82790f2, +0x599b94fc, +0xaebd7ce0, +0x9c7657ae, +0x13b68f44, +0x080e6420, +0x32ea0a52, +0x67f93eec, +0xc2410579, +0xc63ec24b, +0xc6ff7654, +0x7b58632c, +0xeb31b9ae, +0x20f1f5af, +0xe1723cd1, +0x12bf32af, +0xa2e31892, +0x195d09ae, +0x8d03f840, +0xbc34d24c, +0xddc5d583, +0x45c32065, +0x8fca26bf, +0xc8973efc, +0x2b7862e3, +0xcff3e41c, +0xb6e49c6a, +0x50896375, +0xcb6ec3df, +0xc602328a, +0x842b4470, +0xdcc44221, +0x01140c32, +0x8935076a, +0x2a4fb9dc, +0x825c30a8, +0xd377c83e, +0x2299ecbd, +0x89e0b402, +0xa8639ed6, +0xea3cefba, +0x589b42e5, +0x4223a3be, +0xc6d0f9c6, +0xed710a9a, +0x9a0535ac, +0x09f02f44, +0x257aa1f8, +0x4fe79a2d, +0x06f9c237, +0xb76cff79, +0xf1cd61e7, +0x226f5047, +0xb2015036, +0x3d88c1b9, +0xccd74dcc, +0x7f4492bd, +0xb62e3406, +0xae8f45c9, +0x248b8bb6, +0x13ce2f0c, +0x79f274d7, +0x7b872a32, +0x6d1a44a1, +0x74bd13e5, +0x97491738, +0xe7ee6196, +0x0b3f3201, +0xd95639ae, +0x3b923cfd, +0x4faa514a, +0x63311478, +0x367c58ed, +0x14629b04, +0x18f58d2c, +0x56806527, +0xe98a8a02, +0x07e41e72, +0x34f0448f, +0x01ff8084, +0x8b6fc287, +0x87f09bb0, +0x0f7472d4, +0xe0c3ddb1, +0xcd5a6ffd, +0x3e4810b2, +0x88f61a6d, +0xc2493e60, +0x1ce167c3, +0x9d5df1ed, +0xbef00450, +0x36c3c879, +0x0124332f, +0xf057da7a, +0x2dcdf28d, +0x788f036a, +0x87a48d5b, +0x9415a95c, +0xa02d33fa, +0x35dd2c92, +0x5cfce2ea, +0x94e67065, +0x547e8873, +0xfd4c35f8, +0xbac97e6e, +0x1e62d4ba, +0x017508d4, +0x5bbfae45, +0xcfd9ab24, +0x611d443b, +0x72a53406, +0xc8d8e73c, +0xa8b14ed8, +0xfce87959, +0xfbe8b5ed, +0x5844e6f9, +0xc3ffc964, +0x9ea5d041, +0xe616d35a, +0x9e45aa60, +0x06d7d44d, +0x4ee6fe4a, +0xa6900255, +0xd8d42bcf, +0xd721d840, +0x875aa748, +0x25b70ed5, +0x1c713d08, +0xe82bc273, +0xd69a0450, +0xcc5e8eb0, +0xeb91eaed, +0xec8aceeb, +0xcab932a8, +0x10dd9213, +0x7ac3263c, +0xbe584e91, +0x5aa80275, +0x7561fcf5, +0x12cd1fce, +0xad6746c8, +0x8f9a43e5, +0x4ff631e1, +0x9bc46c6a, +0xcc6dab14, +0x07274f12, +0xc7887fdc, +0xb8bb4d0a, +0xbd6e4cb6, +0x8e6ec4d2, +0xb5358af2, +0xf89f9dee, +0x95fb9000, +0x8bbb88ae, +0x4fc9dd04, +0x9697bcfd, +0x5c1910cf, +0xcf6d6c37, +0x03011fb8, +0x4a99712c, +0x3b1834e4, +0xa59e8139, +0x50f86b97, +0xdd8c5edf, +0xe12623bf, +0x83108129, +0x568deb00, +0x4a69f71e, +0x655839b9, +0xb874e782, +0xb0969c7d, +0x6c35c66d, +0xa02baaac, +0xe7c2e9ca, +0xc2358fe1, +0x3f711020, +0xa34296d0, +0x3e913e48, +0xd039c35a, +0x0debcb77, +0xd3daa5fa, +0xeaa8cd84, +0xaaa2db0f, +0xdb6478c0, +0xd367d97e, +0x86db3aae, +0xacbdd713, +0x9731198d, +0xb7c78ed8, +0x6c69d64e, +0xec1225d0, +0x4bde1074, +0xd438088a, +0x66662197, +0xc7b207a9, +0x311a5755, +0x800676c1, +0xbe5dd070, +0xd2c02468, +0x573daba3, +0x4f08397d, +0x88551dd2, +0x543ff572, +0xc39d8d6e, +0x25e8a6b7, +0x797f0886, +0xf8615350, +0x6a23224e, +0x94116ae3, +0x38416366, +0x701a5531, +0xa69889e0, +0x7e836171, +0x4632a982, +0x2cda18da, +0x65966ce8, +0xf401c873, +0xb6ef7333, +0x63e7d46b, +0x6608fe0a, +0x7e7643ff, +0x950314dd, +0xbdbe2a95, +0x0a5dc6ae, +0x0ec20297, +0x4fe1daa4, +0x8438f911, +0x5af3c989, +0xc7e49e9e, +0x9439193f, +0x7463598c, +0x27fb39fe, +0x06433a87, +0xfc2677e0, +0xa2eca25f, +0xa6797865, +0x827320ef, +0x3e280060, +0xf70079c1, +0x8d348a59, +0xf4cb6c94, +0xaa4736b4, +0x6575b7e5, +0x0acd4d07, +0x1fd50b6c, +0xb53302f3, +0xc182109f, +0x628eeb3f, +0xd7fe223a, +0x38ed208a, +0xd3c7ac8e, +0xf49862d0, +0x15d2e43c, +0x674f7186, +0x2546f434, +0x400583e1, +0x8deaf32d, +0x3ae82a8e, +0xfe8566f1, +0x08785587, +0xc02ac80b, +0x5276e8a3, +0x3c2f6c2d, +0xcf91b889, +0x4a787428, +0xdee0fc2f, +0x75f06447, +0xdd15944f, +0x512df7b1, +0x6e9590d6, +0x939a8b95, +0x7e6806c8, +0x3a3eb633, +0xb4cb3008, +0xd7a68b9a, +0x07957342, +0x3f7fc202, +0xc7fc6a75, +0x4dae1ec7, +0x5dede562, +0x12048ef1, +0x2e34b119, +0x6b75cab3, +0x6b60b66f, +0x584c953d, +0x402f5e03, +0x211bbe2f, +0x9e55498d, +0xeb65b7ed, +0x46526f4a, +0x6720b4e8, +0xe40d97c0, +0xa6792f75, +0x05656d1c, +0x8d6fbe17, +0x8f1f9f9f, +0x53286196, +0xfe15b9d4, +0x2ff54b2c, +0x2b4333ee, +0x5440fd56, +0xafad5bc6, +0xe862f00e, +0x2a8ceed3, +0x21b0c439, +0xc54b7052, +0x21264a60, +0x4f91cc81, +0x5497b732, +0x60e50b6e, +0xe9028762, +0x12a28b40, +0x7c4dd461, +0xd431ca94, +0x0ee79f47, +0x17f92c8b, +0xfb839dd3, +0xc9f186b1, +0x38f90545, +0xe05b7583, +0xa49d1e4e, +0xb53a6e25, +0xdcab9994, +0xdf19c6f7, +0x2c89a116, +0x339a7084, +0xbbfa8d04, +0x9f38be61, +0xfaa8965e, +0x380c3649, +0xb39cb649, +0x6498df43, +0xcaf9607a, +0x8be82000, +0xb1725e3a, +0x6b3c52fe, +0x31c9da5c, +0xfdb1dcba, +0x4a6a4225, +0x73b42190, +0xf6feca59, +0x919b0d23, +0x497c9ec0, +0x9e8ec973, +0xf20c9ed4, +0x60bc5a0b, +0x63f6d452, +0x10435001, +0x54077d66, +0x42925d8b, +0x60afd3ba, +0xda0dac1b, +0x79e7f9af, +0x03831641, +0x850caf6c, +0x9fc54d17, +0x0463fbde, +0xb54fe1ec, +0xcf86fa23, +0x951cd659, +0xf89e3ae9, +0x43fef07e, +0x791d3c96, +0xd2dd64d5, +0x3e6d4fba, +0x3333dbc3, +0x827481a5, +0x71841541, +0xbc313379, +0x912d3401, +0x412ed283, +0x74b0b588, +0xd789758a, +0x658617eb, +0xc9ec6968, +0x421270fb, +0x96e69dbb, +0x7cd6413d, +0xca9f3863, +0xff73f292, +0x6c149530, +0xd2157769, +0xfef63869, +0x0ab34e3e, +0xe6b6855a, +0x05bdb180, +0xb7105a0e, +0xfd2580f3, +0x1286d4c1, +0x22bc6523, +0x17a7ed92, +0xb59ef3d2, +0x7a7c49fc, +0xd22aadff, +0x3af7b9ad, +0x2e9b300f, +0x203f5957, +0xba5e287e, +0x64301155, +0x86a13178, +0x60a35542, +0xc5acf21f, +0xb06bfccc, +0xbde75452, +0xdd47ba67, +0x41a6c100, +0xa41325cb, +0xc70b824b, +0x2cfd0efa, +0x9130badb, +0xf1704459, +0x5c674912, +0xef294d2f, +0xbbbd3ae0, +0xc8e10815, +0x0e1e5909, +0xad504588, +0xb0c7ce9f, +0xf7203326, +0x84827336, +0x0fcf1619, +0x677b2d29, +0x5d53ebc4, +0xe9766f65, +0xccafb540, +0xce72c04c, +0xacf5e2d4, +0x54ffc12a, +0x9e9eda7b, +0x3b6de1c5, +0x8ef8cf43, +0x2756357a, +0x7e0ea14c, +0x9878eb0b, +0x6980b0ec, +0xb6ab4776, +0x4caffcb6, +0x6fedc866, +0x41e3ccca, +0xcdff2775, +0x3e7e9041, +0x15ac0b60, +0x105da7b6, +0x7822a4ed, +0x96f363b4, +0x71f354f5, +0x36b5e9aa, +0x65d26d2d, +0xf52cb4cb, +0x9996779a, +0x5f513de5, +0xb9fe2c44, +0xe664c502, +0x45a74b75, +0x174d3c4e, +0x6d168133, +0x4023638e, +0x897993a5, +0x4c406d44, +0xaaaf8c97, +0x694ad7de, +0x836fc0d8, +0xf8a7658d, +0x80661f86, +0xf204b0c5, +0x90fb2bb1, +0xd531e0dd, +0xe3a56144, +0xddf4fdab, +0x5fafe9de, +0x944fd5ef, +0xa47bae7e, +0x0225b4bf, +0x38d04b07, +0xee3f273d, +0xc26d1c9e, +0x2fbe1381, +0xc0538c47, +0x1761bb7e, +0x5949ddbe, +0x87508cde, +0xe182ca1d, +0x973b3b5e, +0x4c863769, +0x2774bd73, +0xd231828d, +0xea69abe3, +0x9d47583d, +0x8c69148c, +0xf4fd7ca2, +0x450f3746, +0x190a118c, +0x135570c8, +0xdca74667, +0xb4d52898, +0xe92263ef, +0x045e2587, +0x5372d74f, +0x24e379d9, +0x89e977ac, +0xbcd49b2a, +0x51cde993, +0xef193870, +0x62d1d62c, +0x6e4bbbfa, +0xf60a6b5d, +0xab87735a, +0xbdc18754, +0x7e9b5db7, +0xd7125778, +0x979aa459, +0xc32ca986, +0xf4f86552, +0x9a9fed69, +0x3e65edcd, +0x4b9274e9, +0x7a555667, +0xa0908a1e, +0x1c4f9a38, +0x85fd9c72, +0x9d43cdd8, +0x176a4d40, +0xd58abfd4, +0xe3e87199, +0x87691cfc, +0x995e7eea, +0x2c8b2007, +0x9c0ef9ce, +0x3736f239, +0x7f5ce82a, +0xeff43222, +0xfb36a393, +0xc46879da, +0x4668fbb4, +0xe66d8b56, +0x54f66bb4, +0x495b0bc3, +0xa0f0989d, +0xd2905e61, +0xea1ddbba, +0xccb1ee10, +0xebd3d4ae, +0xf3b6f842, +0x6e54ef28, +0x39e4f417, +0xbfe2ab53, +0xc574fbaa, +0x0d4d5ddf, +0x83be0c4a, +0xb7b60364, +0x44973a50, +0x471cf9e9, +0x2ee134fb, +0x0695c1d7, +0x02a8abe0, +0xe240925e, +0x976c1278, +0xf364467b, +0x98ac2f98, +0x4cfdb0d4, +0x3f37a14d, +0xbdb51799, +0xc973e9dc, +0xf67e33f4, +0xc4126569, +0x50d0648f, +0x2709f97d, +0x59f88059, +0x0b4e3f8b, +0x76f77865, +0x3b29659a, +0x99b4192b, +0xea3ea7a2, +0x6689362a, +0x94aaf52f, +0x4f7816bc, +0x5bd3b6fa, +0x3e6f966f, +0x1ea01a14, +0x387cf9e9, +0xb117d15c, +0xfe631f3d, +0x8807fa04, +0x19c074ae, +0x532e7c3b, +0xbd9f3324, +0x8ad1a1c1, +0xeef8d052, +0x486a0d89, +0xefea1b32, +0xb1d31417, +0xc8e70589, +0x3f90a93e, +0xfcb48275, +0xe94079af, +0xc5658ad8, +0xee7d53ef, +0x04077313, +0x93740bd7, +0x0ba93e53, +0xee3ff795, +0x5261f434, +0xc615aaeb, +0xf207173b, +0x6507d914, +0x7cb5ef4b, +0x58100765, +0x2479072d, +0xed356ed6, +0x3f74d306, +0x44703c95, +0xb213b339, +0x70fefd04, +0xc5ca278f, +0x2d231120, +0x54b2ba30, +0x19ea60bf, +0x0ca6c9af, +0xabd03c11, +0x570e6d51, +0x7916cd1b, +0x730fb1b5, +0xf4e967f0, +0xe6c9e1ae, +0x6756f110, +0x8c76b12f, +0x642f86e5, +0x935b6374, +0xa889001d, +0x6c4beda3, +0xd5e6ae66, +0x61c51292, +0xc169d815, +0x73b33248, +0x5ba5562e, +0x71eb23a4, +0x5d0efe75, +0x88e43a81, +0x0fe83380, +0xbc5bd3b1, +0x1c82f136, +0xc7e8cac2, +0x6ef8ff4b, +0x5aaf0147, +0xc740e24a, +0xbd430211, +0xcbbb2c27, +0x385c830f, +0xf1ae0cab, +0xb038ece9, +0x58090ae4, +0x0b8b2d0d, +0x9df78d6a, +0x70772553, +0x5a381ee7, +0xa84e286d, +0xc8ce9313, +0xd723f0be, +0xbf2fd68c, +0x7aa22b74, +0x01b1e388, +0x9be3332b, +0x48f1441b, +0xfa8c7550, +0x23fab348, +0x1b68a3b4, +0x1f3ae2d2, +0x0d6c0464, +0x818c1b76, +0x38e8c655, +0x59eec370, +0x6495dc1c, +0x4ce65939, +0x7ad381d9, +0xfe2320db, +0xb7719929, +0x1615822f, +0x5fe62653, +0x2c046080, +0x12b0f3cb, +0x765304a5, +0x67a392f8, +0xabd82380, +0xa053bfec, +0x5ed950b4, +0xdb061842, +0xd9c34177, +0x5a139a0d, +0xc1c1153f, +0xa7660f28, +0xb3542045, +0xfc74a991, +0x9801becd, +0x5b7ef9b1, +0x3c7b26c8, +0x60aff850, +0xcf725170, +0xbfd58db2, +0x4e3b8045, +0x379b022b, +0xe4938c13, +0x3c44f18c, +0xbc39a939, +0x3a34111b, +0xa064e7f1, +0x818180dc, +0x2b7f3bb5, +0xc980a552, +0x9c5320f7, +0x94c3209d, +0xe7d35ffe, +0x4c2c7012, +0xb83f40d4, +0x42ee0fc4, +0xfe2b8142, +0xe0a64391, +0x4a4c353b, +0x75074f6b, +0xff975401, +0x289e0219, +0x7339813c, +0x284f48c0, +0xf3e3c172, +0x8210797b, +0xdc046422, +0x1c7e5662, +0xae0f99fb, +0x5f75fe29, +0xa5a482c7, +0x51cd9a1b, +0x7387e098, +0x7069a37f, +0xcf6ed2f4, +0xd90fff33, +0x807a68c1, +0x8d036dd4, +0x659da88d, +0x16ae948f, +0xd7bc6d6f, +0xc96d64cb, +0x88130d33, +0x4c0a80cf, +0x150f2ed4, +0xae5a6324, +0xe1f7feb1, +0xa8f70c3c, +0xca08f568, +0xc061d8b5, +0xfa79b1a4, +0xfffc2fd4, +0x22970cfe, +0x3662c252, +0x94d97adb, +0x1a29f9c7, +0x28c9890f, +0x8ca8a11a, +0x9bea92b8, +0x6a556acf, +0xb5b3955f, +0x5460ed5d, +0xc9b8b695, +0x7501fa4d, +0x44bf4078, +0x76411424, +0xace6b2a9, +0x3135a223, +0xc2f1e0cb, +0xe8402bb7, +0x915ba0bf, +0x9a8caa90, +0x395813ee, +0x18ce73ef, +0xdb87d6ea, +0xc9a7757c, +0xe44335a6, +0x6446fb9f, +0x23cd0dc9, +0xa247b25f, +0xb6c0def3, +0x3f77a7f3, +0x9952d4ec, +0x4f55d7cc, +0x060c79ac, +0xb1477b07, +0xbba99084, +0x6a2366da, +0xf0e1dd02, +0x9ae26c3a, +0xb35cebed, +0x3dbacd41, +0x239a8c86, +0xc4b78732, +0x2a30ff14, +0xc40bca19, +0xe0388ab3, +0xe17adc92, +0x06590be7, +0x65e83d38, +0xe298674e, +0x90c9bbd9, +0xbbf26462, +0x62eb7389, +0x1c1ca10a, +0x4942bd0a, +0x7dc198af, +0x44e5972d, +0x88e1d6de, +0x1fd88c7c, +0xc4e812ad, +0x0960b678, +0x57a483bc, +0x39cde604, +0x99ece602, +0xd006f57b, +0x8052ebd0, +0x44db57a7, +0x50dbb7ae, +0x9938b992, +0x69e1b5e8, +0x323439aa, +0x1780de04, +0x0266aa62, +0xda289efe, +0xc4e9006a, +0x492ceb06, +0x47552b97, +0x6b677fbf, +0xa8c41e81, +0xd9278530, +0x4e30d680, +0x23d360bd, +0xda0755c8, +0x29c81d4a, +0x2bf8217f, +0xde7c1e03, +0xa87e4004, +0xa16aca40, +0x15e6a6e5, +0xc5bebea4, +0x1ce12e3f, +0x3642f2a4, +0x15e6bb4f, +0xdf892bc5, +0x51e4f653, +0x997e1bba, +0x7960aaf7, +0xbbca8802, +0x683e8813, +0xf45a4964, +0x0ccba5bc, +0x0f044f2a, +0x19b0d209, +0x300698d8, +0x64979efd, +0x83362f5d, +0x42d9b9ae, +0x272861d1, +0xcda8c56e, +0x9e5eb982, +0x6cd5437b, +0xcf2ead51, +0xbaac8a2a, +0xed50ebae, +0x3fbb5dcc, +0x636b50a1, +0x5ee826f5, +0x6096c804, +0xfce36c53, +0x2a4586ee, +0xdbd5545b, +0x431e1506, +0xf8d78878, +0x22dc34a5, +0xfc27e196, +0x3a197bdb, +0x1fc1891d, +0x078c9043, +0x40f76493, +0x040f595d, +0x2bfc2d38, +0xbe653294, +0x219223f3, +0xd4050181, +0xa8e27c78, +0xb4e57575, +0x1e72ba3d, +0x18d69449, +0x18dde4a1, +0x1e094834, +0x0a280db7, +0x9714415a, +0x34a56b3d, +0x7d19b648, +0x354f90ae, +0x972436c8, +0x9ded7a6d, +0x263b41f4, +0x39c84b7c, +0xbe475f21, +0xdc1acc61, +0x3b22636f, +0x1a12773d, +0xd2ce73b5, +0x8e087f8a, +0x7480f9dc, +0x5899944c, +0xe77c9000, +0x704bed81, +0xd9be12a8, +0x0299527f, +0x3db65c29, +0x884c231e, +0x33c295dd, +0xcbcf089a, +0x38a634ac, +0x215f2b11, +0x1d2192ac, +0xc10f55c4, +0x6a22cf9a, +0x0cf340e3, +0xf34cb83a, +0xd1a5d188, +0xd38b970f, +0xa72cbf19, +0x315e4e0f, +0x6fe73e10, +0x013824eb, +0x672dcce8, +0xb87325e9, +0x690f307a, +0x16fe7427, +0x60f62bfa, +0x65446346, +0xa0d350ad, +0x2388fdb3, +0x0bf3f40c, +0x051ba413, +0x010aff0a, +0x3d2d163c, +0x5cfecee3, +0x8d3c9b6f, +0xd0c3c58b, +0xab017ea5, +0x6e5fa8df, +0x49ce050a, +0x8276c48e, +0x83502913, +0x8902c52f, +0x649677bd, +0x79b2160c, +0x84209644, +0x321111dd, +0xfadd15cc, +0x8cae6148, +0xb659c154, +0x8aec5375, +0xa162b1bb, +0xa5152bad, +0xf0b63baa, +0x43465696, +0x9fb678d9, +0x2f0cdbbd, +0x3a9466e7, +0xd4548d75, +0x261b86cc, +0x97afe868, +0x165cdaf0, +0x83741dca, +0x8ec82bfa, +0x36b666c0, +0x0d1c268c, +0xd5ce66b1, +0xeafc5651, +0xfe823e72, +0xe28d081e, +0x2f6697f6, +0xe3c0c5c9, +0xc7bdb231, +0x89aca5a2, +0x32105317, +0x62a47d9e, +0xdcfd26ab, +0xa85d2098, +0x56e6672d, +0x225b4e32, +0x92e55195, +0x717ffce1, +0x4683cfe0, +0xcac66186, +0x81d2791a, +0xb7f3b337, +0x44fc3800, +0x5823d666, +0x04d2a4c0, +0xf9757645, +0xcb6095e2, +0x705080f6, +0xf17112af, +0xd10d4828, +0x60415b2c, +0x67f20eee, +0x7ef7e6c3, +0x54e9c309, +0x4117707b, +0xedbaf101, +0xb137cf84, +0xd861baf5, +0x9aa7348a, +0x69e85f6d, +0x5d5597f5, +0xb69ad371, +0x83c8bd10, +0x616bab63, +0x97cdc204, +0x0e576e40, +0x8322d8a3, +0xcfbead5a, +0xbec8d029, +0x7b378f55, +0xd3c804aa, +0x00368bb1, +0xec4ed851, +0x57b0a554, +0xc54acf08, +0x40285815, +0x6d6f1455, +0xb3ed89e5, +0x64673de4, +0xac80431f, +0x482f82f3, +0xda6c3757, +0x5ad0ee3c, +0x2d0673d0, +0x67903c4a, +0x8ee4347e, +0x8f7a8655, +0x2aa73eac, +0x038ca754, +0x3b4bc16d, +0xe1a0840d, +0x88b8362c, +0xdda32092, +0xb281620b, +0x717845bc, +0x15429501, +0x89db401e, +0xb69504d6, +0x2eb0aabb, +0xe9b2c2c1, +0xde4af6b5, +0x7b37b04e, +0x6e5505c4, +0x5d79133a, +0x698d309b, +0xbfe26be5, +0xc4d62489, +0x2c696c93, +0x11abb18c, +0x52f97b25, +0x7066f991, +0xf3341479, +0xd5ab9842, +0xe64324ca, +0x1768c7c8, +0x78f5e9c1, +0xae31fabe, +0xf009f9aa, +0xbec3e314, +0x69fb791c, +0x73275791, +0x689ab083, +0x6fc5cea4, +0x5358bf51, +0x78c108ad, +0x9d38cf10, +0xe0183155, +0x37f9a2b2, +0x1833a2e0, +0xa7803517, +0x8d491f94, +0x55cdd9e8, +0x1871ec1a, +0xe57afcaa, +0x6c3e8ee2, +0x92f019c0, +0x54b0bb7e, +0xc5d8b014, +0x5c11d3bd, +0x3193096e, +0xa936f0a8, +0xb7afd1c3, +0x02ff298d, +0x4716d2cd, +0x4921f25e, +0x927f6605, +0x71f3ffca, +0x3af8c270, +0xd60be7c9, +0x4b4210f5, +0x166b4768, +0x4d59cac1, +0x25810731, +0xb5243d63, +0xa334dafb, +0xeaf551c3, +0xbcf07bb4, +0x3c700fc3, +0x3613fa4b, +0x6957cbac, +0x8598c2c7, +0x4def7665, +0xaa615f79, +0x3fb8243a, +0xbf3bace7, +0xfcb4bc46, +0xc11f0bf4, +0xf385e11d, +0x4bbc54bc, +0x3088381e, +0x3082e761, +0x7b0f014b, +0x97c7d067, +0x5589550d, +0x933db0a9, +0x3468d765, +0x88b8fa51, +0xdcef90a0, +0x8289aa0e, +0xd62a2360, +0x8548da23, +0xe2ceb75b, +0xfb537766, +0x8564a2ee, +0xdc4869e2, +0xa3ad69f8, +0x10b63f10, +0xa91f062a, +0xe89e7b2e, +0xb0cc7767, +0xd3242bda, +0xe52b916d, +0xe463dc5f, +0x033877ff, +0x91d9d793, +0x0aa1a4d1, +0x42280c1c, +0xca5c99f6, +0xf6f78344, +0x7aa084af, +0xb125d3dd, +0xa422a4f3, +0x9c79fb9e, +0xeecd98cf, +0x2b6f1ad1, +0x0bbc245c, +0x9419a48d, +0xabe0ccc8, +0xd01562d6, +0x487362e4, +0xbff87c8a, +0xdeb47603, +0x48851557, +0x6eb78ebe, +0x533e8b19, +0x5d4a37e1, +0x08768c06, +0x59d0dbf1, +0x5b2ddbff, +0xe0343f50, +0x34c7745c, +0x2ec2fe83, +0x741a8bba, +0xf27deabe, +0x1cc4e040, +0x5fc3b879, +0x951f0f67, +0xc51aecb5, +0xf751cb6b, +0xa05cd161, +0xfd467bd8, +0x852f06ee, +0xbf9e9d0b, +0xe5d3ab3b, +0x23d3762e, +0x4f1ffe81, +0xd2ec683a, +0xfd2f542c, +0xa4aa0e77, +0x9516a061, +0x199a7f47, +0x0b65b371, +0x640b98d0, +0x651d7a9d, +0x0eb49a5d, +0x14ccba26, +0xe318fb26, +0x0a8c014b, +0xe2c6cd68, +0x21425818, +0xa04de72b, +0x0908330d, +0x2892a332, +0xc13a687c, +0x329e8e3a, +0xf7636c4c, +0xd8e18438, +0x71d750ce, +0x37c770b5, +0x19953606, +0x90ee1793, +0x1f98e994, +0xe9a0f872, +0x1ecb8ed8, +0xa9661e58, +0xbb062910, +0x338620d3, +0x9353bf4b, +0x4475ad0f, +0x8ef95120, +0x964a073e, +0x01fa73fd, +0x3a97c642, +0xfc7894e3, +0x7b456f0c, +0x6716fbfd, +0xa6e0b666, +0x02271095, +0x14247b96, +0xdb85c2c5, +0x4b217f69, +0xec4e4fb8, +0x9db453ee, +0x879e3d24, +0xdacae49f, +0x0acff11b, +0x627755fd, +0xc4012b2c, +0x71f81013, +0xbb2ec9de, +0xbf046f23, +0x88a605dc, +0x708c9f36, +0x26cbb554, +0x305c604b, +0xb197dbf4, +0xd63c3112, +0x8d2c673d, +0xee59c281, +0x95bdc456, +0x6be29604, +0xe0cde92d, +0xdf3b2232, +0xf41c5e02, +0xf8f3349a, +0x1919bfa3, +0x7e5dcf8a, +0x134cd061, +0xf3f94a66, +0x6e22e2f7, +0xe30fb75f, +0xd724bbf7, +0xe1c98d12, +0x7f18dd37, +0x6be95911, +0x144e6779, +0x8097c482, +0xeb164a96, +0x41d71a7a, +0xe4594cb1, +0xd9f38707, +0xbcbb139d, +0x5a74ffda, +0xdd329815, +0x97c06955, +0xf03cd825, +0x512f177f, +0x283ceda5, +0x0daa1ff8, +0xe361534e, +0x3c8b92e2, +0xdf5343ee, +0xfde5b6b2, +0x37c70f97, +0xe8ff28d7, +0x3e3c5797, +0xfb51ed09, +0xc9b060d7, +0xfb3708d5, +0xf3ece807, +0x25fef315, +0x80778efa, +0xeba70146, +0xcee3510c, +0x466293ff, +0xff0099ac, +0xb60592f7, +0xa0e46cd3, +0xd26f56fa, +0x60b2d282, +0x5e83e73e, +0x282fae0e, +0x1848593a, +0xcbe44063, +0xf7903167, +0x495c7273, +0x310ad091, +0x97e0bf16, +0xf6d5090e, +0x60d77c1d, +0xa7e242da, +0x0d2fc84c, +0x1c0ef273, +0x08bb0e7c, +0x2545133a, +0xd2534c23, +0x6a954126, +0x5f5a1670, +0x239b6612, +0x0201ee4e, +0x55be8d6f, +0x8f2914d4, +0xab2103f4, +0xa4808f30, +0x25b0ceaa, +0xd1032b04, +0xd1dc716b, +0xd9def46a, +0xd9979a6e, +0x9f59b718, +0x3d748cd1, +0x25041d00, +0x77912356, +0xfe6608a7, +0x5a69b89a, +0x8428f7c3, +0xc815ec23, +0x260e6ac6, +0x6014219a, +0xc1ca7faf, +0xb2b32953, +0x2c9c7361, +0xb02fd36c, +0x3449d9b7, +0xd0c5fbd0, +0xcc36dfd2, +0x796c64c6, +0x5ca615c6, +0x58df014a, +0xaf2cbc43, +0x8429d37b, +0xeb8f0b62, +0x74737afe, +0xbd9a1506, +0x0b7ae28b, +0x3a56f1de, +0xd3fe115f, +0x339a7596, +0xc3ed7e88, +0x27b684a4, +0xe16b46d3, +0x34a198f8, +0x5d082df5, +0xae971520, +0xab33238d, +0x7499f553, +0xfac9c5be, +0xa2b193ec, +0xe5ba5d6d, +0x7864e882, +0x55f0c7a9, +0xd2e31cc1, +0xf3f0bbfb, +0x13c43b76, +0xe96e0f00, +0x6161cfe0, +0x20cf294e, +0x049641c1, +0x9a4bccca, +0xecead8b9, +0xea3e99f5, +0x48a916a5, +0x0f945eef, +0xaa2b923e, +0x3f2f95f3, +0x45984a0d, +0x87c05d8f, +0x86754391, +0xfd4f2761, +0x04935e7c, +0x78636b1e, +0x99d58bad, +0x744fa442, +0x2af28919, +0x4410613b, +0x1ec593c8, +0x50f22338, +0x6429d56f, +0x2023ac2f, +0x45d4c10f, +0xcbe00811, +0x8540959f, +0x8959407f, +0x4c84281b, +0x245fbda5, +0xbd6f1b8e, +0x0434b9b7, +0xc5e33128, +0xd532d43a, +0x6993afd1, +0x129d63ac, +0xd7d7e5d9, +0x926ac43f, +0x1bed9809, +0xf73d934d, +0x935ccf60, +0x6848203e, +0xea77da81, +0x48a784a1, +0x3d68d675, +0xeeefe0cd, +0x13bd393b, +0x22c73eac, +0x8d6ab17f, +0x750744a4, +0x3b3024b1, +0x68f4b097, +0xa7ea1232, +0xb3a526c5, +0x58b90c44, +0xfedb07b9, +0xc6d114a5, +0xa340425c, +0x602d95ea, +0xb8e4406c, +0x49cb209a, +0x4ff75e73, +0x05d51295, +0x1a9dfd89, +0x809ed90b, +0xb0234908, +0x0cb971e3, +0x90901851, +0x65d3efd1, +0xe41b0a0f, +0x97a4a3f2, +0x8148f2ea, +0x1e51fe3c, +0x32a9633a, +0x369359c5, +0x02c2b014, +0x8bc7fcf6, +0x801a849e, +0xbe036113, +0xbad840f1, +0x2ed96341, +0x046a8879, +0x97723dad, +0x648af964, +0xc06ffbd2, +0x79fd8f62, +0x6a233582, +0x3bcf0c01, +0x982d238f, +0x5436e123, +0xea5b52fb, +0xc1468042, +0x5b1404f4, +0x81c3d315, +0x213880b9, +0x250ad99e, +0x0f83c782, +0x1bdadec2, +0xe7865181, +0x71605b8a, +0xbeb53560, +0x1e9bfc4b, +0xce90e4c2, +0x36a56fe8, +0x90b3b914, +0x3ffaae0d, +0xbfb72845, +0x6203639a, +0xaa7bb398, +0x6677bba6, +0xaefabd8d, +0xbb5809ae, +0x5763ae56, +0xfe4d2b78, +0x8074b4ef, +0x986d2567, +0x61c1a0a9, +0x18f88cfd, +0x9fb01a40, +0xdc8a6b12, +0x24681bb4, +0x72bc6f42, +0x659e7438, +0xf8ae3c4b, +0xe27c36d9, +0x3a37da83, +0x59bde3bd, +0xed18e5ca, +0x2c6c59e5, +0x2e27739c, +0x415fbb9e, +0xf8242c3e, +0xcd983d9a, +0x206d702e, +0x28ff37c3, +0x72f84c6d, +0x55ceb747, +0x3bf0c2c3, +0xaac1e74c, +0xc1d44cbc, +0xe0c9b90b, +0xff1ad575, +0x5d581d4c, +0x37563edf, +0x074d1cc1, +0x074e2895, +0x514d30b9, +0x1579bed7, +0xd1e49ebc, +0x9f14dfdc, +0x332625a7, +0xaf0e157f, +0x0c5812ae, +0x7cc73ff1, +0x2e7c2c94, +0xffa25f45, +0x5a25d33d, +0x1254306c, +0xc953c646, +0xb67fc2be, +0xe57edada, +0x47a202f0, +0xc08ad72c, +0xb28f7340, +0x4d1195b9, +0x6cdaa6f3, +0xc0641284, +0x5b7613a7, +0x70436765, +0x90bf317d, +0xfa35f401, +0x1334d8c1, +0x85b4a41f, +0xe8f02940, +0x54618af4, +0xe5048582, +0x6d8372f3, +0xdc44cf72, +0x3e207780, +0x6b3b7d38, +0x93c6e6bc, +0x46689afc, +0xded31a79, +0x0e158350, +0xbe797d74, +0xc7a3def3, +0xfa3bfe42, +0x1d2dafb6, +0x3240ed91, +0xb95a0410, +0xfcb68e3d, +0xccb9f04c, +0xa05a2627, +0xdd1f7f95, +0x8cd62b78, +0x22d15904, +0xc96f5f71, +0x0c7b6cff, +0xeacb4cf5, +0x8f086cbc, +0x1f15345d, +0x38747fa3, +0x8c80a474, +0xdce014a8, +0x52a053e0, +0xca994886, +0x44b4dbc7, +0x5bff559f, +0xef97baae, +0x93675c68, +0x21d78ff3, +0x1715101f, +0x4d6174d8, +0x67334a2f, +0x79404a7c, +0x8b06a8fb, +0x28eef9bd, +0x872a9049, +0xa4c34cc5, +0xa417c16c, +0xb362baeb, +0xfb09e8f2, +0x8b61eb23, +0x8228c54b, +0xc762d6e7, +0x96b3fff9, +0x121c95ed, +0x3242ab3e, +0x7ae3cba1, +0x092e09d8, +0x400fbad0, +0xba8caf0f, +0x5eb55dfc, +0x0bdca782, +0xc22162d6, +0xd95734a7, +0xfa884366, +0x71a9a169, +0xa2e9f53e, +0x265339c7, +0xbf4ff4be, +0xb8909e15, +0xbe0537c6, +0x00db385b, +0xf4f3269f, +0x84d8dc9a, +0xa797e209, +0xc8349fa5, +0xd42da3ef, +0x0e5035f7, +0xd025f2dd, +0xc63d056d, +0x43a8d1b9, +0x0c5e2e3d, +0xc2d1d9bd, +0x76cc6482, +0x54cb73df, +0x7f936712, +0x48821c93, +0x5514620c, +0xa67facf6, +0xadbbb174, +0x6da0766d, +0xb8076f21, +0x673965a4, +0x6920c5e2, +0x386a4ea1, +0x9bd5e21a, +0xe248f986, +0x51c1c5d9, +0x9179a933, +0x7b1be1a1, +0x48b7b5a3, +0x61a95848, +0x16c6340b, +0xd23b70c4, +0x97d46df0, +0x0d08c17a, +0xfa8574c6, +0xd497dad1, +0x66819b06, +0x1dd05891, +0xa17b1b16, +0x2a066476, +0xcdd0652f, +0x77a1d3ae, +0x645f84ba, +0x01ab83f3, +0x32b01d50, +0xcc5abd6c, +0x43ea6534, +0xfb5cbdf4, +0xfe2b9420, +0x09241f6d, +0x6d6c1897, +0xf147cdf0, +0x85ef4aa7, +0x52f33bf4, +0x63dcb80b, +0x498625ee, +0xeb46dd48, +0x40821a30, +0x59d62ca3, +0x308fe43e, +0x6bf8acf3, +0x7be31dd7, +0xecb5e50a, +0x07bbf983, +0xb05579a8, +0xb5f05de3, +0xf7df38e6, +0xc3168ead, +0xc24cc30c, +0x40816178, +0xd1218dfa, +0x13e3fbfa, +0xa8003523, +0x3ae26f8a, +0xd832d647, +0x84008767, +0x02c9ed1a, +0x38a2cc0d, +0xc31288f0, +0x5b3626a1, +0x24f3f63f, +0xd97f4d87, +0x36fb790e, +0x01a7aa78, +0x892a430d, +0xb64ba3a4, +0x4d68f427, +0x53bd3406, +0x07e33155, +0xa9f0c9cb, +0xd7c73ec7, +0xb2b6c39f, +0x78dae549, +0xbc248e4b, +0xce95df70, +0x5044af04, +0x55b8a302, +0xa0129c64, +0x12271bb8, +0x000a3bc3, +0xe4d427f2, +0x24886b4a, +0x1e997302, +0x7746db0a, +0xfae04696, +0xaefd1694, +0x1f26e455, +0x20b8c2e9, +0xfe10c105, +0xae00a37a, +0x67c12f67, +0x2288ab45, +0x2d820c7b, +0xc8e07917, +0xf8347b39, +0x71eb76d6, +0x70f444b5, +0x72ef8b85, +0x8af6a2a2, +0x54d2106e, +0x90962da3, +0x531a4050, +0x2cb66424, +0x45ab4bc7, +0xbe551461, +0xb3956598, +0x52989b61, +0xf20bdfba, +0xe80333e8, +0xf61d9d41, +0x91e5e1f9, +0x9d70d8e7, +0xe0a96205, +0x49a05793, +0x1c3eaa2f, +0xecd8e25f, +0xbc6c8555, +0x6bc8d2c9, +0x4a849216, +0xe47ad4d3, +0xb8b0d1ab, +0x36e68e84, +0x894c17a1, +0xa085a26c, +0xcae9f08e, +0x7ba26dc2, +0xe11302ff, +0x4dc6fd2d, +0x5ad21098, +0x51f5c359, +0x4d8616fc, +0x5f85a381, +0xdaa943e7, +0x66eae935, +0x324f2f49, +0x08eaef8d, +0x99d83ca9, +0x1ba342eb, +0xdc34dc81, +0xd496da8b, +0x7d4d1a07, +0x28209ab4, +0x96f3f174, +0xeb9dc441, +0x6fba11e2, +0x8591b9c1, +0xd9598ef2, +0x122d988a, +0x49180774, +0x9f14c96d, +0x6cc3cf5e, +0x40b9ca1e, +0x73c0eb3b, +0x3af92851, +0xe4d4328e, +0x8be7e31e, +0x72d9e81d, +0x5be3f474, +0xd5153cf9, +0x271f8ea6, +0xb814e0da, +0x51b84951, +0x2e9b5b01, +0xb2775829, +0x7106fede, +0x5008fabb, +0x4ff284a4, +0x3c0a6a2e, +0xd0b39353, +0x6e6b8d4b, +0x72147d3f, +0x9167ee56, +0xb047ebc7, +0xba7e17f3, +0x9bd10205, +0x1c80361c, +0xb8b58271, +0x3d56bf10, +0xabe38435, +0x6fed8ab8, +0x942cc112, +0xbd5c64fd, +0x5a595f9b, +0x05176f81, +0xabd37e0a, +0x6144ad6b, +0x47088815, +0x7a7d9afe, +0x98963994, +0xe7132bbe, +0x2b6bd615, +0x19d1ab61, +0x6acd3853, +0x4d92dd5a, +0x71b9d34e, +0x50b58b5b, +0x1f2bd7dc, +0x946648e3, +0x516b47f9, +0xf5b2559f, +0x80248488, +0x7282fcec, +0x70976eb9, +0x044de840, +0xc5dd9cb2, +0x9776dc82, +0x9ccd429f, +0x602beaec, +0x5c8f9fc6, +0x6887a2f0, +0xeff058f4, +0xb1107a6e, +0x3e1475f9, +0x55c9775b, +0x1c5b2480, +0x9ea9785d, +0xf48d763d, +0xe350ca23, +0x01d74e0e, +0x31f85d2d, +0x2fb7bf21, +0xd0a2f07e, +0x3af0eb30, +0xa92254e0, +0x91c96d56, +0xf62455dc, +0xf7b3010f, +0xb2f2f02e, +0xdd543e79, +0x311e01d2, +0xc119cbfc, +0x42788c7c, +0xa07793d1, +0xb7f9b360, +0x04b49974, +0x19e15120, +0x5f3365ae, +0xf2b75fd7, +0xf0d5a437, +0xdee84eb7, +0xe235b49e, +0x110ee285, +0x871bda52, +0x50f9976a, +0xb392b1d4, +0x38e8f0b7, +0x5f24754e, +0x7531598a, +0x471cb05d, +0x5d4d809e, +0x25d84d02, +0x7ff25671, +0xba1432e9, +0xc3f6dfec, +0x674bb9a9, +0xbbb019f5, +0x739068a7, +0x18e63978, +0xe4174047, +0x825a6b93, +0x2395920f, +0x689a7f73, +0x4bef38dd, +0x3bbe599a, +0x799c5e7a, +0xffd5fbed, +0xd099e3e9, +0x9194164f, +0x7e78db3e, +0x85bdd3a8, +0x9604235e, +0x799a74a4, +0x65b5cf41, +0xc2f5620e, +0xbca94ed0, +0x7d65bec1, +0xc8678396, +0xd5bea1c5, +0xdba7fd10, +0x86191768, +0x20275f65, +0x72e3fa45, +0xf27a41a6, +0xa84f32a8, +0x4665b208, +0x6932a73f, +0x4aa5541c, +0xb0235f21, +0x15ba43c3, +0xc611a5a1, +0xd8210c08, +0xd4a11fde, +0x94ad5e53, +0xdc9f233c, +0x11b29680, +0x790a7abd, +0x6e9ff917, +0x37009d1a, +0x92c0651e, +0x00339b20, +0x083935de, +0x59b855f8, +0x175b1374, +0xacd2e21f, +0xc9212cae, +0x3eddc591, +0x7e119641, +0x09f0be07, +0xd35de1d5, +0xd61b5ac1, +0xe2ecc914, +0xcf9e2d23, +0x7404ec8d, +0x8ad2e249, +0x7cf68503, +0xaf316e68, +0x92de6e69, +0x2e2e6410, +0x6ed13edf, +0x4673e5a1, +0x82f85111, +0x92161873, +0x9c3a8f89, +0x871a0e31, +0xb164ae9b, +0x8b89cb19, +0x53793940, +0x75cc9d3b, +0x609a1da9, +0x71fe6f11, +0xf708492d, +0xebe0f0c0, +0xd04f2907, +0x61d8fa4c, +0x4f0134fc, +0xce999981, +0x888f69eb, +0xa413d4df, +0x27eebfa2, +0x6f64d2fe, +0x3a7e4033, +0xcac4b752, +0x0483d9df, +0x61a364bb, +0xf4c427ab, +0x2c5d7c06, +0xbfb47707, +0x56b807aa, +0x8408a419, +0xde6a6e9a, +0x774eba07, +0xd38dd092, +0xf6ebfbdc, +0xd022f2f6, +0xa1a6207e, +0xd7faabfc, +0xdf238d95, +0xe816b85b, +0x43a8e5b9, +0x7b28fc50, +0x6aec74d3, +0xaa7302e8, +0x4d81e7e8, +0x3112c5a5, +0xeae3d874, +0x50fa7024, +0x87678404, +0xd33b04e3, +0x1757c16a, +0x7400d34a, +0x37b96169, +0xcef98f07, +0x82bdbdbc, +0xdbf2a376, +0x79cfea7c, +0x151fdf13, +0x199eae75, +0x7ebc10f0, +0x8f5c4efb, +0x87ab238a, +0x87a5d17a, +0xe244a387, +0xa0d9f11e, +0x4fb49e71, +0xe182c333, +0x98cc044c, +0x1d5149b6, +0x1d4544ca, +0x3c8c45dd, +0xcaf9e02d, +0x44305ff1, +0xf0021cd3, +0x123c3574, +0xb7c353be, +0x74bc90ed, +0x6ebe1384, +0x70341b46, +0x7aa99e03, +0x1495e8d6, +0xd63b79f0, +0x1fee698e, +0x76c39b65, +0x06643aef, +0xabdcc0fa, +0x9d0e645c, +0xc1d2f8c5, +0xd9d8021e, +0x3f4692cd, +0x98d2ed6a, +0x890049a8, +0x40acc914, +0x35e8c9cc, +0x9ec00a9f, +0x18699747, +0xbe061417, +0x9c964020, +0xb936b74b, +0x1b624dba, +0xd30aa121, +0xaf096df3, +0x1036f549, +0x16a32dcc, +0x84d52118, +0xf7f371dd, +0x4cf463bf, +0x3eceb0b4, +0x03169b80, +0x089d30b8, +0xa3ba117b, +0x387da25d, +0x3e77d672, +0x9278a1bd, +0xa382c583, +0x344d4433, +0x73d462d8, +0x2c813095, +0x351eae3c, +0x2c890b14, +0xa635737a, +0x9ef37508, +0xa44adb58, +0xf9081c4a, +0xf221459c, +0xb9c3b31a, +0x5ff44cfd, +0x6b76d414, +0x1b76611c, +0xd0af30f1, +0xb1e0120b, +0x3e57cc72, +0xa60b91b8, +0x92bf75fd, +0x19c7631b, +0xce167348, +0x6da0487a, +0x11baaa61, +0x85d91573, +0x20572373, +0x04752526, +0x01800a3f, +0x6c57b4be, +0x555400b7, +0x6b2ea834, +0x42fcd3dd, +0x131f7de1, +0x3b07a8a6, +0xab096652, +0xe013f857, +0x6162e9c3, +0x6ee4cb83, +0x3800ee38, +0xdcda1cec, +0xd951abf3, +0xc6738371, +0x69f5168e, +0x6dda3227, +0x28f0b25b, +0x8ee4ab11, +0xa70dec04, +0x999304bf, +0xb4197071, +0x5944bb2b, +0xd0ce5662, +0x911c58c3, +0x5dff9515, +0x5f6e9d8b, +0xa8f24ac0, +0x97bb2b4d, +0x4fd0b6d4, +0x60297a39, +0xa8c00905, +0xc50651b9, +0xfc7bf5ad, +0x762feb71, +0x4dcc64ed, +0xae841e75, +0xdd465c0d, +0xd974af26, +0x599304a4, +0x7b629d61, +0xec0c610a, +0xec99c5b6, +0x8ced6e29, +0x9e210b3f, +0xe53a5246, +0x03e6b46b, +0x1b0b00f6, +0x66b8c88b, +0x3e6c0b84, +0xaa15c764, +0xf6cc0665, +0x634dba8d, +0xad85c9f9, +0x65fc5fae, +0x6d853d98, +0x002b48ec, +0x50112f44, +0x8d643d31, +0x9a9e387c, +0xb39db548, +0xf3f9e9b3, +0xbe2a118e, +0x5322b714, +0x4ce55fb2, +0xd5671db3, +0x9a62fbe1, +0xdbf2e5a5, +0xe2275407, +0xa7728090, +0x31137d57, +0x97a20782, +0x40e065c3, +0x8167ae7f, +0xa37f005f, +0xcc1e9385, +0xa4362650, +0x9a9cb0da, +0x7bfdea1b, +0x76dbd902, +0x9f086098, +0xa68fc262, +0xb8bee2c9, +0x60df93a3, +0xf6008fc7, +0x8a77f869, +0x688fcccb, +0xfd7fb25b, +0x01465d3a, +0x6cf68382, +0xc92f5176, +0x9f09ec23, +0x697e8ee6, +0x5c06c91b, +0x64572b91, +0x2ff6e434, +0x02204a46, +0x578d5507, +0x0d485b2e, +0x4a91a254, +0x016598f9, +0x4c1bb4ee, +0x85f80a0f, +0xfbe412c4, +0x901e7a4f, +0xe2423bb8, +0x73a70f70, +0xaef80731, +0x2502744a, +0xbb1f07e8, +0xc76c48fe, +0x75d74653, +0x93267468, +0xdb8ec7f9, +0x96b1aeeb, +0xa64f4fc7, +0x164d6a16, +0x6a85d57e, +0x89daa6b3, +0x2d6ddaf0, +0x196278ff, +0xce124b9c, +0xeb3c4d4c, +0x460105f5, +0x6daa092f, +0x9da3bb06, +0x5356643e, +0x6f8badee, +0xfa0a1add, +0xd451fd50, +0x3ff2c59a, +0xd71f4525, +0x077bd3c6, +0x014aafc2, +0xacbff395, +0xb405ff35, +0xedb01f43, +0xe48b3b63, +0xbeb5d852, +0x58629384, +0x23c876a3, +0x168a689f, +0xe18fd3cd, +0x91455d20, +0x7dee9af8, +0xa068cae7, +0xc5ce3f74, +0x2bf3673e, +0x7428c041, +0x9d36fedb, +0x200b07ef, +0x671d141b, +0x2c4fd378, +0xe4fb1476, +0x89423194, +0x40f7885a, +0xb590d828, +0x14250569, +0x3d2a9f00, +0xe5320c38, +0x375239b8, +0x64a4cf68, +0xd799894a, +0x579736ee, +0x155ad968, +0xb90c13a6, +0x79804033, +0x98739fd4, +0x3be3a61a, +0x0ebfb4a7, +0xc86190d7, +0x5a058818, +0x2730281c, +0xa77f7319, +0xb702acf2, +0xf5433a50, +0xea6ed512, +0x770a4a40, +0x81bf75bd, +0x2efb79f8, +0xfc4d9a24, +0x747cad81, +0x49c4213b, +0xea4d9247, +0xd6f91d0b, +0xb96f9ac2, +0xda06efb9, +0x85d279c5, +0x5b8e68cc, +0xe911e956, +0x05523ee4, +0x1afd632a, +0xc9fd6932, +0x0ad1aac6, +0x05b408ab, +0xfd49593c, +0x1f70b486, +0xf351fe2a, +0xdc30c32e, +0x3423a951, +0xde044c5a, +0xa57e83ab, +0xae9e1d6b, +0x54d0d510, +0xdc849a06, +0x4e60812b, +0x889be676, +0x3e8c12dd, +0x75e803be, +0x27fdb161, +0x8c7fbab0, +0xd514fa7c, +0xbff82ab2, +0x84acb22e, +0x3d31513b, +0xe5d9dfb1, +0xa65aaeba, +0x8e582ff0, +0x40eba324, +0x60346788, +0x1dab9c75, +0xdf5191d7, diff --git a/src/soc/intel/braswell/microcode/Makefile.inc b/src/soc/intel/braswell/microcode/Makefile.inc new file mode 100644 index 0000000..936dd85 --- /dev/null +++ b/src/soc/intel/braswell/microcode/Makefile.inc @@ -0,0 +1,13 @@ +# Add CPU uCode source to list of files to build. +cpu_microcode-y += microcode_blob.c + +# This section overrides the default build process for the microcode to place +# it at a known location in the CBFS. This only needs to be enabled if FSP is +# being used. +# Define the correct offset for the file in CBFS +fsp_ucode_cbfs_base = $(CONFIG_CPU_MICROCODE_CBFS_LOC) + +# Override the location that was supplied by the core code. +add-cpu-microcode-to-cbfs = \ + $(CBFSTOOL) $(1) add -n $(cpu_ucode_cbfs_name) -f $(cpu_ucode_cbfs_file) -t 0x53 -b $(fsp_ucode_cbfs_base) + diff --git a/src/soc/intel/braswell/microcode/microcode_blob.c b/src/soc/intel/braswell/microcode/microcode_blob.c new file mode 100644 index 0000000..6ad638b --- /dev/null +++ b/src/soc/intel/braswell/microcode/microcode_blob.c @@ -0,0 +1,4 @@ +unsigned microcode[] = { +#include "M01406C3337.h" +#include "M01406C221D.h" +}; diff --git a/src/soc/intel/braswell/northcluster.c b/src/soc/intel/braswell/northcluster.c new file mode 100644 index 0000000..e162585 --- /dev/null +++ b/src/soc/intel/braswell/northcluster.c @@ -0,0 +1,161 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cbmem.h> +#include <console/console.h> +#include <cpu/x86/smm.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <fsp_util.h> +#include <soc/intel/common/memmap.h> +#include <soc/iomap.h> +#include <soc/iosf.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> +#include <soc/smm.h> +#include <vendorcode/google/chromeos/chromeos.h> + +/* + * Host Memory Map: + * + * +--------------------------+ BMBOUND_HI + * | Usable DRAM | + * +--------------------------+ 4GiB + * | PCI Address Space | + * +--------------------------+ BMBOUND + * | TPM | + * +--------------------------+ IMR2 + * | TXE | + * +--------------------------+ IMR1 + * | iGD | + * +--------------------------+ + * | GTT | + * +--------------------------+ SMMRRH, IRM0 + * | TSEG | + * +--------------------------+ SMMRRL + * | FSP Reserved Mem | + * +--------------------------+ SMMRRL - FSP_RESERVED_MEM_SIZE + * | Usable DRAM | + * +--------------------------+ 0 + * + * Note that there are really only a few regions that need to enumerated w.r.t. + * coreboot's resrouce model: + * + * +--------------------------+ BMBOUND_HI + * | Cacheable/Usable | + * +--------------------------+ 4GiB + * + * +--------------------------+ BMBOUND + * | Uncacheable/Reserved | + * +--------------------------+ SMMRRH + * | Cacheable/Reserved | + * +--------------------------+ SMMRRL + * | Cacheable/Usable | + * +--------------------------+ 0 + */ +#define RES_IN_KIB(r) ((r) >> 10) + +uint32_t nc_read_top_of_low_memory(void) +{ + return iosf_bunit_read(BUNIT_BMBOUND) & ~((1 << 27) - 1); +} + +static void nc_read_resources(device_t dev) +{ + unsigned long mmconf; + unsigned long bmbound_k; + unsigned long bmbound_hi; + void *smm_base; + size_t smm_size; + unsigned long tseg_base_k; + unsigned long tseg_top_k; + unsigned long fsp_res_base_k; + unsigned long base_k, size_k; + const unsigned long four_gig_kib = (4 << (30 - 10)); + int index = 0; + + /* Read standard PCI resources. */ + pci_dev_read_resources(dev); + + /* Determine TSEG data */ + smm_region(&smm_base, &smm_size); + tseg_base_k = RES_IN_KIB((unsigned long) smm_base); + tseg_top_k = tseg_base_k + RES_IN_KIB(smm_size); + + /* Determine the base of the FSP reserved memory */ + fsp_res_base_k = RES_IN_KIB((unsigned long) cbmem_top()); + + /* PCIe memory-mapped config space access - 256 MiB. */ + mmconf = iosf_bunit_read(BUNIT_MMCONF_REG) & ~((1 << 28) - 1); + mmio_resource(dev, BUNIT_MMCONF_REG, RES_IN_KIB(mmconf), 256 * 1024); + + /* 0 -> 0xa0000 */ + base_k = RES_IN_KIB(0); + size_k = RES_IN_KIB(0xa0000) - base_k; + ram_resource(dev, index++, base_k, size_k); + + /* 0xc0000 -> fsp_res_base - cacheable and usable */ + base_k = RES_IN_KIB(0xc0000); + size_k = fsp_res_base_k - base_k; + ram_resource(dev, index++, base_k, size_k); + + /* fsp_res_base -> tseg_top - Reserved */ + base_k = fsp_res_base_k; + size_k = tseg_top_k - base_k; + reserved_ram_resource(dev, index++, base_k, size_k); + + /* TSEG TOP -> bmbound is memory backed mmio. */ + bmbound_k = RES_IN_KIB(nc_read_top_of_low_memory()); + mmio_resource(dev, index++, tseg_top_k, bmbound_k - tseg_top_k); + + /* + * The BMBOUND_HI register matches register bits of 31:24 with address + * bits of 35:28. Therefore, shift register to align properly. + */ + bmbound_hi = iosf_bunit_read(BUNIT_BMBOUND_HI) & ~((1 << 24) - 1); + bmbound_hi = RES_IN_KIB(bmbound_hi) << 4; + if (bmbound_hi > four_gig_kib) + ram_resource(dev, index++, four_gig_kib, + bmbound_hi - four_gig_kib); + + /* + * Reserve everything between A segment and 1MB: + * + * 0xa0000 - 0xbffff: legacy VGA + * 0xc0000 - 0xfffff: RAM + */ + mmio_resource(dev, index++, (0xa0000 >> 10), (0xc0000 - 0xa0000) >> 10); + reserved_ram_resource(dev, index++, (0xc0000 >> 10), + (0x100000 - 0xc0000) >> 10); + + chromeos_reserve_ram_oops(dev, index++); +} + +static struct device_operations nc_ops = { + .read_resources = nc_read_resources, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver nc_driver __pci_driver = { + .ops = &nc_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = SOC_DEVID, +}; diff --git a/src/soc/intel/braswell/pcie.c b/src/soc/intel/braswell/pcie.c new file mode 100644 index 0000000..d437b3b --- /dev/null +++ b/src/soc/intel/braswell/pcie.c @@ -0,0 +1,281 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "chip.h" +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pciexp.h> +#include <device/pci_ids.h> +#include <reg_script.h> +#include <soc/pci_devs.h> +#include <soc/pcie.h> +#include <soc/ramstage.h> +#include <soc/smm.h> + +static int pll_en_off; +static uint32_t strpfusecfg; + +static inline int root_port_offset(device_t dev) +{ + return PCI_FUNC(dev->path.pci.devfn); +} + +static inline int is_first_port(device_t dev) +{ + return root_port_offset(dev) == PCIE_PORT1_FUNC; +} + +static const struct reg_script init_static_before_exit_latency[] = { + /* Disable optimized buffer flush fill and latency tolerant reporting */ + REG_PCI_RMW32(DCAP2, ~(OBFFS | LTRMS), 0), + REG_PCI_RMW32(DSTS2, ~(OBFFEN | LTRME), 0), + /* Set maximum payload size. */ + REG_PCI_RMW32(DCAP, ~MPS_MASK, 0), + /* + * Disable transmit datapath flush timer, clear transmit config change + * wait time, clear sideband interface idle counter. + */ + REG_PCI_RMW32(PHYCTL2_IOSFBCTL, ~(TDFT | TXCFGCHWAIT | SIID), 0), + REG_SCRIPT_END, +}; + +static const struct reg_script init_static_after_exit_latency[] = { + /* Set common clock configuration. */ + REG_PCI_OR16(LCTL, CCC), + /* Set NFTS to 0x743a361b */ + REG_PCI_WRITE32(NFTS, 0x743a361b), + /* Set common clock latency to 0x3 */ + REG_PCI_RMW32(MPC, ~CCEL_MASK, (0x3 << CCEL_SHIFT)), + /* Set relay timer policy. */ + REG_PCI_RMW32(RTP, 0xff000000, 0x854c74), + /* Set IOSF packet fast transmit mode and link speed training policy. */ + REG_PCI_OR16(MPC2, IPF | LSTP), + /* + * Channel configuration - enable upstream posted split, set non-posted + * and posted request size + */ + REG_PCI_RMW32(CHCFG, ~UPSD, UNRS | UPRS), + /* Completion status replay enable and set TLP grant count */ + REG_PCI_RMW32(CFG2, ~(LATGC_MASK), CSREN | (3 << LATGC_SHIFT)), + /* Assume no IOAPIC behind root port -- disable EOI forwarding. */ + REG_PCI_OR16(MPC2, EOIFD), + /* Expose AER */ + REG_PCI_RMW32(AERCH, ~0, (1 << 16) | (1 << 0)), + /* set completion timeout to 160ms to 170ms */ + REG_PCI_RMW16(DSTS2, ~CTD, 0x6), + /* Enable AER */ + REG_PCI_OR16(DCTL_DSTS, URE | FEE | NFE | CEE), + /* Read and write back capabaility registers. */ + REG_PCI_OR32(0x34, 0), + REG_PCI_OR32(0x80, 0), + /* Retrain the link. */ + REG_PCI_OR16(LCTL, RL), + REG_SCRIPT_END, +}; + +static void pcie_init(device_t dev) +{ + struct reg_script init_script[] = { + REG_SCRIPT_NEXT(init_static_before_exit_latency), + /* + * Exit latency configuration based on + * PHYCTL2_IOSFBCTL[PLL_OFF_EN] set in root port 1 + */ + REG_PCI_RMW32(LCAP, ~L1EXIT_MASK, + 2 << (L1EXIT_MASK + pll_en_off)), + REG_SCRIPT_NEXT(init_static_after_exit_latency), + /* Disable hot plug, set power to 10W, set slot number. */ + REG_PCI_RMW32(SLCAP, ~(HPC | HPS), + (1 << SLS_SHIFT) | (100 << SLV_SHIFT) | + (root_port_offset(dev) << SLN_SHIFT)), + /* Dynamic clock gating. */ + REG_PCI_OR32(RPPGEN, RPDLCGEN | RPDBCGEN | RPSCGEN), + REG_PCI_OR32(PWRCTL, RPL1SQPOL | RPDTSQPOL), + REG_PCI_OR32(PCIEDBG, SPCE), + REG_SCRIPT_END, + }; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + reg_script_run_on_dev(dev, init_script); + + if (is_first_port(dev)) { + struct soc_intel_braswell_config *config = dev->chip_info; + uint32_t reg = pci_read_config32(dev, RPPGEN); + reg |= SRDLCGEN | SRDBCGEN; + + if (config && config->clkreq_enable) + reg |= LCLKREQEN | BBCLKREQEN; + + pci_write_config32(dev, RPPGEN, reg); + } +} + +static const struct reg_script no_dev_behind_port[] = { + REG_PCI_OR32(PCIEALC, (1 << 26)), + REG_PCI_POLL32(PCIESTS1, 0x1f000000, (1 << 24), 50000), + REG_PCI_OR32(PHYCTL4, SQDIS), + REG_SCRIPT_END, +}; + +static void check_port_enabled(device_t dev) +{ + int rp_config = (strpfusecfg & LANECFG_MASK) >> LANECFG_SHIFT; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + switch (root_port_offset(dev)) { + case PCIE_PORT1_FUNC: + /* Port 1 cannot be disabled from strapping config. */ + break; + case PCIE_PORT2_FUNC: + /* Port 2 disabled in all configs but 4x1. */ + if (rp_config != 0x0) + dev->enabled = 0; + break; + case PCIE_PORT3_FUNC: + /* Port 3 disabled only in 1x4 config. */ + if (rp_config == 0x3) + dev->enabled = 0; + break; + case PCIE_PORT4_FUNC: + /* Port 4 disabled in 1x4 and 2x2 config. */ + if (rp_config >= 0x2) + dev->enabled = 0; + break; + } +} + +static void check_device_present(device_t dev) +{ + /* port1_dev will store the dev struct pointer of the PORT1 */ + static device_t port1_dev; + + /* + * Braswell Soc has 4 ROOT ports defined with MAX_ROOT_PORTS_BSW. + * For each port initial assumption is that, each port will have + * devices connected to it. Later we will scan each PORT and if + * the device is not attached to that port we will update + * rootports_in_use. If none of the root port is in use we will + * disable PORT1 otherwise we will keep PORT1 enabled per spec. + * In future if the Soc has more number of PCIe Root ports then + * change MAX_ROOT_PORTS_BSW value accordingly. + */ + + static uint32_t rootports_in_use = MAX_ROOT_PORTS_BSW; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + /* Set slot implemented. */ + pci_write_config32(dev, XCAP, pci_read_config32(dev, XCAP) | SI); + + /* No device present. */ + if (!(pci_read_config32(dev, SLCTL_SLSTS) & PDS)) { + rootports_in_use--; + printk(BIOS_DEBUG, "No PCIe device present."); + + /* + * Defer PORT1 disabling for now. When we are at Last port + * we will check rootports_in_use and disable PORT1 if none + * of the port has any device connected + */ + if (!is_first_port(dev)) { + reg_script_run_on_dev(dev, no_dev_behind_port); + dev->enabled = 0; + } else + port1_dev = dev; + /* + * If none of the ROOT PORT has devices connected then + * disable PORT1 else keep the PORT1 enable + */ + if (!rootports_in_use) { + reg_script_run_on_dev(port1_dev, no_dev_behind_port); + port1_dev->enabled = 0; + southcluster_enable_dev(port1_dev); + } + } else if (!dev->enabled) { + /* Port is disabled, but device present. Disable link. */ + pci_write_config32(dev, LCTL, + pci_read_config32(dev, LCTL) | LD); + } +} + +static void pcie_enable(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + if (is_first_port(dev)) { + struct soc_intel_braswell_config *config = dev->chip_info; + uint32_t reg = pci_read_config32(dev, PHYCTL2_IOSFBCTL); + pll_en_off = !!(reg & PLL_OFF_EN); + + strpfusecfg = pci_read_config32(dev, STRPFUSECFG); + + if (config && config->pcie_wake_enable) + southcluster_smm_save_param( + SMM_SAVE_PARAM_PCIE_WAKE_ENABLE, 1); + } + + /* Check if device is enabled in strapping. */ + check_port_enabled(dev); + /* Determine if device is behind port. */ + check_device_present(dev); + + southcluster_enable_dev(dev); +} + +static void pcie_root_set_subsystem(device_t dev, unsigned vid, unsigned did) +{ + printk(BIOS_SPEW, "%s/%s ( %s, 0x%04x, 0x%04x )\n", + __FILE__, __func__, dev_name(dev), vid, did); + uint32_t didvid = ((did & 0xffff) << 16) | (vid & 0xffff); + + if (!didvid) + didvid = pci_read_config32(dev, PCI_VENDOR_ID); + pci_write_config32(dev, 0x94, didvid); +} + +static struct pci_operations pcie_root_ops = { + .set_subsystem = &pcie_root_set_subsystem, +}; + +static struct device_operations device_ops = { + .read_resources = pci_bus_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_bus_enable_resources, + .init = pcie_init, + .scan_bus = pciexp_scan_bridge, + .enable = pcie_enable, + .ops_pci = &pcie_root_ops, +}; + +static const unsigned short pci_device_ids[] = { + PCIE_PORT1_DEVID, PCIE_PORT2_DEVID, PCIE_PORT3_DEVID, PCIE_PORT4_DEVID, + 0 +}; + +static const struct pci_driver pcie_root_ports __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .devices = pci_device_ids, +}; diff --git a/src/soc/intel/braswell/placeholders.c b/src/soc/intel/braswell/placeholders.c new file mode 100644 index 0000000..92ce00b --- /dev/null +++ b/src/soc/intel/braswell/placeholders.c @@ -0,0 +1,8 @@ + +#include <arch/acpi.h> +#include <cpu/cpu.h> +#include <device/pci_rom.h> +#include <soc/acpi.h> + +/* Rmodules don't like weak symbols. */ +u32 map_oprom_vendev(u32 vendev) { return vendev; } diff --git a/src/soc/intel/braswell/pmutil.c b/src/soc/intel/braswell/pmutil.c new file mode 100644 index 0000000..044cbda --- /dev/null +++ b/src/soc/intel/braswell/pmutil.c @@ -0,0 +1,364 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <console/console.h> +#include <soc/iomap.h> +#include <soc/lpc.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <stdint.h> + +#if defined(__SMM__) + +static const device_t pcu_dev = PCI_DEV(0, PCU_DEV, 0); + +static inline device_t get_pcu_dev(void) +{ + return pcu_dev; +} + +#else /* !__SMM__ */ +#include <device/device.h> +#include <device/pci.h> + +static device_t pcu_dev; +static device_t get_pcu_dev(void) +{ + if (pcu_dev == NULL) + pcu_dev = dev_find_slot(0, PCI_DEVFN(PCU_DEV, 0)); + return pcu_dev; +} +#endif + +uint16_t get_pmbase(void) +{ + return pci_read_config16(get_pcu_dev(), ABASE) & 0xfff8; +} + +static void print_num_status_bits(int num_bits, uint32_t status, + const char * const bit_names[]) +{ + int i; + + if (!status) + return; + + for (i = num_bits - 1; i >= 0; i--) { + if (status & (1 << i)) { + if (bit_names[i]) + printk(BIOS_DEBUG, "%s ", bit_names[i]); + else + printk(BIOS_DEBUG, "BIT%d ", i); + } + } +} + +static void print_status_bits(uint32_t status, const char * const bit_names[]) +{ + print_num_status_bits(32, status, bit_names); +} + +static uint32_t print_smi_status(uint32_t smi_sts) +{ + static const char * const smi_sts_bits[] = { + [2] = "BIOS", + [4] = "SLP_SMI", + [5] = "APM", + [6] = "SWSMI_TMR", + [8] = "PM1", + [9] = "GPE0", + [12] = "DEVMON", + [13] = "TCO", + [14] = "PERIODIC", + [15] = "ILB", + [16] = "SMBUS_SMI", + [17] = "LEGACY_USB2", + [18] = "INTEL_USB2", + [20] = "PCI_EXP_SMI", + [26] = "SPI", + [28] = "PUNIT", + [29] = "GUNIT", + }; + + if (!smi_sts) + return 0; + + printk(BIOS_DEBUG, "SMI_STS: "); + print_status_bits(smi_sts, smi_sts_bits); + printk(BIOS_DEBUG, "\n"); + + return smi_sts; +} + +static uint32_t reset_smi_status(void) +{ + uint16_t pmbase = get_pmbase(); + uint32_t smi_sts = inl(pmbase + SMI_STS); + outl(smi_sts, pmbase + SMI_STS); + return smi_sts; +} + +uint32_t clear_smi_status(void) +{ + return print_smi_status(reset_smi_status()); +} + +void enable_smi(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t smi_en = inl(pmbase + SMI_EN); + smi_en |= mask; + outl(smi_en, pmbase + SMI_EN); +} + +void disable_smi(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t smi_en = inl(pmbase + SMI_EN); + smi_en &= ~mask; + outl(smi_en, pmbase + SMI_EN); +} + +void enable_pm1_control(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t pm1_cnt = inl(pmbase + PM1_CNT); + pm1_cnt |= mask; + outl(pm1_cnt, pmbase + PM1_CNT); +} + +void disable_pm1_control(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t pm1_cnt = inl(pmbase + PM1_CNT); + pm1_cnt &= ~mask; + outl(pm1_cnt, pmbase + PM1_CNT); +} + +static uint16_t reset_pm1_status(void) +{ + uint16_t pmbase = get_pmbase(); + uint16_t pm1_sts = inw(pmbase + PM1_STS); + outw(pm1_sts, pmbase + PM1_STS); + return pm1_sts; +} + +static uint16_t print_pm1_status(uint16_t pm1_sts) +{ + static const char * const pm1_sts_bits[] = { + [0] = "TMROF", + [5] = "GBL", + [8] = "PWRBTN", + [10] = "RTC", + [11] = "PRBTNOR", + [13] = "USB", + [14] = "PCIEXPWAK", + [15] = "WAK", + }; + + if (!pm1_sts) + return 0; + + printk(BIOS_SPEW, "PM1_STS: "); + print_status_bits(pm1_sts, pm1_sts_bits); + printk(BIOS_SPEW, "\n"); + + return pm1_sts; +} + +uint16_t clear_pm1_status(void) +{ + return print_pm1_status(reset_pm1_status()); +} + +void enable_pm1(uint16_t events) +{ + outw(events, get_pmbase() + PM1_EN); +} + +static uint32_t print_tco_status(uint32_t tco_sts) +{ + static const char * const tco_sts_bits[] = { + [3] = "TIMEOUT", + [17] = "SECOND_TO", + }; + + if (!tco_sts) + return 0; + + printk(BIOS_DEBUG, "TCO_STS: "); + print_status_bits(tco_sts, tco_sts_bits); + printk(BIOS_DEBUG, "\n"); + + return tco_sts; +} + +static uint32_t reset_tco_status(void) +{ + uint16_t pmbase = get_pmbase(); + uint32_t tco_sts = inl(pmbase + TCO_STS); + uint32_t tco_en = inl(pmbase + TCO1_CNT); + + outl(tco_sts, pmbase + TCO_STS); + return tco_sts & tco_en; +} + +uint32_t clear_tco_status(void) +{ + return print_tco_status(reset_tco_status()); +} + +void enable_gpe(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t gpe0_en = inl(pmbase + GPE0_EN); + gpe0_en |= mask; + outl(gpe0_en, pmbase + GPE0_EN); +} + +void disable_gpe(uint32_t mask) +{ + uint16_t pmbase = get_pmbase(); + uint32_t gpe0_en = inl(pmbase + GPE0_EN); + gpe0_en &= ~mask; + outl(gpe0_en, pmbase + GPE0_EN); +} + +void disable_all_gpe(void) +{ + disable_gpe(~0); +} + + +static uint32_t reset_gpe_status(void) +{ + uint16_t pmbase = get_pmbase(); + uint32_t gpe_sts = inl(pmbase + GPE0_STS); + outl(gpe_sts, pmbase + GPE0_STS); + return gpe_sts; +} + +static uint32_t print_gpe_sts(uint32_t gpe_sts) +{ + static const char * const gpe_sts_bits[] = { + [1] = "HOTPLUG", + [2] = "SWGPE", + [3] = "PCIE_WAKE0", + [4] = "PUNIT", + [5] = "GUNIT", + [6] = "PCIE_WAKE1", + [7] = "PCIE_WAKE2", + [8] = "PCIE_WAKE3", + [9] = "PCI_EXP", + [10] = "BATLOW", + [13] = "PME_B0", + [16] = "SUS_GPIO_0", + [17] = "SUS_GPIO_1", + [18] = "SUS_GPIO_2", + [19] = "SUS_GPIO_3", + [20] = "SUS_GPIO_4", + [21] = "SUS_GPIO_5", + [22] = "SUS_GPIO_6", + [23] = "SUS_GPIO_7", + [24] = "CORE_GPIO_0", + [25] = "CORE_GPIO_1", + [26] = "CORE_GPIO_2", + [27] = "CORE_GPIO_3", + [28] = "CORE_GPIO_4", + [29] = "CORE_GPIO_5", + [30] = "CORE_GPIO_6", + [31] = "CORE_GPIO_7", + }; + + if (!gpe_sts) + return gpe_sts; + + printk(BIOS_DEBUG, "GPE0a_STS: "); + print_status_bits(gpe_sts, gpe_sts_bits); + printk(BIOS_DEBUG, "\n"); + + return gpe_sts; +} + +uint32_t clear_gpe_status(void) +{ + return print_gpe_sts(reset_gpe_status()); +} + +static uint32_t reset_alt_status(void) +{ + uint16_t pmbase = get_pmbase(); + uint32_t alt_gpio_smi = inl(pmbase + ALT_GPIO_SMI); + outl(alt_gpio_smi, pmbase + ALT_GPIO_SMI); + return alt_gpio_smi; +} + +static uint32_t print_alt_sts(uint32_t alt_gpio_smi) +{ + uint32_t alt_gpio_sts; + static const char * const alt_gpio_smi_sts_bits[] = { + [0] = "SUS_GPIO_0", + [1] = "SUS_GPIO_1", + [2] = "SUS_GPIO_2", + [3] = "SUS_GPIO_3", + [4] = "SUS_GPIO_4", + [5] = "SUS_GPIO_5", + [6] = "SUS_GPIO_6", + [7] = "SUS_GPIO_7", + [8] = "CORE_GPIO_0", + [9] = "CORE_GPIO_1", + [10] = "CORE_GPIO_2", + [11] = "CORE_GPIO_3", + [12] = "CORE_GPIO_4", + [13] = "CORE_GPIO_5", + [14] = "CORE_GPIO_6", + [15] = "CORE_GPIO_7", + }; + + /* Status bits are in the upper 16 bits. */ + alt_gpio_sts = alt_gpio_smi >> 16; + if (!alt_gpio_sts) + return alt_gpio_smi; + + printk(BIOS_DEBUG, "ALT_GPIO_SMI: "); + print_num_status_bits(16, alt_gpio_sts, alt_gpio_smi_sts_bits); + printk(BIOS_DEBUG, "\n"); + + return alt_gpio_smi; +} + +uint32_t clear_alt_status(void) +{ + return print_alt_sts(reset_alt_status()); +} + +void clear_pmc_status(void) +{ + uint32_t prsts; + uint32_t gen_pmcon1; + + prsts = read32((void *)(PMC_BASE_ADDRESS + PRSTS)); + gen_pmcon1 = read32((void *)(PMC_BASE_ADDRESS + GEN_PMCON1)); + + /* Clear the status bits. The RPS field is cleared on a 0 write. */ + write32((void *)(PMC_BASE_ADDRESS + GEN_PMCON1), gen_pmcon1 & ~RPS); + write32((void *)(PMC_BASE_ADDRESS + PRSTS), prsts); +} diff --git a/src/soc/intel/braswell/ramstage.c b/src/soc/intel/braswell/ramstage.c new file mode 100644 index 0000000..823a672 --- /dev/null +++ b/src/soc/intel/braswell/ramstage.c @@ -0,0 +1,204 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/cpu.h> +#include <arch/acpi.h> +#include <bootstate.h> +#include <cbmem.h> +#include <console/console.h> +#include <cpu/intel/microcode.h> +#include <cpu/x86/cr.h> +#include <cpu/x86/msr.h> +#include <device/device.h> +#include <device/pci_def.h> +#include <device/pci_ops.h> +#include <fsp_util.h> +#include <romstage_handoff.h> +#include <soc/gpio.h> +#include <soc/lpc.h> +#include <soc/msr.h> +#include <soc/nvs.h> +#include <soc/pattrs.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <soc/ramstage.h> +#include <stdlib.h> + +#define SHOW_PATTRS 1 + +struct pattrs __global_pattrs; + +static void detect_num_cpus(struct pattrs *attrs) +{ + int ecx = 0; + + while (1) { + struct cpuid_result leaf_b; + + leaf_b = cpuid_ext(0xb, ecx); + + /* + * The SOC doesn't have hyperthreading so just determine the + * number of cores by from level type (ecx[15:8] == * 2). + */ + if ((leaf_b.ecx & 0xff00) == 0x0200) { + attrs->num_cpus = leaf_b.ebx & 0xffff; + break; + } + ecx++; + } +} + +static inline void fill_in_msr(msr_t *msr, int idx) +{ + *msr = rdmsr(idx); + if (SHOW_PATTRS) { + printk(BIOS_DEBUG, "msr(%x) = %08x%08x\n", + idx, msr->hi, msr->lo); + } +} + +static const char * const stepping_str[] = { + "A0", "A1", "B0", "B1", "B2", "B3", "C0" +}; + +static void fill_in_pattrs(void) +{ + device_t dev; + msr_t msr; + struct pattrs *attrs = (struct pattrs *)pattrs_get(); + + attrs->cpuid = cpuid_eax(1); + dev = dev_find_slot(0, PCI_DEVFN(LPC_DEV, LPC_FUNC)); + attrs->revid = pci_read_config8(dev, REVID); + /* The revision to stepping IDs have two values per metal stepping. */ + if (attrs->revid >= RID_C_STEPPING_START) { + attrs->stepping = (attrs->revid - RID_C_STEPPING_START) / 2; + attrs->stepping += STEP_C0; + } else if (attrs->revid >= RID_B_STEPPING_START) { + attrs->stepping = (attrs->revid - RID_B_STEPPING_START) / 2; + attrs->stepping += STEP_B0; + } else { + attrs->stepping = (attrs->revid - RID_A_STEPPING_START) / 2; + attrs->stepping += STEP_A0; + } + + attrs->microcode_patch = intel_microcode_find(); + attrs->address_bits = cpuid_eax(0x80000008) & 0xff; + detect_num_cpus(attrs); + + if (SHOW_PATTRS) { + printk(BIOS_DEBUG, "Cpuid %08x cpus %d rid %02x step %s\n", + attrs->cpuid, attrs->num_cpus, attrs->revid, + (attrs->stepping >= ARRAY_SIZE(stepping_str)) ? "??" : + stepping_str[attrs->stepping]); + } + + fill_in_msr(&attrs->platform_id, MSR_IA32_PLATFORM_ID); + fill_in_msr(&attrs->platform_info, MSR_PLATFORM_INFO); + + /* Set IA core speed ratio and voltages */ + fill_in_msr(&msr, MSR_IACORE_RATIOS); + attrs->iacore_ratios[IACORE_MIN] = msr.lo & 0x7f; + attrs->iacore_ratios[IACORE_LFM] = (msr.lo >> 8) & 0x7f; + attrs->iacore_ratios[IACORE_MAX] = (msr.lo >> 16) & 0x7f; + fill_in_msr(&msr, MSR_IACORE_TURBO_RATIOS); + attrs->iacore_ratios[IACORE_TURBO] = (msr.lo & 0xff); /* 1 core max */ + + fill_in_msr(&msr, MSR_IACORE_VIDS); + attrs->iacore_vids[IACORE_MIN] = msr.lo & 0x7f; + attrs->iacore_vids[IACORE_LFM] = (msr.lo >> 8) & 0x7f; + attrs->iacore_vids[IACORE_MAX] = (msr.lo >> 16) & 0x7f; + fill_in_msr(&msr, MSR_IACORE_TURBO_VIDS); + attrs->iacore_vids[IACORE_TURBO] = (msr.lo & 0xff); /* 1 core max */ + + /* Set bus clock speed */ + attrs->bclk_khz = BUS_FREQ_KHZ; +} + +static inline void set_acpi_sleep_type(int val) +{ +#if IS_ENABLED(CONFIG_HAVE_ACPI_RESUME) + acpi_slp_type = val; +#endif +} + +/* Save bit index for first enabled event in PM1_STS for _SB._SWS */ +static void s3_save_acpi_wake_source(global_nvs_t *gnvs) +{ + struct chipset_power_state *ps = cbmem_find(CBMEM_ID_POWER_STATE); + uint16_t pm1; + + if (!ps) + return; + + pm1 = ps->pm1_sts & ps->pm1_en; + + /* Scan for first set bit in PM1 */ + for (gnvs->pm1i = 0; gnvs->pm1i < 16; gnvs->pm1i++) { + if (pm1 & 1) + break; + pm1 >>= 1; + } + + /* If unable to determine then return -1 */ + if (gnvs->pm1i >= 16) + gnvs->pm1i = -1; + + printk(BIOS_DEBUG, "ACPI System Wake Source is PM1 Index %d\n", + gnvs->pm1i); +} + +static void s3_resume_prepare(void) +{ + global_nvs_t *gnvs; + struct romstage_handoff *romstage_handoff; + + gnvs = cbmem_add(CBMEM_ID_ACPI_GNVS, sizeof(global_nvs_t)); + + romstage_handoff = cbmem_find(CBMEM_ID_ROMSTAGE_INFO); + if (romstage_handoff == NULL || romstage_handoff->s3_resume == 0) { + if (gnvs != NULL) + memset(gnvs, 0, sizeof(global_nvs_t)); + set_acpi_sleep_type(0); + return; + } + + set_acpi_sleep_type(3); + + s3_save_acpi_wake_source(gnvs); +} + +void braswell_init_pre_device(struct soc_intel_braswell_config *config) +{ + struct soc_gpio_config *gpio_config; + + fill_in_pattrs(); + + /* Allow for SSE instructions to be executed. */ + write_cr4(read_cr4() | CR4_OSFXSR | CR4_OSXMMEXCPT); + + /* Indicate S3 resume to rest of ramstage. */ + s3_resume_prepare(); + + /* Get GPIO initial states from mainboard */ + gpio_config = mainboard_get_gpios(); + setup_soc_gpios(gpio_config, config->enable_xdp_tap); +} diff --git a/src/soc/intel/braswell/romstage/Makefile.inc b/src/soc/intel/braswell/romstage/Makefile.inc new file mode 100644 index 0000000..cd67f4b --- /dev/null +++ b/src/soc/intel/braswell/romstage/Makefile.inc @@ -0,0 +1,5 @@ +romstage-y += early_spi.c +romstage-y += gfx.c +romstage-y += pmc.c +romstage-y += romstage.c + diff --git a/src/soc/intel/braswell/romstage/early_spi.c b/src/soc/intel/braswell/romstage/early_spi.c new file mode 100644 index 0000000..5bff858 --- /dev/null +++ b/src/soc/intel/braswell/romstage/early_spi.c @@ -0,0 +1,68 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google Inc. All rights reserved. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <delay.h> +#include <console/console.h> + +#include <soc/iomap.h> +#include <soc/romstage.h> +#include <soc/spi.h> + +#define SPI_CYCLE_DELAY 10 /* 10us */ +#define SPI_CYCLE_TIMEOUT (400000 / SPI_CYCLE_DELAY) /* 400ms */ + +#define SPI8(x) (*((volatile u8 *)(SPI_BASE_ADDRESS + (x)))) +#define SPI16(x) (*((volatile u16 *)(SPI_BASE_ADDRESS + (x)))) +#define SPI32(x) (*((volatile u32 *)(SPI_BASE_ADDRESS + (x)))) + +/* + * Minimal set of commands to read wpsr from SPI. Don't use this code outside + * romstage -- it trashes the opmenu table. + * Returns 0 on success, < 0 on failure. + */ +int early_spi_read_wpsr(u8 *sr) +{ + int timeout = SPI_CYCLE_TIMEOUT; + + /* No address associated with rdsr */ + SPI8(OPTYPE) = 0x0; + /* Setup opcode[0] = read wpsr */ + SPI8(OPMENU0) = 0x5; + + /* Start transaction */ + SPI16(SSFC) = DATA_CYCLE | SPI_CYCLE_GO; + + /* Wait for error / complete status */ + while (timeout--) { + u16 status = SPI16(SSFS); + if (status & FLASH_CYCLE_ERROR) { + printk(BIOS_ERR, "SPI rdsr failed\n"); + return -1; + } else if (status & CYCLE_DONE_STATUS) + break; + + udelay(SPI_CYCLE_DELAY); + } + + *sr = SPI32(FDATA0) & 0xff; + return 0; +} diff --git a/src/soc/intel/braswell/romstage/gfx.c b/src/soc/intel/braswell/romstage/gfx.c new file mode 100644 index 0000000..e7b0ad3 --- /dev/null +++ b/src/soc/intel/braswell/romstage/gfx.c @@ -0,0 +1,53 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <soc/gfx.h> +#include <soc/pci_devs.h> +#include <soc/romstage.h> + +void gfx_init(void) +{ + uint32_t ggc; + uint8_t msac; + const unsigned int gfx_dev = PCI_DEV(0, GFX_DEV, GFX_FUNC); + + /* + * The GFX device needs to set the aperture, gtt stolen size, and + * graphics stolen memory stolen size before running MRC. For now + * just hard code the defaults. Options can be added to the device + * tree if needed. + */ + + ggc = pci_read_config32(gfx_dev, GGC); + msac = pci_read_config8(gfx_dev, MSAC); + + ggc &= ~(GGC_GTT_SIZE_MASK | GGC_GSM_SIZE_MASK); + /* 32MB GSM is not supported with <C0 stepping. */ + ggc |= GGC_GTT_SIZE_2MB | GGC_GSM_SIZE_64MB; + /* Enable VGA decoding as well. */ + ggc &= ~(GGC_VGA_DISABLE); + + msac &= ~(APERTURE_SIZE_MASK); + msac |= APERTURE_SIZE_256MB; + + pci_write_config32(gfx_dev, GGC, ggc); + pci_write_config8(gfx_dev, MSAC, msac); +} diff --git a/src/soc/intel/braswell/romstage/pmc.c b/src/soc/intel/braswell/romstage/pmc.c new file mode 100644 index 0000000..7d2ca14 --- /dev/null +++ b/src/soc/intel/braswell/romstage/pmc.c @@ -0,0 +1,32 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <soc/iomap.h> +#include <soc/romstage.h> + +void tco_disable(void) +{ + uint32_t reg; + + reg = inl(ACPI_BASE_ADDRESS + TCO1_CNT); + reg |= TCO_TMR_HALT; + outl(reg, ACPI_BASE_ADDRESS + TCO1_CNT); +} diff --git a/src/soc/intel/braswell/romstage/romstage.c b/src/soc/intel/braswell/romstage/romstage.c new file mode 100644 index 0000000..a795055 --- /dev/null +++ b/src/soc/intel/braswell/romstage/romstage.c @@ -0,0 +1,202 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cbmem.h> +#include <stddef.h> +#include <arch/early_variables.h> +#include <arch/cpu.h> +#include <arch/io.h> +#include <arch/cbfs.h> +#include <arch/stages.h> +#include <cbmem.h> +#include <cpu/x86/mtrr.h> +#include <console/console.h> +#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC) +#include <ec/google/chromeec/ec.h> +#include <ec/google/chromeec/ec_commands.h> +#endif +#include <elog.h> +#include <romstage_handoff.h> +#include <timestamp.h> +#include <ramstage_cache.h> +#include <reset.h> +#include <vendorcode/google/chromeos/chromeos.h> +#include <fsp_util.h> +#include <soc/intel/common/mrc_cache.h> + +#include <soc/gpio.h> +#include <soc/iomap.h> +#include <soc/iosf.h> +#include <soc/lpc.h> +#include <soc/pci_devs.h> +#include <soc/romstage.h> +#include <soc/smm.h> +#include <soc/spi.h> + +void program_base_addresses(void) +{ + uint32_t reg; + const uint32_t lpc_dev = PCI_DEV(0, LPC_DEV, LPC_FUNC); + + /* Memory Mapped IO registers. */ + reg = PMC_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, PBASE, reg); + reg = IO_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, IOBASE, reg); + reg = ILB_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, IBASE, reg); + reg = SPI_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, SBASE, reg); + reg = MPHY_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, MPBASE, reg); + reg = PUNIT_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, PUBASE, reg); + reg = RCBA_BASE_ADDRESS | 1; + pci_write_config32(lpc_dev, RCBA, reg); + + /* IO Port Registers. */ + reg = ACPI_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, ABASE, reg); + reg = GPIO_BASE_ADDRESS | 2; + pci_write_config32(lpc_dev, GBASE, reg); +} + +void spi_init(void) +{ + void *scs = (void *)(SPI_BASE_ADDRESS + SCS); + void *bcr = (void *)(SPI_BASE_ADDRESS + BCR); + uint32_t reg; + + /* Disable generating SMI when setting WPD bit. */ + write32(scs, read32(scs) & ~SMIWPEN); + /* + * Enable caching and prefetching in the SPI controller. Disable + * the SMM-only BIOS write and set WPD bit. + */ + reg = (read32(bcr) & ~SRC_MASK) | SRC_CACHE_PREFETCH | BCR_WPD; + reg &= ~EISS; + write32(bcr, reg); +} + +static struct chipset_power_state power_state CAR_GLOBAL; + +void migrate_power_state(void) +{ + struct chipset_power_state *ps_cbmem; + struct chipset_power_state *ps_car; + + ps_car = car_get_var_ptr(&power_state); + ps_cbmem = cbmem_add(CBMEM_ID_POWER_STATE, sizeof(*ps_cbmem)); + + if (ps_cbmem == NULL) { + printk(BIOS_DEBUG, "Not adding power state to cbmem!\n"); + return; + } + memcpy(ps_cbmem, ps_car, sizeof(*ps_cbmem)); +} +ROMSTAGE_CBMEM_INIT_HOOK(migrate_power_state); + +struct chipset_power_state *fill_power_state(void) +{ + struct chipset_power_state *ps = car_get_var_ptr(&power_state); + + ps->pm1_sts = inw(ACPI_BASE_ADDRESS + PM1_STS); + ps->pm1_en = inw(ACPI_BASE_ADDRESS + PM1_EN); + ps->pm1_cnt = inl(ACPI_BASE_ADDRESS + PM1_CNT); + ps->gpe0_sts = inl(ACPI_BASE_ADDRESS + GPE0_STS); + ps->gpe0_en = inl(ACPI_BASE_ADDRESS + GPE0_EN); + ps->tco_sts = inl(ACPI_BASE_ADDRESS + TCO_STS); + ps->prsts = read32((void *)(PMC_BASE_ADDRESS + PRSTS)); + ps->gen_pmcon1 = read32((void *)(PMC_BASE_ADDRESS + GEN_PMCON1)); + ps->gen_pmcon2 = read32((void *)(PMC_BASE_ADDRESS + GEN_PMCON2)); + + ps->prev_sleep_state = chipset_prev_sleep_state(ps); + + return ps; +} + +/* Return 0, 3, or 5 to indicate the previous sleep state. */ +int chipset_prev_sleep_state(struct chipset_power_state *ps) +{ + /* Default to S0. */ + int prev_sleep_state = SLEEP_STATE_S0; + + if (ps->pm1_sts & WAK_STS) { + switch ((ps->pm1_cnt & SLP_TYP) >> SLP_TYP_SHIFT) { + #if IS_ENABLED(CONFIG_HAVE_ACPI_RESUME) + case SLP_TYP_S3: + prev_sleep_state = SLEEP_STATE_S3; + break; + #endif + case SLP_TYP_S5: + prev_sleep_state = SLEEP_STATE_S5; + break; + } + + /* Clear SLP_TYP. */ + outl(ps->pm1_cnt & ~(SLP_TYP), ACPI_BASE_ADDRESS + PM1_CNT); + } + + if (ps->gen_pmcon1 & (PWR_FLR | SUS_PWR_FLR)) + prev_sleep_state = SLEEP_STATE_S5; + + return prev_sleep_state; +} + +void ramstage_cache_invalid(struct ramstage_cache *cache) +{ +#if IS_ENABLED(CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE) + /* Perform cold reset on invalid ramstage cache. */ + hard_reset(); +#endif +} + +/* SOC initialization before the console is enabled */ +void soc_pre_console_init(struct romstage_params *params) +{ + /* Early chipset initialization */ + program_base_addresses(); + tco_disable(); +} + +/* SOC initialization after console is enabled */ +void soc_romstage_init(struct romstage_params *params) +{ + /* Continue chipset initialization */ + spi_init(); + gfx_init(); + +#if IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC) + /* Ensure the EC is in the right mode for recovery */ + google_chromeec_early_init(); +#endif +} + +/* SOC initialization after RAM is enabled */ +void soc_after_ram_init(struct romstage_params *params) +{ + u32 value; + + /* Make sure that E0000 and F0000 are RAM */ + printk(BIOS_DEBUG, "Disable ROM shadow below 1MB.\n"); + value = iosf_bunit_read(BUNIT_BMISC); + value |= 3; + iosf_bunit_write(BUNIT_BMISC, value); +} diff --git a/src/soc/intel/braswell/sata.c b/src/soc/intel/braswell/sata.c new file mode 100644 index 0000000..98768d1 --- /dev/null +++ b/src/soc/intel/braswell/sata.c @@ -0,0 +1,64 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> +#include <soc/sata.h> +#include <console/console.h> +#include <delay.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> + +#include "chip.h" + +typedef struct soc_intel_braswell_config config_t; + +static void sata_init(struct device *dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); +} + +static void sata_enable(device_t dev) +{ + southcluster_enable_dev(dev); +} + +static struct device_operations sata_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = sata_init, + .enable = sata_enable, + .ops_pci = &soc_pci_ops, +}; + +static const unsigned short pci_device_ids[] = { + AHCI1_DEVID, /* AHCI */ + 0, +}; + +static const struct pci_driver braswell_sata __pci_driver = { + .ops = &sata_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .devices = pci_device_ids, +}; diff --git a/src/soc/intel/braswell/scc.c b/src/soc/intel/braswell/scc.c new file mode 100644 index 0000000..3f1d2fa --- /dev/null +++ b/src/soc/intel/braswell/scc.c @@ -0,0 +1,73 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include <cbmem.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> +#include <soc/iosf.h> +#include <soc/nvs.h> +#include <soc/ramstage.h> + +void scc_enable_acpi_mode(device_t dev, int iosf_reg, int nvs_index) +{ + struct reg_script ops[] = { + /* Disable PCI interrupt, enable Memory and Bus Master */ + REG_PCI_OR32(PCI_COMMAND, + PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | (1<<10)), + /* Enable ACPI mode */ + REG_IOSF_OR(IOSF_PORT_SCC, iosf_reg, + SCC_CTL_PCI_CFG_DIS | SCC_CTL_ACPI_INT_EN), + REG_SCRIPT_END + }; + struct resource *bar; + global_nvs_t *gnvs; + + printk(BIOS_SPEW, "%s/%s ( %s, 0x%08x, 0x%08x )\n", + __FILE__, __func__, dev_name(dev), iosf_reg, nvs_index); + + /* Find ACPI NVS to update BARs */ + gnvs = cbmem_find(CBMEM_ID_ACPI_GNVS); + if (!gnvs) { + printk(BIOS_ERR, "Unable to locate Global NVS\n"); + return; + } + + /* Save BAR0 and BAR1 to ACPI NVS */ + bar = find_resource(dev, PCI_BASE_ADDRESS_0); + if (bar) + gnvs->dev.scc_bar0[nvs_index] = (u32)bar->base; + + /* TODO: Finding resource from PCI_BASE_ADDRESS_1 is failing */ + /* + bar = find_resource(dev, PCI_BASE_ADDRESS_1); + if (bar) + gnvs->dev.scc_bar1[nvs_index] = (u32)bar->base; + */ + + /* Device is enabled in ACPI mode */ + gnvs->dev.scc_en[nvs_index] = 1; + + /* Put device in ACPI mode */ + reg_script_run_on_dev(dev, ops); +} diff --git a/src/soc/intel/braswell/sd.c b/src/soc/intel/braswell/sd.c new file mode 100644 index 0000000..986823f --- /dev/null +++ b/src/soc/intel/braswell/sd.c @@ -0,0 +1,72 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <reg_script.h> + +#include <soc/iosf.h> +#include <soc/nvs.h> +#include <soc/pci_devs.h> +#include <soc/ramstage.h> +#include "chip.h" + +#define CAP_OVERRIDE_LOW 0xa0 +#define CAP_OVERRIDE_HIGH 0xa4 +# define USE_CAP_OVERRIDES (1 << 31) + +static void sd_init(device_t dev) +{ + struct soc_intel_braswell_config *config = dev->chip_info; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + if (config == NULL) + return; + + if (config->sdcard_cap_low != 0 || config->sdcard_cap_high != 0) { + printk(BIOS_DEBUG, "Overriding SD Card controller caps.\n"); + pci_write_config32(dev, CAP_OVERRIDE_LOW, + config->sdcard_cap_low); + pci_write_config32(dev, CAP_OVERRIDE_HIGH, + config->sdcard_cap_high | USE_CAP_OVERRIDES); + } + + if (config->sd_acpi_mode) + scc_enable_acpi_mode(dev, SCC_SD_CTL, SCC_NVS_SD); +} + +static const struct device_operations device_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = sd_init, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = SD_DEVID, +}; diff --git a/src/soc/intel/braswell/smihandler.c b/src/soc/intel/braswell/smihandler.c new file mode 100644 index 0000000..de4177f --- /dev/null +++ b/src/soc/intel/braswell/smihandler.c @@ -0,0 +1,435 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/hlt.h> +#include <arch/io.h> +#include <console/console.h> +#include <cpu/x86/cache.h> +#include <cpu/x86/smm.h> +#include <device/pci_def.h> +#include <elog.h> +#include <soc/nvs.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <spi-generic.h> +#include <stdint.h> +#include <stdlib.h> + +/* GNVS needs to be set by coreboot initiating a software SMI. */ +static global_nvs_t *gnvs; +static int smm_initialized; + +int southbridge_io_trap_handler(int smif) +{ + switch (smif) { + case 0x32: + printk(BIOS_DEBUG, "OS Init\n"); + /* + * gnvs->smif: + * On success, the IO Trap Handler returns 0 + * On failure, the IO Trap Handler returns a value != 0 + */ + gnvs->smif = 0; + return 1; /* IO trap handled */ + } + + /* Not handled */ + return 0; +} + +void southbridge_smi_set_eos(void) +{ + enable_smi(EOS); +} + +global_nvs_t *smm_get_gnvs(void) +{ + return gnvs; +} + +static void busmaster_disable_on_bus(int bus) +{ + int slot, func; + unsigned int val; + unsigned char hdr; + + for (slot = 0; slot < 0x20; slot++) { + for (func = 0; func < 8; func++) { + u32 reg32; + device_t dev = PCI_DEV(bus, slot, func); + + val = pci_read_config32(dev, PCI_VENDOR_ID); + + if (val == 0xffffffff || val == 0x00000000 || + val == 0x0000ffff || val == 0xffff0000) + continue; + + /* Disable Bus Mastering for this one device */ + reg32 = pci_read_config32(dev, PCI_COMMAND); + reg32 &= ~PCI_COMMAND_MASTER; + pci_write_config32(dev, PCI_COMMAND, reg32); + + /* If this is a bridge, then follow it. */ + hdr = pci_read_config8(dev, PCI_HEADER_TYPE); + hdr &= 0x7f; + if (hdr == PCI_HEADER_TYPE_BRIDGE || + hdr == PCI_HEADER_TYPE_CARDBUS) { + unsigned int buses; + buses = pci_read_config32(dev, PCI_PRIMARY_BUS); + busmaster_disable_on_bus((buses >> 8) & 0xff); + } + } + } +} + +static void southbridge_smi_sleep(void) +{ + uint32_t reg32; + uint8_t slp_typ; + uint16_t pmbase = get_pmbase(); + + /* First, disable further SMIs */ + disable_smi(SLP_SMI_EN); + + /* Figure out SLP_TYP */ + reg32 = inl(pmbase + PM1_CNT); + printk(BIOS_SPEW, "SMI#: SLP = 0x%08x\n", reg32); + slp_typ = (reg32 >> 10) & 7; + + /* Do any mainboard sleep handling */ + mainboard_smi_sleep(slp_typ-2); + +#if IS_ENABLED(CONFIG_ELOG_GSMI) + /* Log S3, S4, and S5 entry */ + if (slp_typ >= 5) + elog_add_event_byte(ELOG_TYPE_ACPI_ENTER, slp_typ-2); +#endif + + /* Next, do the deed. */ + + switch (slp_typ) { + case SLP_TYP_S0: + printk(BIOS_DEBUG, "SMI#: Entering S0 (On)\n"); + break; + case SLP_TYP_S1: + printk(BIOS_DEBUG, "SMI#: Entering S1 (Assert STPCLK#)\n"); + break; + case SLP_TYP_S3: + printk(BIOS_DEBUG, "SMI#: Entering S3 (Suspend-To-RAM)\n"); + + /* Invalidate the cache before going to S3 */ + wbinvd(); + break; + case SLP_TYP_S4: + printk(BIOS_DEBUG, "SMI#: Entering S4 (Suspend-To-Disk)\n"); + break; + case SLP_TYP_S5: + printk(BIOS_DEBUG, "SMI#: Entering S5 (Soft Power off)\n"); + + /* Disable all GPE */ + disable_all_gpe(); + + /* also iterates over all bridges on bus 0 */ + busmaster_disable_on_bus(0); + break; + default: + printk(BIOS_DEBUG, "SMI#: ERROR: SLP_TYP reserved\n"); + break; + } + /* Clear pending wake status bit to avoid immediate wake */ + write32((void *)(0xfed88000 + 0x0200), + read32((void *)(0xfed88000 + 0x0200))); + + /* + * Write back to the SLP register to cause the originally intended + * event again. We need to set BIT13 (SLP_EN) though to make the + * sleep happen. + */ + enable_pm1_control(SLP_EN); + + /* Make sure to stop executing code here for S3/S4/S5 */ + if (slp_typ > 1) + hlt(); + + /* + * In most sleep states, the code flow of this function ends at + * the line above. However, if we entered sleep state S1 and wake + * up again, we will continue to execute code in this function. + */ + reg32 = inl(pmbase + PM1_CNT); + if (reg32 & SCI_EN) { + /* The OS is not an ACPI OS, so we set the state to S0 */ + disable_pm1_control(SLP_EN | SLP_TYP); + } +} + +/* + * Look for Synchronous IO SMI and use save state from that + * core in case we are not running on the same core that + * initiated the IO transaction. + */ +static em64t100_smm_state_save_area_t *smi_apmc_find_state_save(uint8_t cmd) +{ + em64t100_smm_state_save_area_t *state; + int node; + + /* Check all nodes looking for the one that issued the IO */ + for (node = 0; node < CONFIG_MAX_CPUS; node++) { + state = smm_get_save_state(node); + + /* Check for Synchronous IO (bit0==1) */ + if (!(state->io_misc_info & (1 << 0))) + continue; + + /* Make sure it was a write (bit4==0) */ + if (state->io_misc_info & (1 << 4)) + continue; + + /* Check for APMC IO port */ + if (((state->io_misc_info >> 16) & 0xff) != APM_CNT) + continue; + + /* Check AX against the requested command */ + if ((state->rax & 0xff) != cmd) + continue; + + return state; + } + + return NULL; +} + +#if IS_ENABLED(CONFIG_ELOG_GSMI) +static void southbridge_smi_gsmi(void) +{ + u32 *ret, *param; + uint8_t sub_command; + em64t100_smm_state_save_area_t *io_smi = + smi_apmc_find_state_save(ELOG_GSMI_APM_CNT); + + if (!io_smi) + return; + + /* Command and return value in EAX */ + ret = (u32 *)&io_smi->rax; + sub_command = (uint8_t)(*ret >> 8); + + /* Parameter buffer in EBX */ + param = (u32 *)&io_smi->rbx; + + /* drivers/elog/gsmi.c */ + *ret = gsmi_exec(sub_command, param); +} +#endif + +static void finalize(void) +{ + static int finalize_done; + + if (finalize_done) { + printk(BIOS_DEBUG, "SMM already finalized.\n"); + return; + } + finalize_done = 1; + +#if IS_ENABLED(CONFIG_SPI_FLASH_SMM) + /* Re-init SPI driver to handle locked BAR */ + spi_init(); +#endif +} + +static void southbridge_smi_apmc(void) +{ + uint8_t reg8; + em64t100_smm_state_save_area_t *state; + + /* Emulate B2 register as the FADT / Linux expects it */ + + reg8 = inb(APM_CNT); + switch (reg8) { + case APM_CNT_CST_CONTROL: + /* + * Calling this function seems to cause + * some kind of race condition in Linux + * and causes a kernel oops + */ + printk(BIOS_DEBUG, "C-state control\n"); + break; + case APM_CNT_PST_CONTROL: + /* + * Calling this function seems to cause + * some kind of race condition in Linux + * and causes a kernel oops + */ + printk(BIOS_DEBUG, "P-state control\n"); + break; + case APM_CNT_ACPI_DISABLE: + disable_pm1_control(SCI_EN); + printk(BIOS_DEBUG, "SMI#: ACPI disabled.\n"); + break; + case APM_CNT_ACPI_ENABLE: + enable_pm1_control(SCI_EN); + printk(BIOS_DEBUG, "SMI#: ACPI enabled.\n"); + break; + case APM_CNT_GNVS_UPDATE: + if (smm_initialized) { + printk(BIOS_DEBUG, + "SMI#: SMM structures already initialized!\n"); + return; + } + state = smi_apmc_find_state_save(reg8); + if (state) { + /* EBX in the state save contains the GNVS pointer */ + gnvs = (global_nvs_t *)((uint32_t)state->rbx); + smm_initialized = 1; + printk(BIOS_DEBUG, "SMI#: Setting GNVS to %p\n", gnvs); + } + break; +#if IS_ENABLED(CONFIG_ELOG_GSMI) + case ELOG_GSMI_APM_CNT: + southbridge_smi_gsmi(); + break; +#endif + case APM_CNT_FINALIZE: + finalize(); + break; + } + + mainboard_smi_apmc(reg8); +} + +static void southbridge_smi_pm1(void) +{ + uint16_t pm1_sts = clear_pm1_status(); + + /* + * While OSPM is not active, poweroff immediately + * on a power button event. + */ + if (pm1_sts & PWRBTN_STS) { + /* power button pressed */ +#if IS_ENABLED(CONFIG_ELOG_GSMI) + elog_add_event(ELOG_TYPE_POWER_BUTTON); +#endif + disable_pm1_control(-1UL); + enable_pm1_control(SLP_EN | (SLP_TYP_S5 << SLP_TYP_SHIFT)); + } +} + +static void southbridge_smi_gpe0(void) +{ + clear_gpe_status(); +} + +static void southbridge_smi_tco(void) +{ + uint32_t tco_sts = clear_tco_status(); + + /* Any TCO event? */ + if (!tco_sts) + return; + + if (tco_sts & TCO_TIMEOUT) { /* TIMEOUT */ + /* Handle TCO timeout */ + printk(BIOS_DEBUG, "TCO Timeout.\n"); + } +} + +static void southbridge_smi_periodic(void) +{ + uint32_t reg32; + + reg32 = inl(get_pmbase() + SMI_EN); + + /* Are periodic SMIs enabled? */ + if ((reg32 & PERIODIC_EN) == 0) + return; + + printk(BIOS_DEBUG, "Periodic SMI.\n"); +} + +typedef void (*smi_handler_t)(void); + +static const smi_handler_t southbridge_smi[32] = { + NULL, /* [0] reserved */ + NULL, /* [1] reserved */ + NULL, /* [2] BIOS_STS */ + NULL, /* [3] LEGACY_USB_STS */ + southbridge_smi_sleep, /* [4] SLP_SMI_STS */ + southbridge_smi_apmc, /* [5] APM_STS */ + NULL, /* [6] SWSMI_TMR_STS */ + NULL, /* [7] reserved */ + southbridge_smi_pm1, /* [8] PM1_STS */ + southbridge_smi_gpe0, /* [9] GPE0_STS */ + NULL, /* [10] reserved */ + NULL, /* [11] reserved */ + NULL, /* [12] reserved */ + southbridge_smi_tco, /* [13] TCO_STS */ + southbridge_smi_periodic, /* [14] PERIODIC_STS */ + NULL, /* [15] SERIRQ_SMI_STS */ + NULL, /* [16] SMBUS_SMI_STS */ + NULL, /* [17] LEGACY_USB2_STS */ + NULL, /* [18] INTEL_USB2_STS */ + NULL, /* [19] reserved */ + NULL, /* [20] PCI_EXP_SMI_STS */ + NULL, /* [21] reserved */ + NULL, /* [22] reserved */ + NULL, /* [23] reserved */ + NULL, /* [24] reserved */ + NULL, /* [25] reserved */ + NULL, /* [26] SPI_STS */ + NULL, /* [27] reserved */ + NULL, /* [28] PUNIT */ + NULL, /* [29] GUNIT */ + NULL, /* [30] reserved */ + NULL /* [31] reserved */ +}; + +void southbridge_smi_handler(void) +{ + int i; + uint32_t smi_sts; + + /* + * We need to clear the SMI status registers, or we won't see what's + * happening in the following calls. + */ + smi_sts = clear_smi_status(); + + /* Call SMI sub handler for each of the status bits */ + for (i = 0; i < ARRAY_SIZE(southbridge_smi); i++) { + if (!(smi_sts & (1 << i))) + continue; + + if (southbridge_smi[i] != NULL) { + southbridge_smi[i](); + } else { + printk(BIOS_DEBUG, + "SMI_STS[%d] occured, but no " + "handler available.\n", i); + } + } + + /* + * The GPIO SMI events do not have a status bit in SMI_STS. Therefore, + * these events need to be cleared and checked unconditionally. + */ + mainboard_smi_gpi(clear_alt_status()); +} diff --git a/src/soc/intel/braswell/smm.c b/src/soc/intel/braswell/smm.c new file mode 100644 index 0000000..51610b8 --- /dev/null +++ b/src/soc/intel/braswell/smm.c @@ -0,0 +1,137 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; version 2 of + * the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <console/console.h> +#include <cpu/cpu.h> +#include <cpu/x86/smm.h> +#include <device/device.h> +#include <device/pci.h> +#include <soc/iomap.h> +#include <soc/pm.h> +#include <soc/smm.h> +#include <string.h> + +/* Save settings which will be committed in SMI functions. */ +static uint32_t smm_save_params[SMM_SAVE_PARAM_COUNT]; + +void smm_init(void) +{ +} + +void southcluster_smm_save_param(int param, uint32_t data) +{ + smm_save_params[param] = data; +} + +void southcluster_smm_clear_state(void) +{ + uint32_t smi_en; + + /* Log events from chipset before clearing */ + southcluster_log_state(); + + printk(BIOS_DEBUG, "Initializing Southbridge SMI..."); + printk(BIOS_SPEW, " pmbase = 0x%04x\n", get_pmbase()); + + smi_en = inl(get_pmbase() + SMI_EN); + if (smi_en & APMC_EN) { + printk(BIOS_INFO, "SMI# handler already enabled?\n"); + return; + } + + /* Dump and clear status registers */ + clear_smi_status(); + clear_pm1_status(); + clear_tco_status(); + clear_gpe_status(); + clear_alt_status(); + clear_pmc_status(); +} + +static void southcluster_smm_route_gpios(void) +{ + void *gpio_rout = (void *)(PMC_BASE_ADDRESS + GPIO_ROUT); + const unsigned short alt_gpio_smi = ACPI_BASE_ADDRESS + ALT_GPIO_SMI; + uint32_t alt_gpio_reg = 0; + uint32_t route_reg = smm_save_params[SMM_SAVE_PARAM_GPIO_ROUTE]; + int i; + + printk(BIOS_DEBUG, "GPIO_ROUT = %08x\n", route_reg); + + /* Start the routing for the specific gpios. */ + write32(gpio_rout, route_reg); + + /* Enable SMIs for the gpios that are set to trigger the SMI. */ + for (i = 0; i < 16; i++) { + if ((route_reg & ROUTE_MASK) == ROUTE_SMI) + alt_gpio_reg |= (1 << i); + route_reg >>= 2; + } + printk(BIOS_DEBUG, "ALT_GPIO_SMI = %08x\n", alt_gpio_reg); + + outl(alt_gpio_reg, alt_gpio_smi); +} + +void southcluster_smm_enable_smi(void) +{ + uint16_t pm1_events = PWRBTN_EN | GBL_EN; + + printk(BIOS_DEBUG, "Enabling SMIs.\n"); + if (!smm_save_params[SMM_SAVE_PARAM_PCIE_WAKE_ENABLE]) + pm1_events |= PCIEXPWAK_DIS; + enable_pm1(pm1_events); + disable_gpe(PME_B0_EN); + + /* Set up the GPIO route. */ + southcluster_smm_route_gpios(); + + /* + * Enable SMI generation: + * - on APMC writes (io 0xb2) + * - on writes to SLP_EN (sleep states) + * - on writes to GBL_RLS (bios commands) + * No SMIs: + * - on TCO events + * - on microcontroller writes (io 0x62/0x66) + */ + enable_smi(APMC_EN | SLP_SMI_EN | GBL_SMI_EN | EOS); +} + +void smm_setup_structures(void *gnvs, void *tcg, void *smi1) +{ + /* + * Issue SMI to set the gnvs pointer in SMM. + * tcg and smi1 are unused. + * + * EAX = APM_CNT_GNVS_UPDATE + * EBX = gnvs pointer + * EDX = APM_CNT + */ + asm volatile ( + "outb %%al, %%dx\n\t" + : /* ignore result */ + : "a" (APM_CNT_GNVS_UPDATE), + "b" ((uint32_t)gnvs), + "d" (APM_CNT) + ); +} diff --git a/src/soc/intel/braswell/southcluster.c b/src/soc/intel/braswell/southcluster.c new file mode 100644 index 0000000..48a4b79 --- /dev/null +++ b/src/soc/intel/braswell/southcluster.c @@ -0,0 +1,550 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2008-2009 coresystems GmbH + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/io.h> +#include <arch/acpi.h> +#include <bootstate.h> +#include <cbmem.h> +#include "chip.h" +#include <console/console.h> +#include <cpu/x86/smm.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <pc80/mc146818rtc.h> +#include <romstage_handoff.h> +#include <soc/iomap.h> +#include <soc/irq.h> +#include <soc/lpc.h> +#include <soc/nvs.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <soc/ramstage.h> +#include <soc/spi.h> +#include <stdint.h> +#include <uart8250.h> + +static inline void +add_mmio_resource(device_t dev, int i, unsigned long addr, unsigned long size) +{ + printk(BIOS_SPEW, "%s/%s ( %s, 0x%016lx, 0x%016lx )\n", + __FILE__, __func__, dev_name(dev), addr, size); + mmio_resource(dev, i, addr >> 10, size >> 10); +} + +static void sc_add_mmio_resources(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + add_mmio_resource(dev, 0xfeb, ABORT_BASE_ADDRESS, ABORT_BASE_SIZE); + add_mmio_resource(dev, PBASE, PMC_BASE_ADDRESS, PMC_BASE_SIZE); + add_mmio_resource(dev, IOBASE, IO_BASE_ADDRESS, IO_BASE_SIZE); + add_mmio_resource(dev, IBASE, ILB_BASE_ADDRESS, ILB_BASE_SIZE); + add_mmio_resource(dev, SBASE, SPI_BASE_ADDRESS, SPI_BASE_SIZE); + add_mmio_resource(dev, MPBASE, MPHY_BASE_ADDRESS, MPHY_BASE_SIZE); + add_mmio_resource(dev, PUBASE, PUNIT_BASE_ADDRESS, PUNIT_BASE_SIZE); + add_mmio_resource(dev, RCBA, RCBA_BASE_ADDRESS, RCBA_BASE_SIZE); +} + +/* Default IO range claimed by the LPC device. The upper bound is exclusive. */ +#define LPC_DEFAULT_IO_RANGE_LOWER 0 +#define LPC_DEFAULT_IO_RANGE_UPPER 0x1000 + +static inline int io_range_in_default(int base, int size) +{ + /* Does it start above the range? */ + if (base >= LPC_DEFAULT_IO_RANGE_UPPER) + return 0; + + /* Is it entirely contained? */ + if (base >= LPC_DEFAULT_IO_RANGE_LOWER && + (base + size) < LPC_DEFAULT_IO_RANGE_UPPER) + return 1; + + /* This will return not in range for partial overlaps. */ + return 0; +} + +/* + * Note: this function assumes there is no overlap with the default LPC device's + * claimed range: LPC_DEFAULT_IO_RANGE_LOWER -> LPC_DEFAULT_IO_RANGE_UPPER. + */ +static void sc_add_io_resource(device_t dev, int base, int size, int index) +{ + struct resource *res; + + printk(BIOS_SPEW, "%s/%s ( %s, 0x%08x, 0x%08x, 0x%08x )\n", + __FILE__, __func__, dev_name(dev), base, size, index); + + if (io_range_in_default(base, size)) + return; + + res = new_resource(dev, index); + res->base = base; + res->size = size; + res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; +} + +static void sc_add_io_resources(device_t dev) +{ + struct resource *res; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Add the default claimed IO range for the LPC device. */ + res = new_resource(dev, 0); + res->base = LPC_DEFAULT_IO_RANGE_LOWER; + res->size = LPC_DEFAULT_IO_RANGE_UPPER - LPC_DEFAULT_IO_RANGE_LOWER; + res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; + + /* GPIO */ + sc_add_io_resource(dev, GPIO_BASE_ADDRESS, 256, GBASE); + + /* ACPI */ + sc_add_io_resource(dev, ACPI_BASE_ADDRESS, 128, ABASE); +} + +static void sc_read_resources(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Get the normal PCI resources of this device. */ + pci_dev_read_resources(dev); + + /* Add non-standard MMIO resources. */ + sc_add_mmio_resources(dev); + + /* Add IO resources. */ + sc_add_io_resources(dev); +} + +static void sc_rtc_init(void) +{ + uint32_t gen_pmcon1; + int rtc_fail; + struct chipset_power_state *ps = cbmem_find(CBMEM_ID_POWER_STATE); + + printk(BIOS_SPEW, "%s/%s\n", + __FILE__, __func__); + if (ps != NULL) + gen_pmcon1 = ps->gen_pmcon1; + else + gen_pmcon1 = read32((void *)(PMC_BASE_ADDRESS + GEN_PMCON1)); + + rtc_fail = !!(gen_pmcon1 & RPS); + + if (rtc_fail) + printk(BIOS_DEBUG, "RTC failure.\n"); + + cmos_init(rtc_fail); +} + +static void sc_init(device_t dev) +{ + int i; + const unsigned long pr_base = ILB_BASE_ADDRESS + 0x08; + const unsigned long ir_base = ILB_BASE_ADDRESS + 0x20; + void *gen_pmcon1 = (void *)(PMC_BASE_ADDRESS + GEN_PMCON1); + void *actl = (void *)(ILB_BASE_ADDRESS + ACTL); + const struct braswell_irq_route *ir = &global_braswell_irq_route; + struct soc_intel_braswell_config *config = dev->chip_info; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Set up the PIRQ PIC routing based on static config. */ + for (i = 0; i < NUM_PIRQS; i++) + write8((void *)(pr_base + i*sizeof(ir->pic[i])), + ir->pic[i]); + + /* Set up the per device PIRQ routing base on static config. */ + for (i = 0; i < NUM_IR_DEVS; i++) + write16((void *)(ir_base + i*sizeof(ir->pcidev[i])), + ir->pcidev[i]); + + /* Route SCI to IRQ9 */ + write32(actl, (read32(actl) & ~SCIS_MASK) | SCIS_IRQ9); + + sc_rtc_init(); + + if (config->disable_slp_x_stretch_sus_fail) { + printk(BIOS_DEBUG, "Disabling slp_x stretching.\n"); + write32(gen_pmcon1, + read32(gen_pmcon1) | DIS_SLP_X_STRCH_SUS_UP); + } else { + write32(gen_pmcon1, + read32(gen_pmcon1) & ~DIS_SLP_X_STRCH_SUS_UP); + } + +} + +/* + * Common code for the south cluster devices. + */ + +/* Set bit in function disble register to hide this device. */ +static void sc_disable_devfn(device_t dev) +{ + void *func_dis = (void *)(PMC_BASE_ADDRESS + FUNC_DIS); + void *func_dis2 = (void *)(PMC_BASE_ADDRESS + FUNC_DIS2); + uint32_t mask = 0; + uint32_t mask2 = 0; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + +#define SET_DIS_MASK(name_) \ + case PCI_DEVFN(name_ ## _DEV, name_ ## _FUNC): \ + mask |= name_ ## _DIS +#define SET_DIS_MASK2(name_) \ + case PCI_DEVFN(name_ ## _DEV, name_ ## _FUNC): \ + mask2 |= name_ ## _DIS + + switch (dev->path.pci.devfn) { + SET_DIS_MASK(SDIO); + break; + SET_DIS_MASK(SD); + break; + SET_DIS_MASK(SATA); + break; + SET_DIS_MASK(XHCI); + /* Disable super speed PHY when XHCI is not available. */ + mask2 |= USH_SS_PHY_DIS; + break; + SET_DIS_MASK(LPE); + break; + SET_DIS_MASK(MMC); + break; + SET_DIS_MASK(SIO_DMA1); + break; + SET_DIS_MASK(I2C1); + break; + SET_DIS_MASK(I2C2); + break; + SET_DIS_MASK(I2C3); + break; + SET_DIS_MASK(I2C4); + break; + SET_DIS_MASK(I2C5); + break; + SET_DIS_MASK(I2C6); + break; + SET_DIS_MASK(I2C7); + break; + SET_DIS_MASK(TXE); + break; + SET_DIS_MASK(HDA); + break; + SET_DIS_MASK(PCIE_PORT1); + break; + SET_DIS_MASK(PCIE_PORT2); + break; + SET_DIS_MASK(PCIE_PORT3); + break; + SET_DIS_MASK(PCIE_PORT4); + break; + SET_DIS_MASK(SIO_DMA2); + break; + SET_DIS_MASK(PWM1); + break; + SET_DIS_MASK(PWM2); + break; + SET_DIS_MASK(HSUART1); + break; + SET_DIS_MASK(HSUART2); + break; + SET_DIS_MASK(SPI); + break; + SET_DIS_MASK2(SMBUS); + break; + } + + if (mask != 0) { + write32(func_dis, read32(func_dis) | mask); + /* Ensure posted write hits. */ + read32(func_dis); + } + + if (mask2 != 0) { + write32(func_dis2, read32(func_dis2) | mask2); + /* Ensure posted write hits. */ + read32(func_dis2); + } +} + +static inline void set_d3hot_bits(device_t dev, int offset) +{ + uint32_t reg8; + + printk(BIOS_SPEW, "%s/%s ( %s, 0x%08x )\n", + __FILE__, __func__, dev_name(dev), offset); + printk(BIOS_DEBUG, "Power management CAP offset 0x%x.\n", offset); + reg8 = pci_read_config8(dev, offset + 4); + reg8 |= 0x3; + pci_write_config8(dev, offset + 4, reg8); +} + +/* + * Parts of the audio subsystem are powered by the HDA device. Therefore, one + * cannot put HDA into D3Hot. Instead perform this workaround to make some of + * the audio paths work for LPE audio. + */ +static void hda_work_around(device_t dev) +{ + void *gctl = (void *)(TEMP_BASE_ADDRESS + 0x8); + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* Need to set magic register 0x43 to 0xd7 in config space. */ + pci_write_config8(dev, 0x43, 0xd7); + + /* + * Need to set bit 0 of GCTL to take the device out of reset. However, + * that requires setting up the 64-bit BAR. + */ + pci_write_config32(dev, PCI_BASE_ADDRESS_0, TEMP_BASE_ADDRESS); + pci_write_config32(dev, PCI_BASE_ADDRESS_1, 0); + pci_write_config8(dev, PCI_COMMAND, PCI_COMMAND_MEMORY); + write32(gctl, read32(gctl) | 0x1); + pci_write_config8(dev, PCI_COMMAND, 0); + pci_write_config32(dev, PCI_BASE_ADDRESS_0, 0); +} + +static int place_device_in_d3hot(device_t dev) +{ + unsigned offset; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + + /* + * Parts of the HDA block are used for LPE audio as well. + * Therefore assume the HDA will never be put into D3Hot. + */ + if (dev->path.pci.devfn == PCI_DEVFN(HDA_DEV, HDA_FUNC)) { + hda_work_around(dev); + return 0; + } + + offset = pci_find_capability(dev, PCI_CAP_ID_PM); + + if (offset != 0) { + set_d3hot_bits(dev, offset); + return 0; + } + + /* + * For some reason some of the devices don't have the capability + * pointer set correctly. Work around this by hard coding the offset. + */ +#define DEV_CASE(name_) \ + case PCI_DEVFN(name_ ## _DEV, name_ ## _FUNC) + + switch (dev->path.pci.devfn) { + DEV_CASE(SDIO) : + DEV_CASE(SD) : + DEV_CASE(MMC) : + DEV_CASE(LPE) : + DEV_CASE(SIO_DMA1) : + DEV_CASE(I2C1) : + DEV_CASE(I2C2) : + DEV_CASE(I2C3) : + DEV_CASE(I2C4) : + DEV_CASE(I2C5) : + DEV_CASE(I2C6) : + DEV_CASE(I2C7) : + DEV_CASE(SIO_DMA2) : + DEV_CASE(PWM1) : + DEV_CASE(PWM2) : + DEV_CASE(HSUART1) : + DEV_CASE(HSUART2) : + DEV_CASE(SPI) : + offset = 0x80; + break; + DEV_CASE(SATA) : + DEV_CASE(XHCI) : + offset = 0x70; + break; + DEV_CASE(HDA) : + DEV_CASE(SMBUS) : + offset = 0x50; + break; + DEV_CASE(TXE) : + /* TXE cannot be placed in D3Hot. */ + return 0; + break; + DEV_CASE(PCIE_PORT1) : + DEV_CASE(PCIE_PORT2) : + DEV_CASE(PCIE_PORT3) : + DEV_CASE(PCIE_PORT4) : + offset = 0xa0; + break; + } + + if (offset != 0) { + set_d3hot_bits(dev, offset); + return 0; + } + + return -1; +} + +/* Common PCI device function disable. */ +void southcluster_enable_dev(device_t dev) +{ + uint32_t reg32; + + printk(BIOS_SPEW, "%s/%s ( %s )\n", + __FILE__, __func__, dev_name(dev)); + if (!dev->enabled) { + int slot = PCI_SLOT(dev->path.pci.devfn); + int func = PCI_FUNC(dev->path.pci.devfn); + printk(BIOS_DEBUG, "%s: Disabling device: %02x.%01x\n", + dev_path(dev), slot, func); + + /* Ensure memory, io, and bus master are all disabled */ + reg32 = pci_read_config32(dev, PCI_COMMAND); + reg32 &= ~(PCI_COMMAND_MASTER | + PCI_COMMAND_MEMORY | PCI_COMMAND_IO); + pci_write_config32(dev, PCI_COMMAND, reg32); + + /* Place device in D3Hot */ + if (place_device_in_d3hot(dev) < 0) { + printk(BIOS_WARNING, + "Could not place %02x.%01x into D3Hot. " + "Keeping device visible.\n", slot, func); + return; + } + /* Disable this device if possible */ + sc_disable_devfn(dev); + } else { + /* Enable SERR */ + reg32 = pci_read_config32(dev, PCI_COMMAND); + reg32 |= PCI_COMMAND_SERR; + pci_write_config32(dev, PCI_COMMAND, reg32); + } +} + +static struct device_operations device_ops = { + .read_resources = sc_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = NULL, + .init = sc_init, + .enable = southcluster_enable_dev, + .scan_bus = scan_static_bus, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver southcluster __pci_driver = { + .ops = &device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = LPC_DEVID, +}; + +int __attribute__((weak)) mainboard_get_spi_config(struct spi_config *cfg) +{ + printk(BIOS_SPEW, "%s/%s ( 0x%p )\n", + __FILE__, __func__, (void *)cfg); + return -1; +} + +#if 0 /* LPL - BOOT_STATE_INIT_ENTRIES failing */ +static void update_gnvs(device_t dev, int nvs_index, global_nvs_t *gnvs) +{ + + struct resource *bar; + /* + * ACPI code doesn't create a BAR1 address space + * Save BAR0 to ACPI NVS + */ + bar = find_resource(dev, PCI_BASE_ADDRESS_0); + if (bar) + gnvs->dev.scc_bar0[nvs_index] = (u32)bar->base; + /* Device is enabled in ACPI mode */ + gnvs->dev.scc_en[nvs_index] = 1; +} + +static void finalize_chipset(void *unused) +{ + void *bcr = (void *)(SPI_BASE_ADDRESS + BCR); + void *gcs = (void *)(RCBA_BASE_ADDRESS + GCS); + void *gen_pmcon2 = (void *)(PMC_BASE_ADDRESS + GEN_PMCON2); + void *etr = (void *)(PMC_BASE_ADDRESS + ETR); + uint8_t *spi = (uint8_t *)SPI_BASE_ADDRESS; + struct spi_config cfg; + global_nvs_t *gnvs; + + printk(BIOS_SPEW, "%s/%s ( 0x%p )\n", + __FILE__, __func__, unused); + /* Find ACPI NVS to update BARs */ + gnvs = (global_nvs_t *)cbmem_find(CBMEM_ID_ACPI_GNVS); + if (!gnvs) { + printk(BIOS_ERR, "Unable to locate Global NVS\n"); + return; + } + + device_t dev0 = dev_find_slot(0, PCI_DEVFN(MMC_DEV, 0)); + /* Update the ACPI mode for SCC devices in GNVS */ + update_gnvs(dev0, SCC_NVS_MMC, gnvs); + + device_t dev1 = dev_find_slot(0, PCI_DEVFN(SD_DEV, 0)); + + update_gnvs(dev1, SCC_NVS_SD, gnvs); + + /* Set the lock enable on the BIOS control register. */ + write32(bcr, read32(bcr) | BCR_LE); + + /* Set BIOS lock down bit controlling boot block size and swapping. */ + write32(gcs, read32(gcs) | BILD); + + /* Lock sleep stretching policy and set SMI lock. */ + write32(gen_pmcon2, read32(gen_pmcon2) | SLPSX_STR_POL_LOCK | SMI_LOCK); + + /* Set the CF9 lock. */ + write32(etr, read32(etr) | CF9LOCK); + + if (mainboard_get_spi_config(&cfg) < 0) { + printk(BIOS_DEBUG, "No SPI lockdown configuration.\n"); + } else { + write16(spi + PREOP, cfg.preop); + write16(spi + OPTYPE, cfg.optype); + write32(spi + OPMENU0, cfg.opmenu[0]); + write32(spi + OPMENU1, cfg.opmenu[1]); + write16(spi + HSFSTS, read16(spi + HSFSTS) | FLOCKDN); + write32(spi + UVSCC, cfg.uvscc); + write32(spi + LVSCC, cfg.lvscc | VCL); + } + + printk(BIOS_DEBUG, "Finalizing SMM.\n"); + outb(APM_CNT_FINALIZE, APM_CNT); +} + +BOOT_STATE_INIT_ENTRIES(finalize_bscb) = { + BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, + finalize_chipset, NULL), + BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, + finalize_chipset, NULL), +}; +#endif /* 0 */ + diff --git a/src/soc/intel/braswell/spi.c b/src/soc/intel/braswell/spi.c new file mode 100644 index 0000000..44a8e98 --- /dev/null +++ b/src/soc/intel/braswell/spi.c @@ -0,0 +1,599 @@ +/* + * Copyright (c) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but without any warranty; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* This file is derived from the flashrom project. */ +#include <arch/io.h> +#include <bootstate.h> +#include <console/console.h> +#include <delay.h> +#include <device/pci_ids.h> +#include <soc/lpc.h> +#include <soc/pci_devs.h> +#include <spi_flash.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#ifdef __SMM__ +#define pci_read_config_byte(dev, reg, targ)\ + *(targ) = pci_read_config8(dev, reg) +#define pci_read_config_word(dev, reg, targ)\ + *(targ) = pci_read_config16(dev, reg) +#define pci_read_config_dword(dev, reg, targ)\ + *(targ) = pci_read_config32(dev, reg) +#define pci_write_config_byte(dev, reg, val)\ + pci_write_config8(dev, reg, val) +#define pci_write_config_word(dev, reg, val)\ + pci_write_config16(dev, reg, val) +#define pci_write_config_dword(dev, reg, val)\ + pci_write_config32(dev, reg, val) +#else /* !__SMM__ */ +#include <device/device.h> +#include <device/pci.h> +#define pci_read_config_byte(dev, reg, targ)\ + *(targ) = pci_read_config8(dev, reg) +#define pci_read_config_word(dev, reg, targ)\ + *(targ) = pci_read_config16(dev, reg) +#define pci_read_config_dword(dev, reg, targ)\ + *(targ) = pci_read_config32(dev, reg) +#define pci_write_config_byte(dev, reg, val)\ + pci_write_config8(dev, reg, val) +#define pci_write_config_word(dev, reg, val)\ + pci_write_config16(dev, reg, val) +#define pci_write_config_dword(dev, reg, val)\ + pci_write_config32(dev, reg, val) +#endif /* !__SMM__ */ + +typedef struct spi_slave ich_spi_slave; + +static int ichspi_lock = 0; + +typedef struct ich9_spi_regs { + uint32_t bfpr; + uint16_t hsfs; + uint16_t hsfc; + uint32_t faddr; + uint32_t _reserved0; + uint32_t fdata[16]; + uint32_t frap; + uint32_t freg[5]; + uint32_t _reserved1[3]; + uint32_t pr[5]; + uint32_t _reserved2[2]; + uint8_t ssfs; + uint8_t ssfc[3]; + uint16_t preop; + uint16_t optype; + uint8_t opmenu[8]; +} __attribute__((packed)) ich9_spi_regs; + +typedef struct ich_spi_controller { + int locked; + + uint8_t *opmenu; + int menubytes; + uint16_t *preop; + uint16_t *optype; + uint32_t *addr; + uint8_t *data; + unsigned databytes; + uint8_t *status; + uint16_t *control; + uint32_t *bbar; +} ich_spi_controller; + +static ich_spi_controller cntlr; + +enum { + SPIS_SCIP = 0x0001, + SPIS_GRANT = 0x0002, + SPIS_CDS = 0x0004, + SPIS_FCERR = 0x0008, + SSFS_AEL = 0x0010, + SPIS_LOCK = 0x8000, + SPIS_RESERVED_MASK = 0x7ff0, + SSFS_RESERVED_MASK = 0x7fe2 +}; + +enum { + SPIC_SCGO = 0x000002, + SPIC_ACS = 0x000004, + SPIC_SPOP = 0x000008, + SPIC_DBC = 0x003f00, + SPIC_DS = 0x004000, + SPIC_SME = 0x008000, + SSFC_SCF_MASK = 0x070000, + SSFC_RESERVED = 0xf80000 +}; + +enum { + HSFS_FDONE = 0x0001, + HSFS_FCERR = 0x0002, + HSFS_AEL = 0x0004, + HSFS_BERASE_MASK = 0x0018, + HSFS_BERASE_SHIFT = 3, + HSFS_SCIP = 0x0020, + HSFS_FDOPSS = 0x2000, + HSFS_FDV = 0x4000, + HSFS_FLOCKDN = 0x8000 +}; + +enum { + HSFC_FGO = 0x0001, + HSFC_FCYCLE_MASK = 0x0006, + HSFC_FCYCLE_SHIFT = 1, + HSFC_FDBC_MASK = 0x3f00, + HSFC_FDBC_SHIFT = 8, + HSFC_FSMIE = 0x8000 +}; + +enum { + SPI_OPCODE_TYPE_READ_NO_ADDRESS = 0, + SPI_OPCODE_TYPE_WRITE_NO_ADDRESS = 1, + SPI_OPCODE_TYPE_READ_WITH_ADDRESS = 2, + SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS = 3 +}; + +#if IS_ENABLED(CONFIG_DEBUG_SPI_FLASH) + +static u8 readb_(void *addr) +{ + u8 v = read8(addr); + printk(BIOS_DEBUG, "0x%p --> 0x%2.2x\n", addr, v); + return v; +} + +static u16 readw_(void *addr) +{ + u16 v = read16(addr); + printk(BIOS_DEBUG, "0x%p --> 0x%4.4x\n", addr, v); + return v; +} + +static u32 readl_(void *addr) +{ + u32 v = read32(addr); + printk(BIOS_DEBUG, "0x%p --> 0x%8.8x\n", addr, v); + return v; +} + +static void writeb_(u8 b, void *addr) +{ + printk(BIOS_DEBUG, "0x%p <-- 0x%2.2x\n", addr, b); + write8(addr, b); +} + +static void writew_(u16 b, void *addr) +{ + printk(BIOS_DEBUG, "0x%p <-- 0x%4.4x\n", addr, b); + write16(addr, b); +} + +static void writel_(u32 b, void *addr) +{ + printk(BIOS_DEBUG, "0x%p <-- 0x%8.8x\n", addr, b); + write32(addr, b); +} + +#else /* CONFIG_DEBUG_SPI_FLASH ^^^ enabled vvv NOT enabled */ + +#define readb_(a) read8(a) +#define readw_(a) read16(a) +#define readl_(a) read32(a) +#define writeb_(val, addr) write8(addr, val) +#define writew_(val, addr) write16(addr, val) +#define writel_(val, addr) write32(addr, val) + +#endif /* CONFIG_DEBUG_SPI_FLASH ^^^ NOT enabled */ + +static void write_reg(const void *value, void *dest, uint32_t size) +{ + const uint8_t *bvalue = value; + uint8_t *bdest = dest; + + while (size >= 4) { + writel_(*(const uint32_t *)bvalue, bdest); + bdest += 4; bvalue += 4; size -= 4; + } + while (size) { + writeb_(*bvalue, bdest); + bdest++; bvalue++; size--; + } +} + +static void read_reg(void *src, void *value, uint32_t size) +{ + uint8_t *bsrc = src; + uint8_t *bvalue = value; + + while (size >= 4) { + *(uint32_t *)bvalue = readl_(bsrc); + bsrc += 4; bvalue += 4; size -= 4; + } + while (size) { + *bvalue = readb_(bsrc); + bsrc++; bvalue++; size--; + } +} + +struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs) +{ + ich_spi_slave *slave = malloc(sizeof(*slave)); + + if (!slave) { + printk(BIOS_ERR, "ICH SPI: Bad allocation\n"); + return NULL; + } + + memset(slave, 0, sizeof(*slave)); + + slave->bus = bus; + slave->cs = cs; + return slave; +} + +static ich9_spi_regs *spi_regs(void) +{ + device_t dev; + uint32_t sbase; + +#ifdef __SMM__ + dev = PCI_DEV(0, LPC_DEV, LPC_FUNC); +#else + dev = dev_find_slot(0, PCI_DEVFN(LPC_DEV, LPC_FUNC)); +#endif + pci_read_config_dword(dev, SBASE, &sbase); + sbase &= ~0x1ff; + + return (void *)sbase; +} + +unsigned int spi_crop_chunk(unsigned int cmd_len, unsigned int buf_len) +{ + return min(cntlr.databytes, buf_len); +} + +void spi_init(void) +{ + ich9_spi_regs *ich9_spi = spi_regs(); + +#if IS_ENABLED(CONFIG_DEBUG_SPI_FLASH) + printk(BIOS_DEBUG, "%s/%s\n", __FILE__, __func__); +#endif /* CONFIG_DEBUG_SPI_FLASH */ + + ichspi_lock = readw_(&ich9_spi->hsfs) & HSFS_FLOCKDN; + cntlr.opmenu = ich9_spi->opmenu; + cntlr.menubytes = sizeof(ich9_spi->opmenu); + cntlr.optype = &ich9_spi->optype; + cntlr.addr = &ich9_spi->faddr; + cntlr.data = (uint8_t *)ich9_spi->fdata; + cntlr.databytes = sizeof(ich9_spi->fdata); + cntlr.status = &ich9_spi->ssfs; + cntlr.control = (uint16_t *)ich9_spi->ssfc; + cntlr.preop = &ich9_spi->preop; +} + + +#if 0 /* LPL - BOOT_STATE_INIT_ENTRIES failing */ +static void spi_init_cb(void *unused) +{ + spi_init(); +} + +BOOT_STATE_INIT_ENTRIES(spi_init_bscb) = { + BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, spi_init_cb, NULL), +}; +#endif /* 0 */ + +int spi_claim_bus(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ + return 0; +} + +void spi_release_bus(struct spi_slave *slave) +{ + /* Handled by ICH automatically. */ +} + +/* + * Wait for up to 60ms til the controller completes the operation or + * returns an error. Clear the completion status. + * + * Return the last read status value on success or -1 on failure. + */ +static int ich_status_poll(void) +{ + int timeout = 40000; /* This will result in 400 ms */ + u16 status = 0; + + while (timeout--) { + status = readw_(cntlr.status); + if (((status & (SPIS_FCERR | SPIS_CDS | SPIS_SCIP)) + ^ SPIS_SCIP) != 0) { + writew_(SPIS_FCERR | SPIS_CDS, cntlr.status); + return status; + } + udelay(10); + } + + printk(BIOS_ERR, "ICH SPI: SCIP timeout, read %x, expected %x\n", + status, (status & (~(SPIS_FCERR | SPIS_SCIP))) | SPIS_CDS); + return -1; +} + +int spi_xfer(struct spi_slave *slave, const void *dout, + unsigned int bytesout, void *din, unsigned int bytesin) +{ + unsigned int address; + unsigned int bytes_to_transfer; + unsigned int control; + u8 *data; + unsigned int data_bytes; + u8 opcode; + unsigned int opcode_index; + u8 opcode_type; + unsigned int prefix_index; + int status; + int with_address; + int write_operation; + static u8 write_prefix; + +#if IS_ENABLED(CONFIG_DEBUG_SPI_FLASH) + printk(BIOS_DEBUG, "%s/%s (0x%p, 0x%p, 0x%08x, 0x%p, 0x%08x)\n", + __FILE__, __func__, slave, dout, bytesout, + din, bytesin); +#endif /* CONFIG_DEBUG_SPI_FLASH */ + + /* + * The following hardware is available for shared use when the + * controller is not locked: + * + * Opcode 0 + * Opcode Type 0 + * Opcode Prefix 0 + * + * The rest of the controller is reserved for static setup. + */ + + /* There has to always at least be an opcode. */ + if (!bytesout || !dout) { + printk(BIOS_ERR, "ICH SPI: No opcode for transfer\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + + /* Make sure if we read something we have a place to put it. */ + if (bytesin != 0 && !din) { + printk(BIOS_ERR, "ICH SPI: Read but no target buffer\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + + /* Get the opcode */ + data = (u8 *)dout; + opcode = *data++; + bytesout -= 1; + + /* Determine if this operation contains an address */ + opcode_type = 0; + with_address = 0; + address = 0; + if (bytesout >= 3) { + /* + * Workarounds: + * + * Erase operation have an address with no data. + * For some reason, the controller does not like + * this condition and returns an error. Instead + * of loading the address into the address register + * the work-around is to send the address as data. + * + * Page writes with a short amount of data are + * failing. Send the address as data to workaround + * this issue. + */ + if (bytesin || (bytesout > (cntlr.databytes - 3))) { + /* Tell the controller about the address */ + opcode_type = 2; + with_address = 1; + address = (unsigned int)(*data++) << 16; + address |= (unsigned int)(*data++) << 8; + address |= (unsigned int)(*data++); + bytesout -= 3; + } + } + + /* Determine if this is a write operation */ + write_operation = 0; + if (bytesin == 0) { + write_operation = 1; + opcode_type |= 1; + + /* + * The upper layers provide the write prefix byte as + * a separate transaction which is how it is handled + * on the SPI bus. Note that a SPI transaction starts + * with chip select going low for the target device + * and ends with chip select going high. + * + * However, this controller automatically outputs the + * prefix byte at the beginning of write operations. + * As such, it is necessary to consume the write prefix + * byte. + */ + + if (write_prefix == 0) { + /* Delay sending the write prefix byte. */ + write_prefix = opcode; +#if IS_ENABLED(CONFIG_DEBUG_SPI_FLASH) + printk(BIOS_DEBUG, "Buffering write prefix: 0x%02x\n", + write_prefix); +#endif /* CONFIG_DEBUG_SPI_FLASH */ + return 0; + } + } + + /* + * Check if more output data exists than the controller can handle. + * Iterations for writes are not supported here because each SPI + * write command needs to be preceded and followed by other SPI + * commands, and this sequence is controlled by the SPI chip driver. + */ + if (bytesout > cntlr.databytes) { + printk(BIOS_ERR, + "ICH SPI: Too much to write. Does your SPI chip driver use CONTROLLER_PAGE_LIMIT?\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + + /* Determine the prefix and opcode indices */ + opcode_index = 0; + prefix_index = 0; + if (!ichspi_lock) { + /* Set the write prefix byte */ + if (write_operation) { + prefix_index = SPIC_ACS; + writew_(write_prefix, cntlr.preop); + } + + /* Set the opcode */ + writeb_(opcode, cntlr.opmenu); + + /* Set the opcode type */ + u16 optypes = readw_(cntlr.optype); + optypes = (optypes & (~3)) | opcode_type; + writew_(optypes, cntlr.optype); + } else { + u8 opmenu[cntlr.menubytes]; + + /* Get the opcodes supported by the controller */ + read_reg(cntlr.opmenu, opmenu, cntlr.menubytes); + + /* Verify that the locked controller supports this opcode */ + for (;;) { + if (opcode == opmenu[opcode_index]) + break; + opcode_index++; + if (opcode_index > cntlr.menubytes) { + printk(BIOS_ERR, + "ERROR - SPI transaction failed," + " opcode map full!\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + } + + /* Get the controller write prefix bytes */ + if (write_operation) { + u16 prefix_bytes = readw_(cntlr.optype); + + /* + * Verify that the locked controller contains the write + * prefix byte + */ + prefix_index = SPIC_ACS; + if (write_prefix != (prefix_bytes & 0xff)) { + prefix_index |= SPIC_SPOP; + if (write_prefix != (prefix_bytes >> 8)) { + printk(BIOS_ERR, + "ERROR - SPI transaction failed" + ", prefix not available!\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + } + } + } + + /* Determine the transfer length */ + data_bytes = bytesin ? bytesin : bytesout; + + /* Clear any previous error */ + writeb_(SPIS_FCERR | SPIS_CDS, cntlr.status); + + /* Segment the transfer operation if necessary */ + do { + /* Determine the operation data length */ + control = SPIC_SCGO | prefix_index | (opcode_index << 4); + bytes_to_transfer = data_bytes; + if (bytes_to_transfer > cntlr.databytes) + bytes_to_transfer = cntlr.databytes; + if (bytes_to_transfer > 0) { + control |= SPIC_DS + | (((bytes_to_transfer - 1) & 0x3f) << 8); + data_bytes -= bytes_to_transfer; + + /* Output the data for the operation */ + if (write_operation) + write_reg(data, cntlr.data, bytes_to_transfer); + } + + /* Set the 24-bit address if necessary */ + if (with_address) { + writel_(address & 0x00ffffff, cntlr.addr); + address += bytes_to_transfer; + } + + /* Start the SPI operation */ + writew_((u16)control, cntlr.control); + + /* Wait for the result */ + status = ich_status_poll(); + if (status == -1) { + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + if (status & SPIS_FCERR) { + printk(BIOS_ERR, "ICH SPI: Transaction error\n"); + + /* Discard the write prefix */ + write_prefix = 0; + return -1; + } + + /* Place the data read from the SPI flash into the buffer */ + if (bytesin > 0) { + read_reg(cntlr.data, din, bytes_to_transfer); + bytesin -= bytes_to_transfer; + din += bytes_to_transfer; + } + } while (data_bytes > 0); + + /* Discard the write prefix */ + write_prefix = 0; + + /* Successful SPI transaction */ + return 0; +} diff --git a/src/soc/intel/braswell/spi_loading.c b/src/soc/intel/braswell/spi_loading.c new file mode 100644 index 0000000..a166ec6 --- /dev/null +++ b/src/soc/intel/braswell/spi_loading.c @@ -0,0 +1,154 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include <arch/byteorder.h> +#include <boot/coreboot_tables.h> +#include <cbmem.h> +#include <cbfs.h> +#include <console/console.h> +#include <stdlib.h> +#include <string.h> +#include <vendorcode/google/chromeos/chromeos.h> + +#define CACHELINE_SIZE 64 +#define INTRA_CACHELINE_MASK (CACHELINE_SIZE - 1) +#define CACHELINE_MASK (~INTRA_CACHELINE_MASK) + +static void *find_mirror_buffer(int len) +{ + int nentries; + int i; + struct lb_memory *mem; + void *buffer; + + len = ALIGN(len, 4096); + + mem = get_lb_mem(); + nentries = (mem->size - sizeof(*mem)) / sizeof(mem->map[0]); + + /* + * Find the highest RAM entry that accommodates the lenth provide + * while falling below 4GiB. + */ + buffer = NULL; + for (i = 0; i < nentries; i++) { + const uint64_t max_addr = 1ULL << 32; + uint64_t start; + uint64_t size; + struct lb_memory_range *r; + + r = &mem->map[i]; + + if (r->type != LB_MEM_RAM) + continue; + + start = unpack_lb64(r->start); + if (start >= max_addr) + continue; + + size = unpack_lb64(r->size); + if (size < len) + continue; + + /* Adjust size of buffer if range exceeds max address. */ + if (start + size > max_addr) + size = max_addr - start; + + if (size < len) + continue; + + buffer = (void *)(uintptr_t)(start + size - len); + } + + return buffer; +} + +/* + * Mirror the payload file to the default SMM location if it is small enough. + * The default SMM region can be used since no one is using the memory at this + * location at this stage in the boot. + */ +static void *spi_mirror(void *file_start, int file_len) +{ + int alignment_diff; + char *src; + char *dest; + + alignment_diff = (INTRA_CACHELINE_MASK & (long)file_start); + + /* + * Adjust file length so that the start and end points are aligned to a + * cacheline. Coupled with the ROM caching in the CPU the SPI hardware + * will read and cache full length cachelines. It will also prefetch + * data as well. Once things are mirrored in memory all accesses should + * hit the CPUs cache. + */ + file_len += alignment_diff; + file_len = ALIGN(file_len, CACHELINE_SIZE); + + printk(BIOS_DEBUG, "Payload aligned size: 0x%x\n", file_len); + + dest = find_mirror_buffer(file_len); + + /* + * Just pass back the pointer to ROM space if a buffer could not + * be found to mirror into. + */ + if (dest == NULL) + return file_start; + + src = (void *)(CACHELINE_MASK & (long)file_start); + /* + * Note that if mempcy is not using 32-bit moves the performance will + * degrade because the SPI hardware prefetchers look for + * cacheline-aligned 32-bit accesses to kick in. + */ + memcpy(dest, src, file_len); + + /* Provide pointer into mirrored space. */ + return &dest[alignment_diff]; +} + +void *cbfs_load_payload(struct cbfs_media *media, const char *name) +{ + int file_len; + void *file_start; + struct cbfs_file *file; + + file_start = vboot_get_payload(&file_len); + + if (file_start != NULL) + return spi_mirror(file_start, file_len); + + file = cbfs_get_file(media, name); + + if (file == NULL) + return NULL; + + if (ntohl(file->type) != CBFS_TYPE_PAYLOAD) + return NULL; + + file_len = ntohl(file->len); + + file_start = CBFS_SUBHEADER(file); + + return spi_mirror(file_start, file_len); +} diff --git a/src/soc/intel/braswell/stage_cache.c b/src/soc/intel/braswell/stage_cache.c new file mode 100644 index 0000000..f762e02 --- /dev/null +++ b/src/soc/intel/braswell/stage_cache.c @@ -0,0 +1,38 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cbmem.h> +#include <ramstage_cache.h> +#include <soc/intel/common/memmap.h> +#include <soc/smm.h> + +struct ramstage_cache *ramstage_cache_location(long *size) +{ + char *smm_base; + size_t smm_size; + /* 1MiB cache size */ + const long cache_size = CONFIG_SMM_RESERVED_SIZE; + + /* Ramstage cache lives in TSEG region. */ + smm_region((void **)&smm_base, &smm_size); + *size = cache_size; + return (void *)(&smm_base[smm_size - cache_size]); +} + diff --git a/src/soc/intel/braswell/tsc_freq.c b/src/soc/intel/braswell/tsc_freq.c new file mode 100644 index 0000000..9a333f8 --- /dev/null +++ b/src/soc/intel/braswell/tsc_freq.c @@ -0,0 +1,70 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <cpu/x86/msr.h> +#include <cpu/x86/tsc.h> +#include <soc/msr.h> +#include <console/console.h> +#if !defined(__PRE_RAM__) +#include <soc/ramstage.h> +#else +#include <soc/romstage.h> +#endif +#include <stdint.h> + +unsigned long tsc_freq_mhz(void) +{ + msr_t ia_core_ratios; + + ia_core_ratios = rdmsr(MSR_IACORE_RATIOS); + return (BUS_FREQ_KHZ * ((ia_core_ratios.lo >> 16) & 0x3f)) / 1000; +} + +#if !defined(__SMM__) + +void set_max_freq(void) +{ + msr_t perf_ctl; + msr_t msr; + + /* Enable speed step. */ + msr = rdmsr(MSR_IA32_MISC_ENABLES); + msr.lo |= (1 << 16); + wrmsr(MSR_IA32_MISC_ENABLES, msr); + + /* + * Set guranteed ratio [21:16] from IACORE_RATIOS to bits [15:8] of + * the PERF_CTL. + */ + msr = rdmsr(MSR_IACORE_RATIOS); + perf_ctl.lo = (msr.lo & 0x3f0000) >> 8; + + /* + * Set guranteed vid [21:16] from IACORE_VIDS to bits [7:0] of + * the PERF_CTL. + */ + msr = rdmsr(MSR_IACORE_VIDS); + perf_ctl.lo |= (msr.lo & 0x7f0000) >> 16; + perf_ctl.hi = 0; + + wrmsr(MSR_IA32_PERF_CTL, perf_ctl); +} + +#endif /* __SMM__ */ diff --git a/src/soc/intel/braswell/xhci.c b/src/soc/intel/braswell/xhci.c new file mode 100644 index 0000000..f975b8a --- /dev/null +++ b/src/soc/intel/braswell/xhci.c @@ -0,0 +1,82 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 Google Inc. + * Copyright (C) 2015 Intel Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <arch/acpi.h> +#include <console/console.h> +#include <device/device.h> +#include <device/pci.h> +#include <device/pci_ids.h> +#include <stdint.h> +#include <reg_script.h> + +#include <soc/iomap.h> +#include <soc/iosf.h> +#include <soc/pci_devs.h> +#include <soc/pm.h> +#include <soc/ramstage.h> +#include <soc/xhci.h> + +#include "chip.h" + +static void xhci_workaround(device_t dev) +{ + struct resource *bar; + uint32_t xhci_mmio_base, val; + + bar = find_resource(dev, PCI_BASE_ADDRESS_0); + if (bar) { + xhci_mmio_base = (uint32_t) bar->base; + /* Set XHCIBAR + 0x809C [31] = 1, to get XHCI to completei + * reset process successfully in Chrome OS for BSW + */ + val = read32((void *)(xhci_mmio_base + 0x809C)); + val = val | (1 << 31); + write32((void *) (xhci_mmio_base + 0x809C), val); + } +} +static void xhci_init(device_t dev) +{ + printk(BIOS_SPEW, "%s/%s (%s)\n", + __FILE__, __func__, dev_name(dev)); + + /* Initialize XHCI controller for boot or resume path */ + if (acpi_slp_type == 3) + printk(BIOS_SPEW, "Running xhci_init_resume_script\n"); + else + printk(BIOS_SPEW, "Running xhci_init_boot_script\n"); + /* For BSW, WA is needed to xhci working */ + xhci_workaround(dev); + /* Finalize Initialization */ + printk(BIOS_SPEW, "Running xhci_hc_init\n"); +} + +static struct device_operations xhci_device_ops = { + .read_resources = pci_dev_read_resources, + .set_resources = pci_dev_set_resources, + .enable_resources = pci_dev_enable_resources, + .init = xhci_init, + .ops_pci = &soc_pci_ops, +}; + +static const struct pci_driver braswell_xhci __pci_driver = { + .ops = &xhci_device_ops, + .vendor = PCI_VENDOR_ID_INTEL, + .device = XHCI_DEVID +};