From 20b97ea7c0dbbdc13800e12ff5c86c00c4a342ec Mon Sep 17 00:00:00 2001 From: aqua Date: Fri, 8 Mar 2024 17:24:49 +0200 Subject: Bazel build --- .bazel/compiler_flags.bazelrc | 27 + .bazelrc | 11 + .gitignore | 12 +- BUILD.bazel | 13 + MODULE.bazel | 12 + arch/i386/BUILD.bazel | 44 ++ arch/i386/boot.s | 120 ++++ arch/i386/gdt.c | 20 + arch/i386/gdt.h | 55 ++ arch/i386/idt.h | 23 + arch/i386/init.s | 49 ++ arch/i386/isr.c | 50 ++ arch/i386/lgdt.c | 25 + arch/i386/lidt.c | 55 ++ arch/i386/linker.ld | 54 ++ arch/i386/paging.h | 59 ++ arch/i386/sys/control.h | 24 + arch/i386/sys/cpuid.h | 35 ++ arch/i386/sys/io.h | 92 +++ arch/i386/sys/syscall.h | 8 + arch/i386/test_gdt.cc | 25 + config.mk | 61 -- devices/BUILD.bazel | 22 + devices/meson.build | 27 - grub/BUILD.bazel | 9 + grub/include/multiboot2.h | 416 ++++++++++++++ grub/meson.build | 2 - grub/multiboot2.h | 416 -------------- i686/boot.s | 120 ---- i686/gdt.c | 20 - i686/include/gdt.h | 55 -- i686/include/idt.h | 23 - i686/include/paging.h | 59 -- i686/include/sys/control.h | 24 - i686/include/sys/cpuid.h | 35 -- i686/include/sys/io.h | 92 --- i686/include/sys/syscall.h | 8 - i686/init.s | 49 -- i686/isr.c | 50 -- i686/lgdt.c | 25 - i686/lidt.c | 55 -- i686/linker.ld | 54 -- i686/meson.build | 24 - i686/test_gdt.cc | 24 - kernel/BUILD.bazel | 37 ++ kernel/boot.h | 21 + kernel/conf.h.in | 4 + kernel/kernel.c | 57 ++ kernel/mem.h | 4 + kernel/mem/vmm.c | 47 ++ kernel/mmap.c | 51 ++ kernel/mmap.h | 7 + kernel/multiboot2.c | 50 ++ kernel/sched.hpp | 8 + kernel/sched/roundrobin.cpp | 21 + kernel/sched/test_roundrobin.cc | 50 ++ kernel/sched/test_taskqueue.cc | 122 ++++ kernel/task.h | 78 +++ lib/blake2/BUILD.bazel | 28 + lib/blake2/blake2s_kat.h | 1034 ++++++++++++++++++++++++++++++++++ lib/blake2/blake2s_selftest.cc | 113 ++++ lib/blake2/meson.build | 24 - lib/blake2/tests/blake2s_kat.h | 1034 ---------------------------------- lib/blake2/tests/blake2s_selftest.cc | 113 ---- lib/libk/BUILD.bazel | 80 +++ lib/libk/meson.build | 41 -- meson.build | 39 -- meson/compiler_flags/meson.build | 34 -- platforms/BUILD.bazel | 7 + project_config.bzl | 2 + src/boot.h | 21 - src/kernel.c | 57 -- src/mem.h | 4 - src/mem/vmm.c | 47 -- src/meson.build | 36 -- src/mmap.c | 51 -- src/mmap.h | 7 - src/multiboot2.c | 50 -- src/sched.hpp | 8 - src/sched/roundrobin.cpp | 21 - src/sched/test_roundrobin.cc | 50 -- src/sched/test_taskqueue.cc | 122 ---- src/task.h | 78 --- toolchains/BUILD.bazel | 34 ++ toolchains/i386_elf_gcc.bzl | 123 ++++ toolchains/i386_qemu.bzl | 8 + tools/BUILD.bazel | 6 + tools/configure_file.bzl | 29 + tools/make_iso.bzl | 41 ++ tools/qemu.bzl | 33 ++ 90 files changed, 3344 insertions(+), 3071 deletions(-) create mode 100644 .bazel/compiler_flags.bazelrc create mode 100644 .bazelrc create mode 100644 BUILD.bazel create mode 100644 MODULE.bazel create mode 100644 arch/i386/BUILD.bazel create mode 100644 arch/i386/boot.s create mode 100644 arch/i386/gdt.c create mode 100644 arch/i386/gdt.h create mode 100644 arch/i386/idt.h create mode 100644 arch/i386/init.s create mode 100644 arch/i386/isr.c create mode 100644 arch/i386/lgdt.c create mode 100644 arch/i386/lidt.c create mode 100644 arch/i386/linker.ld create mode 100644 arch/i386/paging.h create mode 100644 arch/i386/sys/control.h create mode 100644 arch/i386/sys/cpuid.h create mode 100644 arch/i386/sys/io.h create mode 100644 arch/i386/sys/syscall.h create mode 100644 arch/i386/test_gdt.cc delete mode 100644 config.mk create mode 100644 devices/BUILD.bazel delete mode 100644 devices/meson.build create mode 100644 grub/BUILD.bazel create mode 100644 grub/include/multiboot2.h delete mode 100644 grub/meson.build delete mode 100644 grub/multiboot2.h delete mode 100644 i686/boot.s delete mode 100644 i686/gdt.c delete mode 100644 i686/include/gdt.h delete mode 100644 i686/include/idt.h delete mode 100644 i686/include/paging.h delete mode 100644 i686/include/sys/control.h delete mode 100644 i686/include/sys/cpuid.h delete mode 100644 i686/include/sys/io.h delete mode 100644 i686/include/sys/syscall.h delete mode 100644 i686/init.s delete mode 100644 i686/isr.c delete mode 100644 i686/lgdt.c delete mode 100644 i686/lidt.c delete mode 100644 i686/linker.ld delete mode 100644 i686/meson.build delete mode 100644 i686/test_gdt.cc create mode 100644 kernel/BUILD.bazel create mode 100644 kernel/boot.h create mode 100644 kernel/conf.h.in create mode 100644 kernel/kernel.c create mode 100644 kernel/mem.h create mode 100644 kernel/mem/vmm.c create mode 100644 kernel/mmap.c create mode 100644 kernel/mmap.h create mode 100644 kernel/multiboot2.c create mode 100644 kernel/sched.hpp create mode 100644 kernel/sched/roundrobin.cpp create mode 100644 kernel/sched/test_roundrobin.cc create mode 100644 kernel/sched/test_taskqueue.cc create mode 100644 kernel/task.h create mode 100644 lib/blake2/BUILD.bazel create mode 100644 lib/blake2/blake2s_kat.h create mode 100644 lib/blake2/blake2s_selftest.cc delete mode 100644 lib/blake2/meson.build delete mode 100644 lib/blake2/tests/blake2s_kat.h delete mode 100644 lib/blake2/tests/blake2s_selftest.cc create mode 100644 lib/libk/BUILD.bazel delete mode 100644 lib/libk/meson.build delete mode 100644 meson.build delete mode 100644 meson/compiler_flags/meson.build create mode 100644 platforms/BUILD.bazel create mode 100644 project_config.bzl delete mode 100644 src/boot.h delete mode 100644 src/kernel.c delete mode 100644 src/mem.h delete mode 100644 src/mem/vmm.c delete mode 100644 src/meson.build delete mode 100644 src/mmap.c delete mode 100644 src/mmap.h delete mode 100644 src/multiboot2.c delete mode 100644 src/sched.hpp delete mode 100644 src/sched/roundrobin.cpp delete mode 100644 src/sched/test_roundrobin.cc delete mode 100644 src/sched/test_taskqueue.cc delete mode 100644 src/task.h create mode 100644 toolchains/BUILD.bazel create mode 100644 toolchains/i386_elf_gcc.bzl create mode 100644 toolchains/i386_qemu.bzl create mode 100644 tools/BUILD.bazel create mode 100644 tools/configure_file.bzl create mode 100644 tools/make_iso.bzl create mode 100644 tools/qemu.bzl diff --git a/.bazel/compiler_flags.bazelrc b/.bazel/compiler_flags.bazelrc new file mode 100644 index 0000000..59a87f3 --- /dev/null +++ b/.bazel/compiler_flags.bazelrc @@ -0,0 +1,27 @@ +build --copt=-Wall +build --copt=-Wextra +build --copt=-Wpedantic +build --copt=-Werror=shadow +build --copt=-Wunused-parameter +build --copt=-Wmisleading-indentation +build --copt=-Wundef +build --copt=-Wuninitialized + +# cast warnings +build --copt=-Wcast-align +build --copt=-Wcast-qual + +# conversion +build --copt=-Wconversion +build --copt=-Wsign-conversion +build --copt=-Wdouble-promotion + +# pointers +build --copt=-Wpointer-arith +build --copt=-Wnull-dereference + +# cpp flags +build --cxxopt=-Wnon-virtual-dtor +build --cxxopt=-Woverloaded-virtual +build --cxxopt=-Wold-style-cast + diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 0000000..2a0a947 --- /dev/null +++ b/.bazelrc @@ -0,0 +1,11 @@ +# compiler flags +try-import %workspace%/.bazel/compiler_flags.bazelrc + +build --instrument_test_targets + +build:i386 --compilation_mode=opt +build:i386 --platforms=//platforms:i386 + +coverage --combined_report=lcov + +test --compilation_mode=dbg diff --git a/.gitignore b/.gitignore index 8ae6f9f..001d9bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,3 @@ -lib/musl* -build -*.a -*.elf -*.iso -isodir -src/conf.h +bazel-* .config.old -doc -# test files -test_* -!test_*.cc diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..9c05b27 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,13 @@ +load("//tools:make_iso.bzl", "make_iso") +load("//tools:qemu.bzl", "qemu") + +make_iso( + name = "glitch", + bootloader = "//grub:grub.cfg", + kernel = "//kernel:glitch.elf", +) + +qemu( + name = "qemu", + cdrom = ":glitch", +) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000..fbf1ad8 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,12 @@ +############################################################################### +# Bazel now uses Bzlmod by default to manage external dependencies. +# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel. +# +# For more details, please check https://github.com/bazelbuild/bazel/issues/18958 +############################################################################### + +register_toolchains( + "//toolchains:i386_elf_gcc", +) + +bazel_dep(name = "googletest", version = "1.14.0") diff --git a/arch/i386/BUILD.bazel b/arch/i386/BUILD.bazel new file mode 100644 index 0000000..2842a5b --- /dev/null +++ b/arch/i386/BUILD.bazel @@ -0,0 +1,44 @@ +exports_files( + ["linker.ld"], + visibility = ["//visibility:public"], +) + +cc_library( + name = "arch", + srcs = [ + "boot.s", + "gdt.c", + "init.s", + "isr.c", + "lgdt.c", + "lidt.c", + ], + hdrs = [ + "gdt.h", + "idt.h", + "paging.h", + ] + glob(["sys/*.h"]), + includes = ["."], + target_compatible_with = [ + "@platforms//os:none", + ], + visibility = ["//visibility:public"], + deps = ["//lib/libk:k"], +) + +# tests +cc_test( + name = "test_gdt", + srcs = [ + "gdt.c", + "gdt.h", + "test_gdt.cc", + ], + target_compatible_with = select({ + "@platforms//os:none": ["@platforms//:incompatible"], + "//conditions:default": [], + }), + deps = [ + "@googletest//:gtest_main", + ], +) diff --git a/arch/i386/boot.s b/arch/i386/boot.s new file mode 100644 index 0000000..40b0389 --- /dev/null +++ b/arch/i386/boot.s @@ -0,0 +1,120 @@ +/* The magic field should contain this. */ +.set MULTIBOOT2_HEADER_MAGIC, 0xe85250d6 +/* This should be in %eax. */ +.set MULTIBOOT2_BOOTLOADER_MAGIC, 0x36d76289 +.set MULTIBOOT_ARCHITECTURE_I386, 0 +.set MULTIBOOT_HEADER_TAG_END, 0 +.set MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST, 1 +.set MULTIBOOT_TAG_TYPE_MMAP, 6 + +.set PAGE_RO, 0x001 +.set PAGE_RW, 0x003 + +/* write section to page table macro + * + * Registers used: + * %ecx: loop counter [ set to $1024 ] + * %edx: temporary + * %esi: current page being mapped + * %edi: page entry [ set to $page_addr ] + */ +.macro mmap_section begin, end, access + mov $\begin, %esi # from $begin +1: cmpl $\end, %esi # until $end + jge 2f + + movl %esi, %edx + orl $\access, %edx + movl %edx, (%edi) + + addl $4096, %esi # move to next page + addl $4, %edi # size of page entry is 4 bytes + loop 1b # loop according to %ecx +2: +.endm + +/* Declare a multiboot header that marks this program as a kernel */ +.section .multiboot.header, "a" +header_begin: +.align 8 + .int MULTIBOOT2_HEADER_MAGIC + .int MULTIBOOT_ARCHITECTURE_I386 + .int header_end - header_begin + .int -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_I386 + (header_end - header_begin)) + +.align 8 +header_info_begin: + .short MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST + .short 0 # flags + .int header_info_end - header_info_begin + .int MULTIBOOT_TAG_TYPE_MMAP +header_info_end: + +.align 8 + .short MULTIBOOT_HEADER_TAG_END + .short 0 + .int 8 +header_end: + +.section .multiboot.pages, "aw", @nobits +.align 4096 +bootstrap_page0: + .skip 1024 * 4 + +.section .multiboot.text, "ax" +.extern k_pagedir +.extern k_stack +.extern k_init + +#.global __vaddr_base +#.set __vaddr_base, 0xc0000000 +#.global __vaddr_offset +.set __vaddr_offset, 0xc0000000 - 0x2000 + +.global _start +.type _start, @function +_start: + cli + + # check multiboot header + cmp $MULTIBOOT2_BOOTLOADER_MAGIC, %eax + jz c + hlt + +c: mov $k_stack - __vaddr_offset, %esp + + push %ebx # pointer to multiboot structure + call __multiboot2 + + # mmap multiboot section into bootstrap page + movl $bootstrap_page0, %edi + movl $1024, %ecx + mmap_section __multiboot_begin, __multiboot_end, PAGE_RW + mmap_section (__text_begin - __vaddr_offset), (__text_end - __vaddr_offset), PAGE_RO + mmap_section (__rodata_begin - __vaddr_offset), (__rodata_end - __vaddr_offset), PAGE_RO + mmap_section (__bss_begin - __vaddr_offset), (__bss_end - __vaddr_offset), PAGE_RW + mmap_section (__data_begin - __vaddr_offset), (__data_end - __vaddr_offset), PAGE_RW + + # mmap all the other section into k_ptable0x300 + movl $(k_ptable0x300 - __vaddr_offset), %edi + movl $1024, %ecx + mmap_section (__text_begin - __vaddr_offset), (__text_end - __vaddr_offset), PAGE_RO + mmap_section (__rodata_begin - __vaddr_offset), (__rodata_end - __vaddr_offset), PAGE_RO + mmap_section (__bss_begin - __vaddr_offset), (__bss_end - __vaddr_offset), PAGE_RW + mmap_section (__data_begin - __vaddr_offset), (__data_end - __vaddr_offset), PAGE_RW + + movl $(bootstrap_page0 + PAGE_RW), k_pagedir - __vaddr_offset + 0 * 4 + movl $(k_ptable0x300 - __vaddr_offset + PAGE_RW), k_pagedir - __vaddr_offset + 768 * 4 + + movl $(k_pagedir - __vaddr_offset), %ecx + movl %ecx, %cr3 + + # enable paging and the write-protect bit + movl %cr0, %ecx + orl $0x80010000, %ecx + movl %ecx, %cr0 + + # jump to higher half with an absolute jump + lea (k_init), %ecx + jmp *%ecx + diff --git a/arch/i386/gdt.c b/arch/i386/gdt.c new file mode 100644 index 0000000..3148096 --- /dev/null +++ b/arch/i386/gdt.c @@ -0,0 +1,20 @@ +#include "gdt.h" + +void +SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access) +{ + self->base_15_0 = base & 0xffff; + self->base_23_16 = (uint8_t)(base >> 16); + self->base_31_24 = (uint8_t)(base >> 24); + + self->limit_15_0 = (limit <= 0xffff) ? (limit & 0xffff) : ((limit >> 12) & 0xffff); + self->limit_19_16 = 0xfu & (uint8_t)((limit <= 0xffff) ? 0 : (limit >> 28)); + + self->access = access; + + self->a = 0; + self->rsv = 0; + self->db = (limit > 0xffff) ? 1 : 0; + self->granularity = (limit > 0) ? 1 : 0; +} + diff --git a/arch/i386/gdt.h b/arch/i386/gdt.h new file mode 100644 index 0000000..2bdfb22 --- /dev/null +++ b/arch/i386/gdt.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +enum Ring { Ring0 = 0x0, Ring1 = 0x1, Ring2 = 0x2, Ring3 = 0x3 }; + +struct __attribute__((packed)) Access { + unsigned accessed : 1; /* if 0, is set by processor when accessed */ + unsigned readwrite : 1; /* code seg: read toggle; data seg: write toggle */ + unsigned direction : 1; /* code seg: conforming bit; data seg: direction bit */ + unsigned executable : 1; /* executable bit */ + unsigned segment : 1; /* true for code/data; false for gates/tss */ + unsigned privilege : 2; /* descriptor privilege level */ + unsigned present : 1; /* true for every active segment */ +}; +/* _Static_assert(sizeof(struct Access) == 1, "access byte size"); */ + +static const struct Access null_access = {0, 0, 0, 0, 0, Ring0, 0}; +static const struct Access ktext_access = {0, 1, 0, 1, 1, Ring0, 1}; +static const struct Access kdata_access = {0, 1, 0, 0, 1, Ring0, 1}; + +/* Segment Descriptor + * A memory structure (part of a table) that tells the CPU the attributes of a given segment + * |31| | | | | | |24|23|22|21|20|19| | |16|15| | | | | | | 8| 7| | | | | | | 0| + * | base_31_24 | G|DB| | A| lim_19_16 | access | base_23_16 | + * | base_15_0 | limit_15_0 | + * |31| | | | | | | | | | | | | | |16|15| | | | | | | | | | | | | | | 0| + * limit size of segment - 1, either in bytes or in 4KiB chunks (check flags) + * base address of segment + * access + * flags defines the segment chunks and 16/32 bit */ +struct __attribute__((packed)) SegmentDescriptor_t { + uint16_t limit_15_0; /* low bits of segment limit */ + uint16_t base_15_0; /* low bits of segment base address */ + uint8_t base_23_16; /* middle bits of segment base address */ + uint8_t access; /* access byte */ + unsigned limit_19_16 : 4; /* high bits of segment limit */ + /* flags */ + bool a : 1; /* unused, available for software use */ + bool rsv : 1; /* reserved */ + bool db : 1; /* false => 16-bit seg; true => 32-bit seg */ + bool granularity : 1; /* limit scaled by 4k when set */ + uint8_t base_31_24; /* high bits of segment address */ +}; +/* _Static_assert(sizeof(struct SegmentDescriptor_t) == 8, "segment descriptor size"); */ + +void SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access); + +void gdt_install(); + +enum SegmentIndex { + ktextDescriptor = 2 * sizeof(struct SegmentDescriptor_t), + kdataDescriptor = 3 * sizeof(struct SegmentDescriptor_t) +}; diff --git a/arch/i386/idt.h b/arch/i386/idt.h new file mode 100644 index 0000000..ca39bde --- /dev/null +++ b/arch/i386/idt.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +struct interrupt_frame { + uint32_t ip; + uint32_t cs; + uint32_t flags; + uint32_t sp; + uint32_t ss; +}; + +/* typedef void (*irq_handler)(); */ + +/* isr.c */ +void abort_handler(struct interrupt_frame *frame); +void syscall_handler(struct interrupt_frame *frame); +void irq0x00(struct interrupt_frame *frame); /* timer interrupt */ +void irq0x01(struct interrupt_frame *frame); /* keyboard interrupt */ +void irq0x0c(struct interrupt_frame *frame); /* mouse interrupt */ + +/* lidt.c */ +void idt_install(); diff --git a/arch/i386/init.s b/arch/i386/init.s new file mode 100644 index 0000000..ad329bb --- /dev/null +++ b/arch/i386/init.s @@ -0,0 +1,49 @@ +.section .stack, "aw", @nobits +.global k_stack +.align 16 /* Stack on x86 must be 16-byte aligned according to System V ABI */ +k_stack_bottom: + .skip 16 * 1024 /* 16 kByte */ +k_stack: + +.section .pages, "aw", @nobits +.align 4096 +.global k_pagedir +k_pagedir: .skip 1024 * 4 +.global k_ptable0x300 +k_ptable0x300: .skip 1024 * 4 + +.section .text +.global k_init +.extern kmain +.extern gdt_install +.extern idt_install +k_init: + # kernel entry point, higher half + + # unmap the identity mapping as its no longer necessary + movl $0, k_pagedir + 0 * 4 + mov %cr3, %ecx # reload cr3 to force a TLB flush + mov %ecx, %cr3 + + # zero out the stack + mov $4096, %ecx # loop counter + mov $k_stack_bottom, %edi # start from the bottom + xor %edx, %edx # clear %edx +1: movl %edx, (%edi) # store %edx into address in %edi + addl $4, %edi # point to next address + loop 1b # loop according to %ecx + + mov $k_stack, %esp # point stack pointer to the stack + + # hardware init + call gdt_install # Global Descriptor Table + call idt_install # Interrupt Descriptor Table + + # jump into kernel + call kmain + + /* If the system has nothing more to do, put it in an infinite loop */ + cli # disable interrupts +h: hlt # wait for interrupt + jmp h # continue waiting for interrupt + diff --git a/arch/i386/isr.c b/arch/i386/isr.c new file mode 100644 index 0000000..acc2961 --- /dev/null +++ b/arch/i386/isr.c @@ -0,0 +1,50 @@ +/* + * Interrupt Service Routines + */ + +#include "idt.h" +#include "sys/control.h" +#include + +__attribute__((interrupt)) void +abort_handler(struct interrupt_frame *frame) +{ + printf("### system abort ###\n"); + printf("# ip: %x cs=%x\n", frame->ip, frame->cs); + printf("# sp: %x ss=%x\n", frame->sp, frame->ss); + printf("# flags: %x\n", frame->flags); + abort(); +} + +__attribute__((interrupt)) void +syscall_handler(__attribute__((unused)) struct interrupt_frame *frame) +{ + unsigned int n; + __asm__("mov %%eax, %0" : "=r"(n)); + printf("syscall %x\n, n"); + abort(); +} + +void pic_clear(unsigned char irq); + +__attribute__((interrupt)) void +irq0x00(__attribute__((unused)) struct interrupt_frame *frame) +{ + pic_clear(0x00); +} + +extern void ps2_keyboard_irq_handler(); +__attribute__((interrupt)) void +irq0x01(__attribute__((unused)) struct interrupt_frame *frame) +{ + ps2_keyboard_irq_handler(); + pic_clear(0x01); +} + +extern void mouse_packet(); +__attribute__((interrupt)) void +irq0x0c(__attribute__((unused)) struct interrupt_frame *frame) +{ + mouse_packet(); + pic_clear(0x0c); +} diff --git a/arch/i386/lgdt.c b/arch/i386/lgdt.c new file mode 100644 index 0000000..473a91d --- /dev/null +++ b/arch/i386/lgdt.c @@ -0,0 +1,25 @@ +#include "gdt.h" + +struct __attribute__((packed)) Pointer { + uint16_t limit; + uint32_t base; +}; + +static struct SegmentDescriptor_t segments[8] __attribute__((aligned(32))); + +void +gdt_install() +{ + const struct Pointer ptr = {sizeof(segments) - 1, (unsigned)&segments}; + SegmentDescriptor(&segments[0], 0, 0, 0); /* null segment */ + SegmentDescriptor(&segments[2], 0, 0xffffffff, 0x9a); /* ktext segment */ + SegmentDescriptor(&segments[3], 0, 0xffffffff, 0x92); /* kdata segment */ + + __asm__("lgdt (%0)" : : "a"(&ptr)); + + /* load the kernel data segment */ + __asm__("mov %0, %%ds; mov %0, %%es; mov %0, %%fs; mov %0, %%gs; mov %0, %%ss" : : "ax"(kdataDescriptor)); + + /* load the kernel code segment */ + __asm__("ljmp %0, $1f\n1:" : : "i"(ktextDescriptor)); +} diff --git a/arch/i386/lidt.c b/arch/i386/lidt.c new file mode 100644 index 0000000..86567f8 --- /dev/null +++ b/arch/i386/lidt.c @@ -0,0 +1,55 @@ +#include "idt.h" +#include + +struct __attribute__((packed)) Pointer { + uint16_t limit; + uint32_t base; +}; + +enum Type { + Null = 0, + Intr = 0x8e /* 1000 1110 32-bit interrupt */ +}; + +struct __attribute__((packed)) Gate_t { + uint16_t offset_15_0; /* segment offset low */ + uint16_t selector; /* code segment selector */ + uint8_t __unused; /* unused in protected mode */ + uint8_t type; /* interrupt type */ + uint16_t offset_31_16; /* segment offset high */ +}; +/* _Static_assert(sizeof(struct Gate_t) == 8, "interrupt gate size"); */ + +void +Gate(struct Gate_t *entry, void (*f)(struct interrupt_frame *), uint16_t selector) +{ + uint32_t f_addr = (uint32_t)f; + entry->offset_15_0 = f_addr & 0xffff; + entry->offset_31_16 = (uint16_t)(f_addr >> 16) & 0xffff; + entry->selector = selector; + entry->__unused = 0; + entry->type = Intr; +} + +static struct Gate_t interrupt_table[256] __attribute((aligned(4096))); + +void +idt_install() +{ + int i; + const struct Pointer ptr = {sizeof(interrupt_table) - 1, (unsigned)&interrupt_table}; + + /* exceptions 0x00~0x13 */ + for (i = 0; i <= 0x13; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); + + /* irq 0x20~0x2f */ + for (i = 0x22; i <= 0x2f; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); + Gate(&interrupt_table[0x20], &irq0x00, 0x10); + Gate(&interrupt_table[0x21], &irq0x01, 0x10); + Gate(&interrupt_table[0x2c], &irq0x0c, 0x10); + + /* syscall 0x80 */ + Gate(&interrupt_table[0x80], &syscall_handler, 0x10); + + __asm__("lidt (%0)" : : "a"(&ptr)); +} diff --git a/arch/i386/linker.ld b/arch/i386/linker.ld new file mode 100644 index 0000000..61a3be9 --- /dev/null +++ b/arch/i386/linker.ld @@ -0,0 +1,54 @@ +ENTRY(_start) +OUTPUT_FORMAT(elf32-i386) + +MULTIBOOT_SIZE = 0x2000; +VADDR_BASE = 0xc0000000; + +SECTIONS +{ + /* First put the multiboot header, as it is required to be put very early in the image or the bootloader won't * + * recognize the file format. * + * Once the MMU is set up, this section is no longer needed and should be unmapped. */ + . = 0; + .bootstrap : { + . = ALIGN(8); + __multiboot_begin = .; + KEEP(*(.multiboot.header)) + KEEP(*(.multiboot.text)) + KEEP(*(.multiboot.pages)) + __multiboot_end = .; + } + + . = VADDR_BASE; + + .text ALIGN(4K) : AT(ADDR(.text) - VADDR_BASE + MULTIBOOT_SIZE) { + __text_begin = .; + *(.text*) + __text_end = .; + } + + /* Read-only data. */ + .rodata ALIGN(4K) : AT(ADDR(.rodata) - VADDR_BASE + MULTIBOOT_SIZE) { + __rodata_begin = .; + *(.constinit) + *(.rodata*) + __rodata_end = .; + } + + /* Read-write data (uninitialized) and stack */ + .bss ALIGN(4K) : AT(ADDR(.bss) - VADDR_BASE + MULTIBOOT_SIZE) { + __bss_begin = .; + *(.stack) + *(.pages) + *(.bss*) + __bss_end = .; + } + + /* Read-write data (initialized) */ + .data ALIGN(4K) : AT(ADDR(.data) - VADDR_BASE + MULTIBOOT_SIZE) { + __data_begin = .; + *(.init) + *(.data) + __data_end = .; + } +} diff --git a/arch/i386/paging.h b/arch/i386/paging.h new file mode 100644 index 0000000..f5bfa78 --- /dev/null +++ b/arch/i386/paging.h @@ -0,0 +1,59 @@ +#pragma once + +/* DirectoryEntry + * |31| | | | | | | | | | | | | | | | | | | |11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| + * | page table 4-kb aligned address | avail | G| S| | A| C| W| U| R| P| */ +struct __attribute__((packed)) DirectoryEntry { + unsigned present : 1; /* 0: if set, the page is actually in physical memory */ + unsigned writeable : 1; /* 1: if set, the page is read/write; otherwise the page is read-only */ + unsigned user : 1; /* 2: if set, then page can be access by all; otherwise only the supervisor can access it */ + unsigned writethrough : 1; /* 3: if set, write-through caching is enabled; otherwise write-back is enabled instead */ + unsigned cachedisable : 1; /* 4: if set, the page will not be cached */ + unsigned accessed : 1; /* 5: set by the CPU when the page is read from or written to */ + unsigned dirty : 1; /* 6: used to determine whether a page has been written to */ + unsigned pagesize : 1; /* 7: page size == 0 */ + unsigned global : 1; + unsigned int __available__ : 3; /* available to the OS */ + unsigned int address : 20; +}; +/* TODO _Static_assert(sizeof(struct DirectoryEntry) == 4, "DirectoryEntry size"); */ + +/* DirectoryEntry4MB + * |31| | | | | | | | |22|21|20| | | | | | |13|12|11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| + * | bits 31-22 of address |RS| bits 39-22 of |AT| avail | G|PS| D| A|CD|WT|US|RW| P| + * | |VD| address */ +struct __attribute__((packed)) DirectoryEntry4MB { + unsigned present : 1; /* 0: if set, the page is actually in physical memory */ + unsigned writeable : 1; /* 1: if set, the page is read/write; otherwise the page is read-only */ + unsigned useraccess : 1; /* 2: if set, then page can be access by all; otherwise only the supervisor can access it */ + unsigned writethrough : 1; /* 3: if set, write-through caching is enabled; otherwise write-back is enabled instead */ + unsigned cachedisable : 1; /* 4: if set, the page will not be cached */ + unsigned accessed : 1; /* 5: set by the CPU when the page is read from or written to */ + unsigned dirty : 1; /* 6: used to determine whether a page has been written to */ + unsigned pagesize : 1; /* 7: page size == 1 */ + unsigned global : 1; /* 8: */ + unsigned __available__ : 3; /* 11..9 available to the OS */ + unsigned pat : 1; /* 12: page attribute table */ + unsigned int address_high : 8; + unsigned rsvd : 1; /* 21 */ + unsigned int address_low : 10; +}; +/* TODO _Static_assert(sizeof(struct DirectoryEntry4MB) == 4, "DirectoryEntry4M size"); */ + +/* TableEntry + * |31| | | | | | | | | | | | | | | | | | | |11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| + * | page table 4-kb aligned address | avail | G| | D| A| C| W|US|RW| P| */ +struct __attribute__((packed)) TableEntry { + unsigned present : 1; /* if set, the page is actually in physical memory */ + unsigned writeable : 1; /* if set, the page is read/write; otherwise the page is read-only */ + unsigned user : 1; /* if set, then page can be access by all; otherwise only the supervisor can access it */ + unsigned writethrough : 1; /* if set, write-through caching is enabled; otherwise write-back is enabled instead */ + unsigned cachedisable : 1; /* if set, the page will not be cached */ + unsigned accessed : 1; /* set by the CPU when the page is read from or written to */ + unsigned dirty : 1; /* used to determine whether a page has been written to */ + unsigned pat : 1; /* page attribute table? */ + unsigned global : 1; + unsigned int __available__ : 3; /* available to the OS */ + unsigned int address : 20; +}; +/* TODO _Static_assert(sizeof(struct TableEntry) == 4, "TableEntry size"); */ diff --git a/arch/i386/sys/control.h b/arch/i386/sys/control.h new file mode 100644 index 0000000..89ab067 --- /dev/null +++ b/arch/i386/sys/control.h @@ -0,0 +1,24 @@ +#pragma once + +static __inline__ void +abort() +{ + /* Symbol h is already defined? +__asm__(R"(cli +h: hlt +jmp h)"); +*/ + __asm__("cli; hlt"); +} + +static __inline__ void +enable_interrupts() +{ + __asm__("sti"); +} + +static __inline__ void +disable_interrupts() +{ + __asm__("cli"); +} diff --git a/arch/i386/sys/cpuid.h b/arch/i386/sys/cpuid.h new file mode 100644 index 0000000..6613967 --- /dev/null +++ b/arch/i386/sys/cpuid.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +struct CPUVersion { + unsigned int stepping : 4; + unsigned int model : 4; + unsigned int family : 4; + unsigned int type : 2; + unsigned int __unused_1 : 2; + unsigned int model_ex : 4; + unsigned int family_ex : 8; + unsigned int __unused_2 : 4; +} __attribute__((packed, aligned(__alignof__(unsigned int)))); +/* FIXME _Static_assert(sizeof(struct CPUVersion) == sizeof(unsigned int), "cpuid version struct size"); */ + +unsigned int +family(const struct CPUVersion v) +{ + if (v.family == 0x0f) return v.family + v.family_ex; + else + return v.family; +} + +unsigned int +model(const struct CPUVersion v) +{ + switch (v.family) { + case 0x06: + case 0x0f: + return ((unsigned int)v.model_ex << 4) | v.model; + default: + return v.model; + } +} diff --git a/arch/i386/sys/io.h b/arch/i386/sys/io.h new file mode 100644 index 0000000..4ff5d85 --- /dev/null +++ b/arch/i386/sys/io.h @@ -0,0 +1,92 @@ +#pragma once + +/* port listings */ +enum UART { + COM1 = 0x3f8, + COM2 = 0x2f8, + COM3 = 0x3e8, + COM4 = 0x2e8, + COM5 = 0x5f8, + COM6 = 0x4f8, + COM7 = 0x5e8, + COM8 = 0x4e8 +}; + +static __inline__ void +outb(unsigned char val, unsigned short port) +{ + __asm__("outb %0,%1" : : "a"(val), "dN"(port)); +} + +static __inline__ void +outw(unsigned short val, unsigned short port) +{ + __asm__("outw %0,%1" : : "a"(val), "dN"(port)); +} + +static __inline__ void +outl(unsigned int val, unsigned short port) +{ + __asm__("outl %0,%1" : : "a"(val), "dN"(port)); +} + +static __inline__ unsigned char +inb(unsigned short port) +{ + unsigned char val; + __asm__("inb %1,%0" : "=a"(val) : "dN"(port)); + return val; +} + +static __inline__ unsigned short +inw(unsigned short port) +{ + unsigned short val; + __asm__("inw %1,%0" : "=a"(val) : "dN"(port)); + return val; +} + +static __inline__ unsigned int +inl(unsigned short port) +{ + unsigned int val; + __asm__("inl %1,%0" : "=a"(val) : "dN"(port)); + return val; +} + +static __inline__ void +outsb(unsigned short port, const void *__buf, unsigned long __n) +{ + __asm__("cld; rep; outsb" : "+S"(__buf), "+c"(__n) : "d"(port)); +} + +static __inline__ void +outsw(unsigned short port, const void *__buf, unsigned long __n) +{ + __asm__("cld; rep; outsw" : "+S"(__buf), "+c"(__n) : "d"(port)); +} + +static __inline__ void +outsl(unsigned short port, const void *__buf, unsigned long __n) +{ + __asm__("cld; rep; outsl" : "+S"(__buf), "+c"(__n) : "d"(port)); +} + +static __inline__ void +insb(unsigned short port, void *__buf, unsigned long __n) +{ + __asm__("cld; rep; insb" : "+D"(__buf), "+c"(__n) : "d"(port)); +} + +static __inline__ void +insw(unsigned short port, void *__buf, unsigned long __n) +{ + __asm__("cld; rep; insw" : "+D"(__buf), "+c"(__n) : "d"(port)); +} + +static __inline__ void +insl(unsigned short port, void *__buf, unsigned long __n) +{ + __asm__("cld; rep; insl" : "+D"(__buf), "+c"(__n) : "d"(port)); +} + diff --git a/arch/i386/sys/syscall.h b/arch/i386/sys/syscall.h new file mode 100644 index 0000000..9e62c89 --- /dev/null +++ b/arch/i386/sys/syscall.h @@ -0,0 +1,8 @@ +#pragma once + +static inline int +syscall(int number) +{ + asm volatile("int $0x80"); + return 0; +} diff --git a/arch/i386/test_gdt.cc b/arch/i386/test_gdt.cc new file mode 100644 index 0000000..3501ae9 --- /dev/null +++ b/arch/i386/test_gdt.cc @@ -0,0 +1,25 @@ +#include + +extern "C" { +#include "gdt.h" +} + +TEST(i686GDT, KnownAccessByteValues) +{ + EXPECT_EQ(*(uint8_t *)&null_access, 0x00); + EXPECT_EQ(*(uint8_t *)&ktext_access, 0x9a); + EXPECT_EQ(*(uint8_t *)&kdata_access, 0x92); +} + +TEST(i686GDT, NullSegmentDescriptor) +{ + struct SegmentDescriptor_t d; + SegmentDescriptor(&d, 0, 0, 0); + EXPECT_EQ(*(uint64_t *)&d, 0); +} + +TEST(i686GDT, SegmentIndex) +{ + EXPECT_EQ(ktextDescriptor, 0x10); + EXPECT_EQ(kdataDescriptor, 0x18); +} diff --git a/config.mk b/config.mk deleted file mode 100644 index 36fc32f..0000000 --- a/config.mk +++ /dev/null @@ -1,61 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Main menu -# - -# -# Toolchain -# -CONFIG_ARCH_i686=y -# CONFIG_ARCH_mips is not set -CONFIG_TOOLCHAIN_i686_gcc=y -CONFIG_CFLAGS="-g -Og" -CONFIG_CXXFLAGS="-g -Og" -CONFIG_LDFLAGS="" -# end of Toolchain - -# -# Devices -# -CONFIG_PIC_8259=y -CONFIG_UART_16550=y -CONFIG_VGA_TEXT_MODE=y -CONFIG_KB_PS2=y -# end of Devices - -## toolchain.mk -ARCH=i686 - -# define compiler, linker, archiver and strip and their flags -${ARCH}_AS := i686-elf-as - -${ARCH}_CC := i686-elf-gcc -ansi -${ARCH}_CCID := $(shell ${${ARCH}_CC} --version | head -n1) -${ARCH}_CFLAGS := -Wall -Wextra -Wpedantic -Werror=shadow -Wconversion -fanalyzer \ - -D__ARCH__="${ARCH}" -ffreestanding -mgeneral-regs-only \ - $(shell echo ${CONFIG_CFLAGS}) - -${ARCH}_LD := i686-elf-ld -${ARCH}_LDID := $(shell ${${ARCH}_LD} --version | head -n1) -${ARCH}_LDFLAGS := -static -nostdlib \ - $(shell echo ${CONFIG_LDFLAGS}) - -${ARCH}_AR := i686-elf-ar -${ARCH}_ARFLAGS := -crus - -${ARCH}_STRIP := i686-elf-strip - -# define compiler and flags for test targets -HOST_CC := gcc -HOST_CFLAGS := -Wall -Wextra -Wpedantic -Werror=shadow -Wconversion \ - ${CFLAGS} -HOST_CXX := g++ -HOST_CXXFLAGS := -Wall -Wextra -Wpedantic -Werror=shadow -Wconversion -g -Og \ - $(shell pkg-config --cflags gtest gtest_main gmock) \ - ${CXXFLAGS} - -HOST_LDFLAGS := $(shell pkg-config --libs gtest gtest_main gmock) - -# emulator name and flags -QEMU := qemu-system-i386 -accel kvm -machine pc - diff --git a/devices/BUILD.bazel b/devices/BUILD.bazel new file mode 100644 index 0000000..0c58d48 --- /dev/null +++ b/devices/BUILD.bazel @@ -0,0 +1,22 @@ +cc_library( + name = "drivers", + srcs = [ + "i8042.c", + "mouse.c", + "pckbd.c", + "pic_8259.c", + "uart/uart_16550.c", + "uart/uart_16550.h", + "vga.c", + ], + hdrs = glob(["include/*.h"]), + defines = [ + "__ARCH__=i386", + ], + includes = ["include"], + visibility = ["//visibility:public"], + deps = [ + "//arch/i386:arch", + "//lib/libk:k", + ], +) diff --git a/devices/meson.build b/devices/meson.build deleted file mode 100644 index d6f4739..0000000 --- a/devices/meson.build +++ /dev/null @@ -1,27 +0,0 @@ -devs_srcs = files( - 'pic_8259.c', - 'uart/uart_16550.c', - 'vga.c', - 'i8042.c', - 'pckbd.c', - 'mouse.c', -) -devs_incl = include_directories('include') - -devs = declare_dependency( - link_with: static_library('devs', devs_srcs, - include_directories: devs_incl, - dependencies: [ libk, i686 ], - ), - include_directories: devs_incl, -) - -# tests -test('uart_16550', - executable('test_uart_16550', 'uart/uart_16550.c', 'uart/unittest_uart_16550.cc', - include_directories: devs_incl, - dependencies: [ gtest, gmock ], - native: true), - suite: 'dev' -) - diff --git a/grub/BUILD.bazel b/grub/BUILD.bazel new file mode 100644 index 0000000..2d12cc1 --- /dev/null +++ b/grub/BUILD.bazel @@ -0,0 +1,9 @@ +package(default_visibility = ["//visibility:public"]) + +exports_files(["grub.cfg"]) + +cc_library( + name = "multiboot2", + hdrs = ["include/multiboot2.h"], + includes = ["include"], +) diff --git a/grub/include/multiboot2.h b/grub/include/multiboot2.h new file mode 100644 index 0000000..5a3db5a --- /dev/null +++ b/grub/include/multiboot2.h @@ -0,0 +1,416 @@ +/* multiboot2.h - Multiboot 2 header file. */ +/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY + * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR + * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef MULTIBOOT_HEADER +#define MULTIBOOT_HEADER 1 + +/* How many bytes from the start of the file we search for the header. */ +#define MULTIBOOT_SEARCH 32768 +#define MULTIBOOT_HEADER_ALIGN 8 + +/* The magic field should contain this. */ +#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 + +/* This should be in %eax. */ +#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 + +/* Alignment of multiboot modules. */ +#define MULTIBOOT_MOD_ALIGN 0x00001000 + +/* Alignment of the multiboot info structure. */ +#define MULTIBOOT_INFO_ALIGN 0x00000008 + +/* Flags set in the 'flags' member of the multiboot header. */ + +#define MULTIBOOT_TAG_ALIGN 8 +#define MULTIBOOT_TAG_TYPE_END 0 +#define MULTIBOOT_TAG_TYPE_CMDLINE 1 +#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 2 +#define MULTIBOOT_TAG_TYPE_MODULE 3 +#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 4 +#define MULTIBOOT_TAG_TYPE_BOOTDEV 5 +#define MULTIBOOT_TAG_TYPE_MMAP 6 +#define MULTIBOOT_TAG_TYPE_VBE 7 +#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 8 +#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 9 +#define MULTIBOOT_TAG_TYPE_APM 10 +#define MULTIBOOT_TAG_TYPE_EFI32 11 +#define MULTIBOOT_TAG_TYPE_EFI64 12 +#define MULTIBOOT_TAG_TYPE_SMBIOS 13 +#define MULTIBOOT_TAG_TYPE_ACPI_OLD 14 +#define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 +#define MULTIBOOT_TAG_TYPE_NETWORK 16 +#define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 +#define MULTIBOOT_TAG_TYPE_EFI_BS 18 +#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 +#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 +#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21 + +#define MULTIBOOT_HEADER_TAG_END 0 +#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 +#define MULTIBOOT_HEADER_TAG_ADDRESS 2 +#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 3 +#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 +#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 +#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 +#define MULTIBOOT_HEADER_TAG_EFI_BS 7 +#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 +#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10 + +#define MULTIBOOT_ARCHITECTURE_I386 0 +#define MULTIBOOT_ARCHITECTURE_MIPS32 4 +#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 + +#define MULTIBOOT_LOAD_PREFERENCE_NONE 0 +#define MULTIBOOT_LOAD_PREFERENCE_LOW 1 +#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2 + +#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 +#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 + +#ifndef ASM_FILE + +typedef unsigned char multiboot_uint8_t; +typedef unsigned short multiboot_uint16_t; +typedef unsigned int multiboot_uint32_t; +typedef unsigned long long multiboot_uint64_t; + +struct multiboot_header +{ + /* Must be MULTIBOOT_MAGIC - see above. */ + multiboot_uint32_t magic; + + /* ISA */ + multiboot_uint32_t architecture; + + /* Total header length. */ + multiboot_uint32_t header_length; + + /* The above fields plus this one must equal 0 mod 2^32. */ + multiboot_uint32_t checksum; +}; + +struct multiboot_header_tag +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; +}; + +struct multiboot_header_tag_information_request +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t requests[0]; +}; + +struct multiboot_header_tag_address +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t header_addr; + multiboot_uint32_t load_addr; + multiboot_uint32_t load_end_addr; + multiboot_uint32_t bss_end_addr; +}; + +struct multiboot_header_tag_entry_address +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t entry_addr; +}; + +struct multiboot_header_tag_console_flags +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t console_flags; +}; + +struct multiboot_header_tag_framebuffer +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t width; + multiboot_uint32_t height; + multiboot_uint32_t depth; +}; + +struct multiboot_header_tag_module_align +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; +}; + +struct multiboot_header_tag_relocatable +{ + multiboot_uint16_t type; + multiboot_uint16_t flags; + multiboot_uint32_t size; + multiboot_uint32_t min_addr; + multiboot_uint32_t max_addr; + multiboot_uint32_t align; + multiboot_uint32_t preference; +}; + +struct multiboot_color +{ + multiboot_uint8_t red; + multiboot_uint8_t green; + multiboot_uint8_t blue; +}; + +struct multiboot_mmap_entry +{ + multiboot_uint64_t addr; + multiboot_uint64_t len; +#define MULTIBOOT_MEMORY_AVAILABLE 1 +#define MULTIBOOT_MEMORY_RESERVED 2 +#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 +#define MULTIBOOT_MEMORY_NVS 4 +#define MULTIBOOT_MEMORY_BADRAM 5 + multiboot_uint32_t type; + multiboot_uint32_t zero; +}; +typedef struct multiboot_mmap_entry multiboot_memory_map_t; + +struct multiboot_tag +{ + multiboot_uint32_t type; + multiboot_uint32_t size; +}; + +struct multiboot_tag_string +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + char string[0]; +}; + +struct multiboot_tag_module +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t mod_start; + multiboot_uint32_t mod_end; + char cmdline[0]; +}; + +struct multiboot_tag_basic_meminfo +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t mem_lower; + multiboot_uint32_t mem_upper; +}; + +struct multiboot_tag_bootdev +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t biosdev; + multiboot_uint32_t slice; + multiboot_uint32_t part; +}; + +struct multiboot_tag_mmap +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t entry_size; + multiboot_uint32_t entry_version; + struct multiboot_mmap_entry entries[0]; +}; + +struct multiboot_vbe_info_block +{ + multiboot_uint8_t external_specification[512]; +}; + +struct multiboot_vbe_mode_info_block +{ + multiboot_uint8_t external_specification[256]; +}; + +struct multiboot_tag_vbe +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + + multiboot_uint16_t vbe_mode; + multiboot_uint16_t vbe_interface_seg; + multiboot_uint16_t vbe_interface_off; + multiboot_uint16_t vbe_interface_len; + + struct multiboot_vbe_info_block vbe_control_info; + struct multiboot_vbe_mode_info_block vbe_mode_info; +}; + +struct multiboot_tag_framebuffer_common +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + + multiboot_uint64_t framebuffer_addr; + multiboot_uint32_t framebuffer_pitch; + multiboot_uint32_t framebuffer_width; + multiboot_uint32_t framebuffer_height; + multiboot_uint8_t framebuffer_bpp; +#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 +#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 +#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 + multiboot_uint8_t framebuffer_type; + multiboot_uint16_t reserved; +}; + +struct multiboot_tag_framebuffer +{ + struct multiboot_tag_framebuffer_common common; + + union + { + struct + { + multiboot_uint16_t framebuffer_palette_num_colors; + struct multiboot_color framebuffer_palette[0]; + }; + struct + { + multiboot_uint8_t framebuffer_red_field_position; + multiboot_uint8_t framebuffer_red_mask_size; + multiboot_uint8_t framebuffer_green_field_position; + multiboot_uint8_t framebuffer_green_mask_size; + multiboot_uint8_t framebuffer_blue_field_position; + multiboot_uint8_t framebuffer_blue_mask_size; + }; + }; +}; + +struct multiboot_tag_elf_sections +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t num; + multiboot_uint32_t entsize; + multiboot_uint32_t shndx; + char sections[0]; +}; + +struct multiboot_tag_apm +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint16_t version; + multiboot_uint16_t cseg; + multiboot_uint32_t offset; + multiboot_uint16_t cseg_16; + multiboot_uint16_t dseg; + multiboot_uint16_t flags; + multiboot_uint16_t cseg_len; + multiboot_uint16_t cseg_16_len; + multiboot_uint16_t dseg_len; +}; + +struct multiboot_tag_efi32 +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t pointer; +}; + +struct multiboot_tag_efi64 +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint64_t pointer; +}; + +struct multiboot_tag_smbios +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t major; + multiboot_uint8_t minor; + multiboot_uint8_t reserved[6]; + multiboot_uint8_t tables[0]; +}; + +struct multiboot_tag_old_acpi +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t rsdp[0]; +}; + +struct multiboot_tag_new_acpi +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t rsdp[0]; +}; + +struct multiboot_tag_network +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint8_t dhcpack[0]; +}; + +struct multiboot_tag_efi_mmap +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t descr_size; + multiboot_uint32_t descr_vers; + multiboot_uint8_t efi_mmap[0]; +}; + +struct multiboot_tag_efi32_ih +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t pointer; +}; + +struct multiboot_tag_efi64_ih +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint64_t pointer; +}; + +struct multiboot_tag_load_base_addr +{ + multiboot_uint32_t type; + multiboot_uint32_t size; + multiboot_uint32_t load_base_addr; +}; + +#endif /* ! ASM_FILE */ + +#endif /* ! MULTIBOOT_HEADER */ diff --git a/grub/meson.build b/grub/meson.build deleted file mode 100644 index 917f8d7..0000000 --- a/grub/meson.build +++ /dev/null @@ -1,2 +0,0 @@ -grub_incl = include_directories('.', is_system: true) - diff --git a/grub/multiboot2.h b/grub/multiboot2.h deleted file mode 100644 index 5a3db5a..0000000 --- a/grub/multiboot2.h +++ /dev/null @@ -1,416 +0,0 @@ -/* multiboot2.h - Multiboot 2 header file. */ -/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY - * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR - * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef MULTIBOOT_HEADER -#define MULTIBOOT_HEADER 1 - -/* How many bytes from the start of the file we search for the header. */ -#define MULTIBOOT_SEARCH 32768 -#define MULTIBOOT_HEADER_ALIGN 8 - -/* The magic field should contain this. */ -#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 - -/* This should be in %eax. */ -#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 - -/* Alignment of multiboot modules. */ -#define MULTIBOOT_MOD_ALIGN 0x00001000 - -/* Alignment of the multiboot info structure. */ -#define MULTIBOOT_INFO_ALIGN 0x00000008 - -/* Flags set in the 'flags' member of the multiboot header. */ - -#define MULTIBOOT_TAG_ALIGN 8 -#define MULTIBOOT_TAG_TYPE_END 0 -#define MULTIBOOT_TAG_TYPE_CMDLINE 1 -#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 2 -#define MULTIBOOT_TAG_TYPE_MODULE 3 -#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 4 -#define MULTIBOOT_TAG_TYPE_BOOTDEV 5 -#define MULTIBOOT_TAG_TYPE_MMAP 6 -#define MULTIBOOT_TAG_TYPE_VBE 7 -#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 8 -#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 9 -#define MULTIBOOT_TAG_TYPE_APM 10 -#define MULTIBOOT_TAG_TYPE_EFI32 11 -#define MULTIBOOT_TAG_TYPE_EFI64 12 -#define MULTIBOOT_TAG_TYPE_SMBIOS 13 -#define MULTIBOOT_TAG_TYPE_ACPI_OLD 14 -#define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 -#define MULTIBOOT_TAG_TYPE_NETWORK 16 -#define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 -#define MULTIBOOT_TAG_TYPE_EFI_BS 18 -#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 -#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 -#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21 - -#define MULTIBOOT_HEADER_TAG_END 0 -#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 -#define MULTIBOOT_HEADER_TAG_ADDRESS 2 -#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 3 -#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 -#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 -#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 -#define MULTIBOOT_HEADER_TAG_EFI_BS 7 -#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 -#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10 - -#define MULTIBOOT_ARCHITECTURE_I386 0 -#define MULTIBOOT_ARCHITECTURE_MIPS32 4 -#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 - -#define MULTIBOOT_LOAD_PREFERENCE_NONE 0 -#define MULTIBOOT_LOAD_PREFERENCE_LOW 1 -#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2 - -#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 -#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 - -#ifndef ASM_FILE - -typedef unsigned char multiboot_uint8_t; -typedef unsigned short multiboot_uint16_t; -typedef unsigned int multiboot_uint32_t; -typedef unsigned long long multiboot_uint64_t; - -struct multiboot_header -{ - /* Must be MULTIBOOT_MAGIC - see above. */ - multiboot_uint32_t magic; - - /* ISA */ - multiboot_uint32_t architecture; - - /* Total header length. */ - multiboot_uint32_t header_length; - - /* The above fields plus this one must equal 0 mod 2^32. */ - multiboot_uint32_t checksum; -}; - -struct multiboot_header_tag -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; -}; - -struct multiboot_header_tag_information_request -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t requests[0]; -}; - -struct multiboot_header_tag_address -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t header_addr; - multiboot_uint32_t load_addr; - multiboot_uint32_t load_end_addr; - multiboot_uint32_t bss_end_addr; -}; - -struct multiboot_header_tag_entry_address -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t entry_addr; -}; - -struct multiboot_header_tag_console_flags -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t console_flags; -}; - -struct multiboot_header_tag_framebuffer -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t width; - multiboot_uint32_t height; - multiboot_uint32_t depth; -}; - -struct multiboot_header_tag_module_align -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; -}; - -struct multiboot_header_tag_relocatable -{ - multiboot_uint16_t type; - multiboot_uint16_t flags; - multiboot_uint32_t size; - multiboot_uint32_t min_addr; - multiboot_uint32_t max_addr; - multiboot_uint32_t align; - multiboot_uint32_t preference; -}; - -struct multiboot_color -{ - multiboot_uint8_t red; - multiboot_uint8_t green; - multiboot_uint8_t blue; -}; - -struct multiboot_mmap_entry -{ - multiboot_uint64_t addr; - multiboot_uint64_t len; -#define MULTIBOOT_MEMORY_AVAILABLE 1 -#define MULTIBOOT_MEMORY_RESERVED 2 -#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 -#define MULTIBOOT_MEMORY_NVS 4 -#define MULTIBOOT_MEMORY_BADRAM 5 - multiboot_uint32_t type; - multiboot_uint32_t zero; -}; -typedef struct multiboot_mmap_entry multiboot_memory_map_t; - -struct multiboot_tag -{ - multiboot_uint32_t type; - multiboot_uint32_t size; -}; - -struct multiboot_tag_string -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - char string[0]; -}; - -struct multiboot_tag_module -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t mod_start; - multiboot_uint32_t mod_end; - char cmdline[0]; -}; - -struct multiboot_tag_basic_meminfo -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t mem_lower; - multiboot_uint32_t mem_upper; -}; - -struct multiboot_tag_bootdev -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t biosdev; - multiboot_uint32_t slice; - multiboot_uint32_t part; -}; - -struct multiboot_tag_mmap -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t entry_size; - multiboot_uint32_t entry_version; - struct multiboot_mmap_entry entries[0]; -}; - -struct multiboot_vbe_info_block -{ - multiboot_uint8_t external_specification[512]; -}; - -struct multiboot_vbe_mode_info_block -{ - multiboot_uint8_t external_specification[256]; -}; - -struct multiboot_tag_vbe -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - - multiboot_uint16_t vbe_mode; - multiboot_uint16_t vbe_interface_seg; - multiboot_uint16_t vbe_interface_off; - multiboot_uint16_t vbe_interface_len; - - struct multiboot_vbe_info_block vbe_control_info; - struct multiboot_vbe_mode_info_block vbe_mode_info; -}; - -struct multiboot_tag_framebuffer_common -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - - multiboot_uint64_t framebuffer_addr; - multiboot_uint32_t framebuffer_pitch; - multiboot_uint32_t framebuffer_width; - multiboot_uint32_t framebuffer_height; - multiboot_uint8_t framebuffer_bpp; -#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 -#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 -#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 - multiboot_uint8_t framebuffer_type; - multiboot_uint16_t reserved; -}; - -struct multiboot_tag_framebuffer -{ - struct multiboot_tag_framebuffer_common common; - - union - { - struct - { - multiboot_uint16_t framebuffer_palette_num_colors; - struct multiboot_color framebuffer_palette[0]; - }; - struct - { - multiboot_uint8_t framebuffer_red_field_position; - multiboot_uint8_t framebuffer_red_mask_size; - multiboot_uint8_t framebuffer_green_field_position; - multiboot_uint8_t framebuffer_green_mask_size; - multiboot_uint8_t framebuffer_blue_field_position; - multiboot_uint8_t framebuffer_blue_mask_size; - }; - }; -}; - -struct multiboot_tag_elf_sections -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t num; - multiboot_uint32_t entsize; - multiboot_uint32_t shndx; - char sections[0]; -}; - -struct multiboot_tag_apm -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint16_t version; - multiboot_uint16_t cseg; - multiboot_uint32_t offset; - multiboot_uint16_t cseg_16; - multiboot_uint16_t dseg; - multiboot_uint16_t flags; - multiboot_uint16_t cseg_len; - multiboot_uint16_t cseg_16_len; - multiboot_uint16_t dseg_len; -}; - -struct multiboot_tag_efi32 -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t pointer; -}; - -struct multiboot_tag_efi64 -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint64_t pointer; -}; - -struct multiboot_tag_smbios -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t major; - multiboot_uint8_t minor; - multiboot_uint8_t reserved[6]; - multiboot_uint8_t tables[0]; -}; - -struct multiboot_tag_old_acpi -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t rsdp[0]; -}; - -struct multiboot_tag_new_acpi -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t rsdp[0]; -}; - -struct multiboot_tag_network -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint8_t dhcpack[0]; -}; - -struct multiboot_tag_efi_mmap -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t descr_size; - multiboot_uint32_t descr_vers; - multiboot_uint8_t efi_mmap[0]; -}; - -struct multiboot_tag_efi32_ih -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t pointer; -}; - -struct multiboot_tag_efi64_ih -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint64_t pointer; -}; - -struct multiboot_tag_load_base_addr -{ - multiboot_uint32_t type; - multiboot_uint32_t size; - multiboot_uint32_t load_base_addr; -}; - -#endif /* ! ASM_FILE */ - -#endif /* ! MULTIBOOT_HEADER */ diff --git a/i686/boot.s b/i686/boot.s deleted file mode 100644 index 40b0389..0000000 --- a/i686/boot.s +++ /dev/null @@ -1,120 +0,0 @@ -/* The magic field should contain this. */ -.set MULTIBOOT2_HEADER_MAGIC, 0xe85250d6 -/* This should be in %eax. */ -.set MULTIBOOT2_BOOTLOADER_MAGIC, 0x36d76289 -.set MULTIBOOT_ARCHITECTURE_I386, 0 -.set MULTIBOOT_HEADER_TAG_END, 0 -.set MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST, 1 -.set MULTIBOOT_TAG_TYPE_MMAP, 6 - -.set PAGE_RO, 0x001 -.set PAGE_RW, 0x003 - -/* write section to page table macro - * - * Registers used: - * %ecx: loop counter [ set to $1024 ] - * %edx: temporary - * %esi: current page being mapped - * %edi: page entry [ set to $page_addr ] - */ -.macro mmap_section begin, end, access - mov $\begin, %esi # from $begin -1: cmpl $\end, %esi # until $end - jge 2f - - movl %esi, %edx - orl $\access, %edx - movl %edx, (%edi) - - addl $4096, %esi # move to next page - addl $4, %edi # size of page entry is 4 bytes - loop 1b # loop according to %ecx -2: -.endm - -/* Declare a multiboot header that marks this program as a kernel */ -.section .multiboot.header, "a" -header_begin: -.align 8 - .int MULTIBOOT2_HEADER_MAGIC - .int MULTIBOOT_ARCHITECTURE_I386 - .int header_end - header_begin - .int -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_I386 + (header_end - header_begin)) - -.align 8 -header_info_begin: - .short MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST - .short 0 # flags - .int header_info_end - header_info_begin - .int MULTIBOOT_TAG_TYPE_MMAP -header_info_end: - -.align 8 - .short MULTIBOOT_HEADER_TAG_END - .short 0 - .int 8 -header_end: - -.section .multiboot.pages, "aw", @nobits -.align 4096 -bootstrap_page0: - .skip 1024 * 4 - -.section .multiboot.text, "ax" -.extern k_pagedir -.extern k_stack -.extern k_init - -#.global __vaddr_base -#.set __vaddr_base, 0xc0000000 -#.global __vaddr_offset -.set __vaddr_offset, 0xc0000000 - 0x2000 - -.global _start -.type _start, @function -_start: - cli - - # check multiboot header - cmp $MULTIBOOT2_BOOTLOADER_MAGIC, %eax - jz c - hlt - -c: mov $k_stack - __vaddr_offset, %esp - - push %ebx # pointer to multiboot structure - call __multiboot2 - - # mmap multiboot section into bootstrap page - movl $bootstrap_page0, %edi - movl $1024, %ecx - mmap_section __multiboot_begin, __multiboot_end, PAGE_RW - mmap_section (__text_begin - __vaddr_offset), (__text_end - __vaddr_offset), PAGE_RO - mmap_section (__rodata_begin - __vaddr_offset), (__rodata_end - __vaddr_offset), PAGE_RO - mmap_section (__bss_begin - __vaddr_offset), (__bss_end - __vaddr_offset), PAGE_RW - mmap_section (__data_begin - __vaddr_offset), (__data_end - __vaddr_offset), PAGE_RW - - # mmap all the other section into k_ptable0x300 - movl $(k_ptable0x300 - __vaddr_offset), %edi - movl $1024, %ecx - mmap_section (__text_begin - __vaddr_offset), (__text_end - __vaddr_offset), PAGE_RO - mmap_section (__rodata_begin - __vaddr_offset), (__rodata_end - __vaddr_offset), PAGE_RO - mmap_section (__bss_begin - __vaddr_offset), (__bss_end - __vaddr_offset), PAGE_RW - mmap_section (__data_begin - __vaddr_offset), (__data_end - __vaddr_offset), PAGE_RW - - movl $(bootstrap_page0 + PAGE_RW), k_pagedir - __vaddr_offset + 0 * 4 - movl $(k_ptable0x300 - __vaddr_offset + PAGE_RW), k_pagedir - __vaddr_offset + 768 * 4 - - movl $(k_pagedir - __vaddr_offset), %ecx - movl %ecx, %cr3 - - # enable paging and the write-protect bit - movl %cr0, %ecx - orl $0x80010000, %ecx - movl %ecx, %cr0 - - # jump to higher half with an absolute jump - lea (k_init), %ecx - jmp *%ecx - diff --git a/i686/gdt.c b/i686/gdt.c deleted file mode 100644 index 3148096..0000000 --- a/i686/gdt.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "gdt.h" - -void -SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access) -{ - self->base_15_0 = base & 0xffff; - self->base_23_16 = (uint8_t)(base >> 16); - self->base_31_24 = (uint8_t)(base >> 24); - - self->limit_15_0 = (limit <= 0xffff) ? (limit & 0xffff) : ((limit >> 12) & 0xffff); - self->limit_19_16 = 0xfu & (uint8_t)((limit <= 0xffff) ? 0 : (limit >> 28)); - - self->access = access; - - self->a = 0; - self->rsv = 0; - self->db = (limit > 0xffff) ? 1 : 0; - self->granularity = (limit > 0) ? 1 : 0; -} - diff --git a/i686/include/gdt.h b/i686/include/gdt.h deleted file mode 100644 index 2bdfb22..0000000 --- a/i686/include/gdt.h +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#include -#include - -enum Ring { Ring0 = 0x0, Ring1 = 0x1, Ring2 = 0x2, Ring3 = 0x3 }; - -struct __attribute__((packed)) Access { - unsigned accessed : 1; /* if 0, is set by processor when accessed */ - unsigned readwrite : 1; /* code seg: read toggle; data seg: write toggle */ - unsigned direction : 1; /* code seg: conforming bit; data seg: direction bit */ - unsigned executable : 1; /* executable bit */ - unsigned segment : 1; /* true for code/data; false for gates/tss */ - unsigned privilege : 2; /* descriptor privilege level */ - unsigned present : 1; /* true for every active segment */ -}; -/* _Static_assert(sizeof(struct Access) == 1, "access byte size"); */ - -static const struct Access null_access = {0, 0, 0, 0, 0, Ring0, 0}; -static const struct Access ktext_access = {0, 1, 0, 1, 1, Ring0, 1}; -static const struct Access kdata_access = {0, 1, 0, 0, 1, Ring0, 1}; - -/* Segment Descriptor - * A memory structure (part of a table) that tells the CPU the attributes of a given segment - * |31| | | | | | |24|23|22|21|20|19| | |16|15| | | | | | | 8| 7| | | | | | | 0| - * | base_31_24 | G|DB| | A| lim_19_16 | access | base_23_16 | - * | base_15_0 | limit_15_0 | - * |31| | | | | | | | | | | | | | |16|15| | | | | | | | | | | | | | | 0| - * limit size of segment - 1, either in bytes or in 4KiB chunks (check flags) - * base address of segment - * access - * flags defines the segment chunks and 16/32 bit */ -struct __attribute__((packed)) SegmentDescriptor_t { - uint16_t limit_15_0; /* low bits of segment limit */ - uint16_t base_15_0; /* low bits of segment base address */ - uint8_t base_23_16; /* middle bits of segment base address */ - uint8_t access; /* access byte */ - unsigned limit_19_16 : 4; /* high bits of segment limit */ - /* flags */ - bool a : 1; /* unused, available for software use */ - bool rsv : 1; /* reserved */ - bool db : 1; /* false => 16-bit seg; true => 32-bit seg */ - bool granularity : 1; /* limit scaled by 4k when set */ - uint8_t base_31_24; /* high bits of segment address */ -}; -/* _Static_assert(sizeof(struct SegmentDescriptor_t) == 8, "segment descriptor size"); */ - -void SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access); - -void gdt_install(); - -enum SegmentIndex { - ktextDescriptor = 2 * sizeof(struct SegmentDescriptor_t), - kdataDescriptor = 3 * sizeof(struct SegmentDescriptor_t) -}; diff --git a/i686/include/idt.h b/i686/include/idt.h deleted file mode 100644 index ca39bde..0000000 --- a/i686/include/idt.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include - -struct interrupt_frame { - uint32_t ip; - uint32_t cs; - uint32_t flags; - uint32_t sp; - uint32_t ss; -}; - -/* typedef void (*irq_handler)(); */ - -/* isr.c */ -void abort_handler(struct interrupt_frame *frame); -void syscall_handler(struct interrupt_frame *frame); -void irq0x00(struct interrupt_frame *frame); /* timer interrupt */ -void irq0x01(struct interrupt_frame *frame); /* keyboard interrupt */ -void irq0x0c(struct interrupt_frame *frame); /* mouse interrupt */ - -/* lidt.c */ -void idt_install(); diff --git a/i686/include/paging.h b/i686/include/paging.h deleted file mode 100644 index f5bfa78..0000000 --- a/i686/include/paging.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -/* DirectoryEntry - * |31| | | | | | | | | | | | | | | | | | | |11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| - * | page table 4-kb aligned address | avail | G| S| | A| C| W| U| R| P| */ -struct __attribute__((packed)) DirectoryEntry { - unsigned present : 1; /* 0: if set, the page is actually in physical memory */ - unsigned writeable : 1; /* 1: if set, the page is read/write; otherwise the page is read-only */ - unsigned user : 1; /* 2: if set, then page can be access by all; otherwise only the supervisor can access it */ - unsigned writethrough : 1; /* 3: if set, write-through caching is enabled; otherwise write-back is enabled instead */ - unsigned cachedisable : 1; /* 4: if set, the page will not be cached */ - unsigned accessed : 1; /* 5: set by the CPU when the page is read from or written to */ - unsigned dirty : 1; /* 6: used to determine whether a page has been written to */ - unsigned pagesize : 1; /* 7: page size == 0 */ - unsigned global : 1; - unsigned int __available__ : 3; /* available to the OS */ - unsigned int address : 20; -}; -/* TODO _Static_assert(sizeof(struct DirectoryEntry) == 4, "DirectoryEntry size"); */ - -/* DirectoryEntry4MB - * |31| | | | | | | | |22|21|20| | | | | | |13|12|11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| - * | bits 31-22 of address |RS| bits 39-22 of |AT| avail | G|PS| D| A|CD|WT|US|RW| P| - * | |VD| address */ -struct __attribute__((packed)) DirectoryEntry4MB { - unsigned present : 1; /* 0: if set, the page is actually in physical memory */ - unsigned writeable : 1; /* 1: if set, the page is read/write; otherwise the page is read-only */ - unsigned useraccess : 1; /* 2: if set, then page can be access by all; otherwise only the supervisor can access it */ - unsigned writethrough : 1; /* 3: if set, write-through caching is enabled; otherwise write-back is enabled instead */ - unsigned cachedisable : 1; /* 4: if set, the page will not be cached */ - unsigned accessed : 1; /* 5: set by the CPU when the page is read from or written to */ - unsigned dirty : 1; /* 6: used to determine whether a page has been written to */ - unsigned pagesize : 1; /* 7: page size == 1 */ - unsigned global : 1; /* 8: */ - unsigned __available__ : 3; /* 11..9 available to the OS */ - unsigned pat : 1; /* 12: page attribute table */ - unsigned int address_high : 8; - unsigned rsvd : 1; /* 21 */ - unsigned int address_low : 10; -}; -/* TODO _Static_assert(sizeof(struct DirectoryEntry4MB) == 4, "DirectoryEntry4M size"); */ - -/* TableEntry - * |31| | | | | | | | | | | | | | | | | | | |11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| - * | page table 4-kb aligned address | avail | G| | D| A| C| W|US|RW| P| */ -struct __attribute__((packed)) TableEntry { - unsigned present : 1; /* if set, the page is actually in physical memory */ - unsigned writeable : 1; /* if set, the page is read/write; otherwise the page is read-only */ - unsigned user : 1; /* if set, then page can be access by all; otherwise only the supervisor can access it */ - unsigned writethrough : 1; /* if set, write-through caching is enabled; otherwise write-back is enabled instead */ - unsigned cachedisable : 1; /* if set, the page will not be cached */ - unsigned accessed : 1; /* set by the CPU when the page is read from or written to */ - unsigned dirty : 1; /* used to determine whether a page has been written to */ - unsigned pat : 1; /* page attribute table? */ - unsigned global : 1; - unsigned int __available__ : 3; /* available to the OS */ - unsigned int address : 20; -}; -/* TODO _Static_assert(sizeof(struct TableEntry) == 4, "TableEntry size"); */ diff --git a/i686/include/sys/control.h b/i686/include/sys/control.h deleted file mode 100644 index 89ab067..0000000 --- a/i686/include/sys/control.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -static __inline__ void -abort() -{ - /* Symbol h is already defined? -__asm__(R"(cli -h: hlt -jmp h)"); -*/ - __asm__("cli; hlt"); -} - -static __inline__ void -enable_interrupts() -{ - __asm__("sti"); -} - -static __inline__ void -disable_interrupts() -{ - __asm__("cli"); -} diff --git a/i686/include/sys/cpuid.h b/i686/include/sys/cpuid.h deleted file mode 100644 index 6613967..0000000 --- a/i686/include/sys/cpuid.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include - -struct CPUVersion { - unsigned int stepping : 4; - unsigned int model : 4; - unsigned int family : 4; - unsigned int type : 2; - unsigned int __unused_1 : 2; - unsigned int model_ex : 4; - unsigned int family_ex : 8; - unsigned int __unused_2 : 4; -} __attribute__((packed, aligned(__alignof__(unsigned int)))); -/* FIXME _Static_assert(sizeof(struct CPUVersion) == sizeof(unsigned int), "cpuid version struct size"); */ - -unsigned int -family(const struct CPUVersion v) -{ - if (v.family == 0x0f) return v.family + v.family_ex; - else - return v.family; -} - -unsigned int -model(const struct CPUVersion v) -{ - switch (v.family) { - case 0x06: - case 0x0f: - return ((unsigned int)v.model_ex << 4) | v.model; - default: - return v.model; - } -} diff --git a/i686/include/sys/io.h b/i686/include/sys/io.h deleted file mode 100644 index 4ff5d85..0000000 --- a/i686/include/sys/io.h +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -/* port listings */ -enum UART { - COM1 = 0x3f8, - COM2 = 0x2f8, - COM3 = 0x3e8, - COM4 = 0x2e8, - COM5 = 0x5f8, - COM6 = 0x4f8, - COM7 = 0x5e8, - COM8 = 0x4e8 -}; - -static __inline__ void -outb(unsigned char val, unsigned short port) -{ - __asm__("outb %0,%1" : : "a"(val), "dN"(port)); -} - -static __inline__ void -outw(unsigned short val, unsigned short port) -{ - __asm__("outw %0,%1" : : "a"(val), "dN"(port)); -} - -static __inline__ void -outl(unsigned int val, unsigned short port) -{ - __asm__("outl %0,%1" : : "a"(val), "dN"(port)); -} - -static __inline__ unsigned char -inb(unsigned short port) -{ - unsigned char val; - __asm__("inb %1,%0" : "=a"(val) : "dN"(port)); - return val; -} - -static __inline__ unsigned short -inw(unsigned short port) -{ - unsigned short val; - __asm__("inw %1,%0" : "=a"(val) : "dN"(port)); - return val; -} - -static __inline__ unsigned int -inl(unsigned short port) -{ - unsigned int val; - __asm__("inl %1,%0" : "=a"(val) : "dN"(port)); - return val; -} - -static __inline__ void -outsb(unsigned short port, const void *__buf, unsigned long __n) -{ - __asm__("cld; rep; outsb" : "+S"(__buf), "+c"(__n) : "d"(port)); -} - -static __inline__ void -outsw(unsigned short port, const void *__buf, unsigned long __n) -{ - __asm__("cld; rep; outsw" : "+S"(__buf), "+c"(__n) : "d"(port)); -} - -static __inline__ void -outsl(unsigned short port, const void *__buf, unsigned long __n) -{ - __asm__("cld; rep; outsl" : "+S"(__buf), "+c"(__n) : "d"(port)); -} - -static __inline__ void -insb(unsigned short port, void *__buf, unsigned long __n) -{ - __asm__("cld; rep; insb" : "+D"(__buf), "+c"(__n) : "d"(port)); -} - -static __inline__ void -insw(unsigned short port, void *__buf, unsigned long __n) -{ - __asm__("cld; rep; insw" : "+D"(__buf), "+c"(__n) : "d"(port)); -} - -static __inline__ void -insl(unsigned short port, void *__buf, unsigned long __n) -{ - __asm__("cld; rep; insl" : "+D"(__buf), "+c"(__n) : "d"(port)); -} - diff --git a/i686/include/sys/syscall.h b/i686/include/sys/syscall.h deleted file mode 100644 index 9e62c89..0000000 --- a/i686/include/sys/syscall.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -static inline int -syscall(int number) -{ - asm volatile("int $0x80"); - return 0; -} diff --git a/i686/init.s b/i686/init.s deleted file mode 100644 index ad329bb..0000000 --- a/i686/init.s +++ /dev/null @@ -1,49 +0,0 @@ -.section .stack, "aw", @nobits -.global k_stack -.align 16 /* Stack on x86 must be 16-byte aligned according to System V ABI */ -k_stack_bottom: - .skip 16 * 1024 /* 16 kByte */ -k_stack: - -.section .pages, "aw", @nobits -.align 4096 -.global k_pagedir -k_pagedir: .skip 1024 * 4 -.global k_ptable0x300 -k_ptable0x300: .skip 1024 * 4 - -.section .text -.global k_init -.extern kmain -.extern gdt_install -.extern idt_install -k_init: - # kernel entry point, higher half - - # unmap the identity mapping as its no longer necessary - movl $0, k_pagedir + 0 * 4 - mov %cr3, %ecx # reload cr3 to force a TLB flush - mov %ecx, %cr3 - - # zero out the stack - mov $4096, %ecx # loop counter - mov $k_stack_bottom, %edi # start from the bottom - xor %edx, %edx # clear %edx -1: movl %edx, (%edi) # store %edx into address in %edi - addl $4, %edi # point to next address - loop 1b # loop according to %ecx - - mov $k_stack, %esp # point stack pointer to the stack - - # hardware init - call gdt_install # Global Descriptor Table - call idt_install # Interrupt Descriptor Table - - # jump into kernel - call kmain - - /* If the system has nothing more to do, put it in an infinite loop */ - cli # disable interrupts -h: hlt # wait for interrupt - jmp h # continue waiting for interrupt - diff --git a/i686/isr.c b/i686/isr.c deleted file mode 100644 index acc2961..0000000 --- a/i686/isr.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Interrupt Service Routines - */ - -#include "idt.h" -#include "sys/control.h" -#include - -__attribute__((interrupt)) void -abort_handler(struct interrupt_frame *frame) -{ - printf("### system abort ###\n"); - printf("# ip: %x cs=%x\n", frame->ip, frame->cs); - printf("# sp: %x ss=%x\n", frame->sp, frame->ss); - printf("# flags: %x\n", frame->flags); - abort(); -} - -__attribute__((interrupt)) void -syscall_handler(__attribute__((unused)) struct interrupt_frame *frame) -{ - unsigned int n; - __asm__("mov %%eax, %0" : "=r"(n)); - printf("syscall %x\n, n"); - abort(); -} - -void pic_clear(unsigned char irq); - -__attribute__((interrupt)) void -irq0x00(__attribute__((unused)) struct interrupt_frame *frame) -{ - pic_clear(0x00); -} - -extern void ps2_keyboard_irq_handler(); -__attribute__((interrupt)) void -irq0x01(__attribute__((unused)) struct interrupt_frame *frame) -{ - ps2_keyboard_irq_handler(); - pic_clear(0x01); -} - -extern void mouse_packet(); -__attribute__((interrupt)) void -irq0x0c(__attribute__((unused)) struct interrupt_frame *frame) -{ - mouse_packet(); - pic_clear(0x0c); -} diff --git a/i686/lgdt.c b/i686/lgdt.c deleted file mode 100644 index 473a91d..0000000 --- a/i686/lgdt.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "gdt.h" - -struct __attribute__((packed)) Pointer { - uint16_t limit; - uint32_t base; -}; - -static struct SegmentDescriptor_t segments[8] __attribute__((aligned(32))); - -void -gdt_install() -{ - const struct Pointer ptr = {sizeof(segments) - 1, (unsigned)&segments}; - SegmentDescriptor(&segments[0], 0, 0, 0); /* null segment */ - SegmentDescriptor(&segments[2], 0, 0xffffffff, 0x9a); /* ktext segment */ - SegmentDescriptor(&segments[3], 0, 0xffffffff, 0x92); /* kdata segment */ - - __asm__("lgdt (%0)" : : "a"(&ptr)); - - /* load the kernel data segment */ - __asm__("mov %0, %%ds; mov %0, %%es; mov %0, %%fs; mov %0, %%gs; mov %0, %%ss" : : "ax"(kdataDescriptor)); - - /* load the kernel code segment */ - __asm__("ljmp %0, $1f\n1:" : : "i"(ktextDescriptor)); -} diff --git a/i686/lidt.c b/i686/lidt.c deleted file mode 100644 index 86567f8..0000000 --- a/i686/lidt.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "idt.h" -#include - -struct __attribute__((packed)) Pointer { - uint16_t limit; - uint32_t base; -}; - -enum Type { - Null = 0, - Intr = 0x8e /* 1000 1110 32-bit interrupt */ -}; - -struct __attribute__((packed)) Gate_t { - uint16_t offset_15_0; /* segment offset low */ - uint16_t selector; /* code segment selector */ - uint8_t __unused; /* unused in protected mode */ - uint8_t type; /* interrupt type */ - uint16_t offset_31_16; /* segment offset high */ -}; -/* _Static_assert(sizeof(struct Gate_t) == 8, "interrupt gate size"); */ - -void -Gate(struct Gate_t *entry, void (*f)(struct interrupt_frame *), uint16_t selector) -{ - uint32_t f_addr = (uint32_t)f; - entry->offset_15_0 = f_addr & 0xffff; - entry->offset_31_16 = (uint16_t)(f_addr >> 16) & 0xffff; - entry->selector = selector; - entry->__unused = 0; - entry->type = Intr; -} - -static struct Gate_t interrupt_table[256] __attribute((aligned(4096))); - -void -idt_install() -{ - int i; - const struct Pointer ptr = {sizeof(interrupt_table) - 1, (unsigned)&interrupt_table}; - - /* exceptions 0x00~0x13 */ - for (i = 0; i <= 0x13; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); - - /* irq 0x20~0x2f */ - for (i = 0x22; i <= 0x2f; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); - Gate(&interrupt_table[0x20], &irq0x00, 0x10); - Gate(&interrupt_table[0x21], &irq0x01, 0x10); - Gate(&interrupt_table[0x2c], &irq0x0c, 0x10); - - /* syscall 0x80 */ - Gate(&interrupt_table[0x80], &syscall_handler, 0x10); - - __asm__("lidt (%0)" : : "a"(&ptr)); -} diff --git a/i686/linker.ld b/i686/linker.ld deleted file mode 100644 index 61a3be9..0000000 --- a/i686/linker.ld +++ /dev/null @@ -1,54 +0,0 @@ -ENTRY(_start) -OUTPUT_FORMAT(elf32-i386) - -MULTIBOOT_SIZE = 0x2000; -VADDR_BASE = 0xc0000000; - -SECTIONS -{ - /* First put the multiboot header, as it is required to be put very early in the image or the bootloader won't * - * recognize the file format. * - * Once the MMU is set up, this section is no longer needed and should be unmapped. */ - . = 0; - .bootstrap : { - . = ALIGN(8); - __multiboot_begin = .; - KEEP(*(.multiboot.header)) - KEEP(*(.multiboot.text)) - KEEP(*(.multiboot.pages)) - __multiboot_end = .; - } - - . = VADDR_BASE; - - .text ALIGN(4K) : AT(ADDR(.text) - VADDR_BASE + MULTIBOOT_SIZE) { - __text_begin = .; - *(.text*) - __text_end = .; - } - - /* Read-only data. */ - .rodata ALIGN(4K) : AT(ADDR(.rodata) - VADDR_BASE + MULTIBOOT_SIZE) { - __rodata_begin = .; - *(.constinit) - *(.rodata*) - __rodata_end = .; - } - - /* Read-write data (uninitialized) and stack */ - .bss ALIGN(4K) : AT(ADDR(.bss) - VADDR_BASE + MULTIBOOT_SIZE) { - __bss_begin = .; - *(.stack) - *(.pages) - *(.bss*) - __bss_end = .; - } - - /* Read-write data (initialized) */ - .data ALIGN(4K) : AT(ADDR(.data) - VADDR_BASE + MULTIBOOT_SIZE) { - __data_begin = .; - *(.init) - *(.data) - __data_end = .; - } -} diff --git a/i686/meson.build b/i686/meson.build deleted file mode 100644 index 21ff729..0000000 --- a/i686/meson.build +++ /dev/null @@ -1,24 +0,0 @@ - -i686_srcs = files( - 'boot.s', 'init.s', - 'gdt.c', 'lgdt.c', - 'lidt.c', 'isr.c', -) -i686_incl = include_directories('include') - -i686 = declare_dependency( - link_with: static_library('i686', i686_srcs, - include_directories: i686_incl, - dependencies: libk - ), - include_directories: i686_incl, -) - -# tests -test('GDT', - executable('test_gdt', 'test_gdt.cc', - include_directories: i686_incl, - dependencies: [ gtest ], - native: true), - suite: 'i686' -) diff --git a/i686/test_gdt.cc b/i686/test_gdt.cc deleted file mode 100644 index e437168..0000000 --- a/i686/test_gdt.cc +++ /dev/null @@ -1,24 +0,0 @@ -#include - -#include "gdt.c" -#include "gdt.h" - -TEST(i686GDT, KnownAccessByteValues) -{ - EXPECT_EQ(*(uint8_t *)&null_access, 0x00); - EXPECT_EQ(*(uint8_t *)&ktext_access, 0x9a); - EXPECT_EQ(*(uint8_t *)&kdata_access, 0x92); -} - -TEST(i686GDT, NullSegmentDescriptor) -{ - struct SegmentDescriptor_t d; - SegmentDescriptor(&d, 0, 0, 0); - EXPECT_EQ(*(uint64_t *)&d, 0); -} - -TEST(i686GDT, SegmentIndex) -{ - EXPECT_EQ(ktextDescriptor, 0x10); - EXPECT_EQ(kdataDescriptor, 0x18); -} diff --git a/kernel/BUILD.bazel b/kernel/BUILD.bazel new file mode 100644 index 0000000..e7ed087 --- /dev/null +++ b/kernel/BUILD.bazel @@ -0,0 +1,37 @@ +load("//tools:configure_file.bzl", "configure_file") + +configure_file( + name = "conf", + template = "conf.h.in", +) + +cc_binary( + name = "glitch.elf", + srcs = [ + "boot.h", + "kernel.c", + "mem.h", + "mem/vmm.c", + "mmap.c", + "mmap.h", + "multiboot2.c", + "task.h", + ":conf.h", + ], + includes = ["."], + linkopts = [ + "-T", + "$(location //arch/i386:linker.ld)", + ], + target_compatible_with = [ + "@platforms//os:none", + ], + visibility = ["//visibility:public"], + deps = [ + "//arch/i386:arch", + "//arch/i386:linker.ld", + "//devices:drivers", + "//grub:multiboot2", + "//lib/libk:k", + ], +) diff --git a/kernel/boot.h b/kernel/boot.h new file mode 100644 index 0000000..646fb4c --- /dev/null +++ b/kernel/boot.h @@ -0,0 +1,21 @@ +/* *** glitch kernel *** + * spdx-license-identifier: ISC + * description: kernel boot information + * */ + +#pragma once + +typedef struct { + /* kernel command line */ + char cmdline[64]; + + /* memory map */ + unsigned bitmap[1024 * 32]; + + /* module */ + unsigned module_start; + unsigned module_end; + char module_cmdline[64]; +} boot_info_t; + +/* TODO _Static_assert((1024 * 32 * sizeof(unsigned) * 8) == (1024 * 1024), "bitmap size check"); */ diff --git a/kernel/conf.h.in b/kernel/conf.h.in new file mode 100644 index 0000000..61352d7 --- /dev/null +++ b/kernel/conf.h.in @@ -0,0 +1,4 @@ +#pragma once + +#define VERSION {VERSION} +#define CC {CC} diff --git a/kernel/kernel.c b/kernel/kernel.c new file mode 100644 index 0000000..98269c1 --- /dev/null +++ b/kernel/kernel.c @@ -0,0 +1,57 @@ +/* *** glitch kernel *** + * spdx-license-identifier: ISC + * description: kernel entry point + * */ + +#include "conf.h" +#include "mem.h" +#include +#include +#include +#include +#include +#include +#include +#include + +FILE *stdin; +FILE *stdout; +FILE *stderr; + +void +kmain(void) +{ + stderr = uart_init(COM1); + vmm_map(0xb8000, 0xc03ff000); + stdout = vga_init((void *)0xc03ff000); + + printf("glitch [version " VERSION "] [" CC "]\n"); + fprintf(stderr, "glitch [version " VERSION "] [" CC "]\n"); + { + struct CPUVersion v; + + char vendor[13] = {'\0'}; + unsigned int eax; + __get_cpuid(0, &eax, (unsigned int *)vendor, (unsigned int *)(vendor + 8), (unsigned int *)(vendor + 4)); + __get_cpuid(1, (unsigned int *)&v, &eax, &eax, &eax); + printf("cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); + fprintf(stderr, "cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); + } + + pic_init(); + + ps2_ctrl_init(); + ps2_keyboard_init(); + mouse_init(); + + pic_enable(); + fprintf(stderr, "interrupts enabled\n"); + + /* + alloc4M(); + char *c = (char *)0xc0700000; + if (*c == 0) printf("c is 0\r\n"); + */ + + while (1) {} +} diff --git a/kernel/mem.h b/kernel/mem.h new file mode 100644 index 0000000..e06dd21 --- /dev/null +++ b/kernel/mem.h @@ -0,0 +1,4 @@ +#pragma once + +unsigned int vmm_map(unsigned int paddr, unsigned int vaddr); +void alloc4M(); diff --git a/kernel/mem/vmm.c b/kernel/mem/vmm.c new file mode 100644 index 0000000..a07dd72 --- /dev/null +++ b/kernel/mem/vmm.c @@ -0,0 +1,47 @@ +#include "../mem.h" +#include + +extern struct DirectoryEntry k_pagedir[1024]; +extern struct TableEntry k_ptable0x300[1024]; + +extern const unsigned MULTIBOOT_SIZE; +extern const unsigned VADDR_BASE; + +unsigned +to_vaddr(unsigned paddr) +{ + return paddr + (unsigned)&VADDR_BASE - (unsigned)&MULTIBOOT_SIZE; +} + +unsigned int +vmm_map(unsigned int paddr, unsigned int vaddr) +{ + struct TableEntry *table; + const unsigned table_idx = vaddr >> 22; /* high 10 bits */ + const unsigned entry_idx = (vaddr >> 12) & 0x3ff; /* low 10 bits */ + + if (paddr & 0xfff || vaddr & 0xfff) return 0; + + if (k_pagedir[table_idx].present == 0) return 0; + table = (struct TableEntry *)to_vaddr(k_pagedir[table_idx].address << 12); + table[entry_idx].address = (paddr >> 12) & 0xfffff; + table[entry_idx].present = 1; + table[entry_idx].writeable = 1; + + return vaddr; +} + +void +alloc4M() +{ + struct DirectoryEntry4MB *directory; + + /* enable pse in cr4 */ + __asm__("movl %cr4, %eax; orl $0x10, %eax; movl %eax, %cr4"); + + directory = (struct DirectoryEntry4MB *)&k_pagedir[0x301]; + directory->address_low = 0x1; + directory->present = 1; + directory->writeable = 1; + directory->pagesize = 1; +} diff --git a/kernel/mmap.c b/kernel/mmap.c new file mode 100644 index 0000000..e5d4be6 --- /dev/null +++ b/kernel/mmap.c @@ -0,0 +1,51 @@ +#include "mmap.h" +#include + +#ifdef DEBUG +#include +#endif + +__attribute__((section(".multiboot.text"))) unsigned +multiboot2_mmap(const struct multiboot_mmap_entry entries[], unsigned entry_count, unsigned bitmap[1024 * 32]) +{ + unsigned i, l; + multiboot_uint64_t avail_frames = 0; + multiboot_uint64_t n_frames; + multiboot_uint64_t table_idx; + + /* clear out the bitmap */ + for (i = 0; i < 1024 * 32; ++i) bitmap[i] = 0; + + /* loop through all the mmap_entry structures where type is MULTIBOOT_MEMORY_AVAILABLE */ + for (i = 0; i < entry_count; ++i) { + if (entries[i].type != MULTIBOOT_MEMORY_AVAILABLE) continue; + + /* number of frames in this entry */ + n_frames = entries[i].len / 4096; + avail_frames += n_frames; + +#ifdef DEBUG + printf("mmap_entry: 0x%16llx\tlen=%12llu\t%d frames (%d blocks + %d)\n", entries[i].addr, entries[i].len, n_frames, + n_frames / 32, n_frames % 32); +#endif + + /* the bitmap is an array of blocks, each holding 32 (2^5) values */ + table_idx = (entries[i].addr >> 17); /* get the upper 15 bits */ + + while (n_frames != 0) { + if (n_frames >= 32) { + bitmap[table_idx] = 0xffffffff; + table_idx++; + n_frames -= 32; + } + else { + unsigned block = bitmap[table_idx]; + for (l = 0; l < n_frames; ++l) block |= (1 << l); + bitmap[table_idx] = block; + n_frames = 0; + } + } + } + + return avail_frames; +} diff --git a/kernel/mmap.h b/kernel/mmap.h new file mode 100644 index 0000000..13f40f2 --- /dev/null +++ b/kernel/mmap.h @@ -0,0 +1,7 @@ +#pragma once + +#include "boot.h" +#include + +__attribute__((section(".multiboot.text"))) unsigned multiboot2_mmap(const struct multiboot_mmap_entry entries[], + unsigned entry_count, unsigned bitmap[1024 * 32]); diff --git a/kernel/multiboot2.c b/kernel/multiboot2.c new file mode 100644 index 0000000..bd6250f --- /dev/null +++ b/kernel/multiboot2.c @@ -0,0 +1,50 @@ +#include "mmap.h" + +#define ADDR(x) ((unsigned)&x - 0xc0000000 + 0x2000) + +boot_info_t info __attribute__((section(".init"))); + +__attribute__((section(".multiboot.text"))) void +multiboot_strncpy(char *dest, const char *src, unsigned n) +{ + unsigned i; + for (i = 0; i < n && src[i] != '\0'; ++i) dest[i] = src[i]; +} + +__attribute__((section(".multiboot.text"))) void +multiboot2_module(struct multiboot_tag_module *tag, boot_info_t *tag_info) +{ + tag_info->module_start = tag->mod_start; + tag_info->module_end = tag->mod_end; + multiboot_strncpy(tag_info->module_cmdline, tag->cmdline, 64); +} + +/** + * parse multiboot2 structures + */ +__attribute__((section(".multiboot.text"))) void +__multiboot2(multiboot_uint32_t addr) +{ + boot_info_t *__info = (boot_info_t *)ADDR(info); + + struct multiboot_tag *tag; + for (tag = (struct multiboot_tag *)(addr + 8); tag->type != MULTIBOOT_TAG_TYPE_END; + tag = (struct multiboot_tag *)((multiboot_uint8_t *)tag + ((tag->size + 7u) & ~7u))) { + + switch (tag->type) { + case MULTIBOOT_TAG_TYPE_CMDLINE: + multiboot_strncpy(__info->cmdline, ((struct multiboot_tag_string *)tag)->string, 64); + break; + case MULTIBOOT_TAG_TYPE_MODULE: + multiboot2_module((struct multiboot_tag_module *)tag, __info); + break; + case MULTIBOOT_TAG_TYPE_MMAP: + multiboot2_mmap(((struct multiboot_tag_mmap *)tag)->entries, + ((struct multiboot_tag_mmap *)tag)->size / ((struct multiboot_tag_mmap *)tag)->entry_size, + __info->bitmap); + break; + default: + break; + } + } +} diff --git a/kernel/sched.hpp b/kernel/sched.hpp new file mode 100644 index 0000000..cfa3ff0 --- /dev/null +++ b/kernel/sched.hpp @@ -0,0 +1,8 @@ +#pragma once + +#include "task.h" + +class RoundRobinQueue : public Queue { +public: + [[nodiscard]] Task *next(int slice); +}; diff --git a/kernel/sched/roundrobin.cpp b/kernel/sched/roundrobin.cpp new file mode 100644 index 0000000..c3d6cb6 --- /dev/null +++ b/kernel/sched/roundrobin.cpp @@ -0,0 +1,21 @@ +#include "../sched.hpp" + +/// Each task is run for a time quantum or the remainder of its cpu burst +Task * +RoundRobinQueue::next(int slice) +{ + if (head == nullptr) return nullptr; + if (head->node->burst <= 0) { + delete head->node; + remove(head->node); + return next(slice); + } + + auto *it = head; + it->node->burst -= slice; + if (head->next) head = head->next; + it->next = nullptr; + tail->next = it; + tail = it; + return it->node; +} diff --git a/kernel/sched/test_roundrobin.cc b/kernel/sched/test_roundrobin.cc new file mode 100644 index 0000000..89f60bf --- /dev/null +++ b/kernel/sched/test_roundrobin.cc @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include + +#include "../sched/roundrobin.cpp" + +void +run(Task *task, int slice) +{ + std::cout << "Running task " << task->name << " id=" << std::setw(2) << task->id << " prio=" << std::setw(2) + << task->priority << " burst=" << std::setw(2) << task->burst << " slice=" << slice << " "; +} + +struct DebugRoundRobinQueue : public RoundRobinQueue { +public: + void + print() const + { + for (auto *it = head; it != nullptr; it = it->next) { + std::cout << it->node->name << '(' << std::setw(2) << it->node->burst << ") "; + } + std::cout << std::endl; + } +}; + +TEST(roundrobin, RoundRobinQueue) +{ + DebugRoundRobinQueue queue; + queue.insert(new Task{"P1", 1, 1, 50}); + queue.insert(new Task{"P2", 2, 1, 40}); + queue.insert(new Task{"P3", 3, 1, 50}); + queue.insert(new Task{"P4", 4, 1, 40}); + + const auto begin = std::chrono::system_clock::now(); + for (auto *t = queue.next(10); t != nullptr; t = queue.next(10)) { + run(t, 10); + queue.print(); + } + const auto end = std::chrono::system_clock::now(); + const auto duration = std::chrono::duration_cast(end - begin).count(); + + std::cout << "Completed in (us): " << duration << std::endl; + // test should complete in 250us unless running on valgrind + if (!RUNNING_ON_VALGRIND) { EXPECT_LE(duration, 250); } + + EXPECT_EQ(queue.head, nullptr); + EXPECT_EQ(queue.tail, nullptr); +} diff --git a/kernel/sched/test_taskqueue.cc b/kernel/sched/test_taskqueue.cc new file mode 100644 index 0000000..217c44d --- /dev/null +++ b/kernel/sched/test_taskqueue.cc @@ -0,0 +1,122 @@ +#include + +#include "../sched.hpp" + +struct DebugQueue : public Queue { +public: + void + expect_ordered() const + { + int id = 1; + for (auto *it = head; it != nullptr; it = it->next) { + // std::cout << it->node->name << std::endl; + EXPECT_EQ(it->node->id, id++); + } + } +}; + +TEST(taskqueue, insert) +{ + DebugQueue queue; + auto *p1 = new Task{"P1", 1, 1, 10}; + queue.insert(p1); + queue.insert(new Task{"P2", 2, 1, 10}); + queue.insert(new Task{"P3", 3, 1, 10}); + auto *p4 = new Task{"P4", 4, 1, 10}; + queue.insert(p4); + queue.expect_ordered(); + + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p4); +} + +TEST(taskqueue, removeHead) +{ + DebugQueue queue; + auto *p0 = new Task{"P0", 0, 1, 10}; + queue.insert(p0); + auto *p1 = new Task{"P1", 1, 1, 10}; + queue.insert(p1); + queue.insert(new Task{"P2", 2, 1, 10}); + queue.insert(new Task{"P3", 3, 1, 10}); + auto *p4 = new Task{"P4", 4, 1, 10}; + queue.insert(p4); + queue.remove(p0); + delete p0; + + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p4); + queue.expect_ordered(); +} + +TEST(taskqueue, removeTail) +{ + DebugQueue queue; + auto *p1 = new Task{"P1", 1, 1, 10}; + queue.insert(p1); + queue.insert(new Task{"P2", 2, 1, 10}); + queue.insert(new Task{"P3", 3, 1, 10}); + auto *p4 = new Task{"P4", 4, 1, 10}; + queue.insert(p4); + auto *p5 = new Task{"P5", 5, 1, 10}; + queue.insert(p5); + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p5); + + queue.remove(p5); + delete p5; + + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p4); + queue.expect_ordered(); +} + +TEST(taskqueue, removeLast) +{ + DebugQueue queue; + + auto *p0 = new Task{"P0", 0, 1, 10}; + queue.insert(p0); + EXPECT_EQ(queue.head->node, p0); + EXPECT_EQ(queue.tail->node, p0); + + queue.remove(p0); + delete p0; + + EXPECT_EQ(queue.head, nullptr); + EXPECT_EQ(queue.tail, nullptr); +} + +TEST(taskqueue, removeNullptr) +{ + DebugQueue queue; + queue.insert(new Task{"P1", 1, 1, 10}); + queue.insert(new Task{"P2", 2, 1, 10}); + queue.insert(new Task{"P3", 3, 1, 10}); + queue.insert(new Task{"P4", 4, 1, 10}); + queue.remove(nullptr); + queue.expect_ordered(); +} + +TEST(taskqueue, remove) +{ + DebugQueue queue; + auto *p1 = new Task{"P1", 1, 1, 10}; + queue.insert(p1); + queue.insert(new Task{"P2", 2, 1, 10}); + auto *p0 = new Task{"P0", 0, 1, 10}; + queue.insert(p0); + queue.insert(new Task{"P3", 3, 1, 10}); + auto *p4 = new Task{"P4", 4, 1, 10}; + queue.insert(p4); + + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p4); + + queue.remove(p0); + delete p0; + + EXPECT_EQ(queue.head->node, p1); + EXPECT_EQ(queue.tail->node, p4); + queue.expect_ordered(); +} diff --git a/kernel/task.h b/kernel/task.h new file mode 100644 index 0000000..0d59bb1 --- /dev/null +++ b/kernel/task.h @@ -0,0 +1,78 @@ +#pragma once + +/** + * Representation of a task in the system + */ +struct Task { + const char *name; + int id; + int priority; + int burst; +}; + +#ifdef __cplusplus +template struct Queue { + struct Item { + Item(T *p_node) : node(p_node) {} + T *node; + Item *next = nullptr; + + [[nodiscard]] bool + operator==(const T *other) const + { + return node == other; + } + }; + + ~Queue() noexcept + { + for (auto *it = head; it != nullptr;) { + auto *current = it; + it = it->next; + delete current->node; + delete current; + } + } + + /// Insert item at the end of the queue + void + insert(T *item) + { + if (head == nullptr) { + head = new Item(item); + tail = head; + } + else { + tail->next = new Item(item); + tail = tail->next; + } + } + + void + remove(T *item) + { + if (head == nullptr) return; + if (item == head->node) { + auto *it = head; + head = head->next; + if (*tail == item) tail = nullptr; + delete it; + return; + } + + Item *prev = nullptr; + for (auto *it = head; it != nullptr; it = it->next) { + if (it->node == item) { + if (prev) { prev->next = it->next; } + if (tail == it) { tail = prev; } + delete it; + return; + } + prev = it; + } + } + + Item *head = nullptr; + Item *tail = nullptr; +}; +#endif diff --git a/lib/blake2/BUILD.bazel b/lib/blake2/BUILD.bazel new file mode 100644 index 0000000..4723ae6 --- /dev/null +++ b/lib/blake2/BUILD.bazel @@ -0,0 +1,28 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "blake2s", + srcs = ["blake2s.c"], + hdrs = ["include/blake2s.h"], + includes = ["include"], + deps = select({ + "@platforms//os:none": ["//lib/libk:k"], + "//conditions:default": [], + }), +) + +cc_test( + name = "test_blake2s", + srcs = [ + "blake2s_kat.h", + "blake2s_selftest.cc", + ], + target_compatible_with = select({ + "@platforms//os:none": ["@platforms//:incompatible"], + "//conditions:default": [], + }), + deps = [ + "//lib/blake2:blake2s", + "@googletest//:gtest_main", + ], +) diff --git a/lib/blake2/blake2s_kat.h b/lib/blake2/blake2s_kat.h new file mode 100644 index 0000000..dec250a --- /dev/null +++ b/lib/blake2/blake2s_kat.h @@ -0,0 +1,1034 @@ +#pragma once + +#include + +static const unsigned KATs_len = 256; +static const uint8_t KAT_secret[32] = { 0xba, 0x80, 0xfb, 0x8f, 0x1b, 0x7b, 0xa1, 0x49, 0x3c, 0x6a, 0xe8, 0x8f, 0xd, 0x66, 0xa1, 0xae, 0xff, 0xa2, 0x5c, 0x8a, 0x7d, 0x4c, 0x1f, 0xb6, 0x81, 0x1, 0xb5, 0xe4, 0xc2, 0x8e, 0x37, 0x3 }; +static const uint8_t KATs[256][32] = { + // 0 + { 0x69, 0x21, 0x7a, 0x30, 0x79, 0x90, 0x80, 0x94, 0xe1, 0x11, 0x21, 0xd0, 0x42, 0x35, 0x4a, 0x7c, 0x1f, 0x55, 0xb6, 0x48, 0x2c, 0xa1, 0xa5, 0x1e, 0x1b, 0x25, 0x0d, 0xfd, 0x1e, 0xd0, 0xee, 0xf9 }, + // 1 + { 0xe3, 0x4d, 0x74, 0xdb, 0xaf, 0x4f, 0xf4, 0xc6, 0xab, 0xd8, 0x71, 0xcc, 0x22, 0x04, 0x51, 0xd2, 0xea, 0x26, 0x48, 0x84, 0x6c, 0x77, 0x57, 0xfb, 0xaa, 0xc8, 0x2f, 0xe5, 0x1a, 0xd6, 0x4b, 0xea }, + // 2 + { 0xdd, 0xad, 0x9a, 0xb1, 0x5d, 0xac, 0x45, 0x49, 0xba, 0x42, 0xf4, 0x9d, 0x26, 0x24, 0x96, 0xbe, 0xf6, 0xc0, 0xba, 0xe1, 0xdd, 0x34, 0x2a, 0x88, 0x08, 0xf8, 0xea, 0x26, 0x7c, 0x6e, 0x21, 0x0c }, + // 3 + { 0xe8, 0xf9, 0x1c, 0x6e, 0xf2, 0x32, 0xa0, 0x41, 0x45, 0x2a, 0xb0, 0xe1, 0x49, 0x07, 0x0c, 0xdd, 0x7d, 0xd1, 0x76, 0x9e, 0x75, 0xb3, 0xa5, 0x92, 0x1b, 0xe3, 0x78, 0x76, 0xc4, 0x5c, 0x99, 0x00 }, + // 4 + { 0x0c, 0xc7, 0x0e, 0x00, 0x34, 0x8b, 0x86, 0xba, 0x29, 0x44, 0xd0, 0xc3, 0x20, 0x38, 0xb2, 0x5c, 0x55, 0x58, 0x4f, 0x90, 0xdf, 0x23, 0x04, 0xf5, 0x5f, 0xa3, 0x32, 0xaf, 0x5f, 0xb0, 0x1e, 0x20 }, + // 5 + { 0xec, 0x19, 0x64, 0x19, 0x10, 0x87, 0xa4, 0xfe, 0x9d, 0xf1, 0xc7, 0x95, 0x34, 0x2a, 0x02, 0xff, 0xc1, 0x91, 0xa5, 0xb2, 0x51, 0x76, 0x48, 0x56, 0xae, 0x5b, 0x8b, 0x57, 0x69, 0xf0, 0xc6, 0xcd }, + // 6 + { 0xe1, 0xfa, 0x51, 0x61, 0x8d, 0x7d, 0xf4, 0xeb, 0x70, 0xcf, 0x0d, 0x5a, 0x9e, 0x90, 0x6f, 0x80, 0x6e, 0x9d, 0x19, 0xf7, 0xf4, 0xf0, 0x1e, 0x3b, 0x62, 0x12, 0x88, 0xe4, 0x12, 0x04, 0x05, 0xd6 }, + // 7 + { 0x59, 0x80, 0x01, 0xfa, 0xfb, 0xe8, 0xf9, 0x4e, 0xc6, 0x6d, 0xc8, 0x27, 0xd0, 0x12, 0xcf, 0xcb, 0xba, 0x22, 0x28, 0x56, 0x9f, 0x44, 0x8e, 0x89, 0xea, 0x22, 0x08, 0xc8, 0xbf, 0x76, 0x92, 0x93 }, + // 8 + { 0xc7, 0xe8, 0x87, 0xb5, 0x46, 0x62, 0x36, 0x35, 0xe9, 0x3e, 0x04, 0x95, 0x59, 0x8f, 0x17, 0x26, 0x82, 0x19, 0x96, 0xc2, 0x37, 0x77, 0x05, 0xb9, 0x3a, 0x1f, 0x63, 0x6f, 0x87, 0x2b, 0xfa, 0x2d }, + // 9 + { 0xc3, 0x15, 0xa4, 0x37, 0xdd, 0x28, 0x06, 0x2a, 0x77, 0x0d, 0x48, 0x19, 0x67, 0x13, 0x6b, 0x1b, 0x5e, 0xb8, 0x8b, 0x21, 0xee, 0x53, 0xd0, 0x32, 0x9c, 0x58, 0x97, 0x12, 0x6e, 0x9d, 0xb0, 0x2c }, + // 10 + { 0xbb, 0x47, 0x3d, 0xed, 0xdc, 0x05, 0x5f, 0xea, 0x62, 0x28, 0xf2, 0x07, 0xda, 0x57, 0x53, 0x47, 0xbb, 0x00, 0x40, 0x4c, 0xd3, 0x49, 0xd3, 0x8c, 0x18, 0x02, 0x63, 0x07, 0xa2, 0x24, 0xcb, 0xff }, + // 11 + { 0x68, 0x7e, 0x18, 0x73, 0xa8, 0x27, 0x75, 0x91, 0xbb, 0x33, 0xd9, 0xad, 0xf9, 0xa1, 0x39, 0x12, 0xef, 0xef, 0xe5, 0x57, 0xca, 0xfc, 0x39, 0xa7, 0x95, 0x26, 0x23, 0xe4, 0x72, 0x55, 0xf1, 0x6d }, + // 12 + { 0x1a, 0xc7, 0xba, 0x75, 0x4d, 0x6e, 0x2f, 0x94, 0xe0, 0xe8, 0x6c, 0x46, 0xbf, 0xb2, 0x62, 0xab, 0xbb, 0x74, 0xf4, 0x50, 0xef, 0x45, 0x6d, 0x6b, 0x4d, 0x97, 0xaa, 0x80, 0xce, 0x6d, 0xa7, 0x67 }, + // 13 + { 0x01, 0x2c, 0x97, 0x80, 0x96, 0x14, 0x81, 0x6b, 0x5d, 0x94, 0x94, 0x47, 0x7d, 0x4b, 0x68, 0x7d, 0x15, 0xb9, 0x6e, 0xb6, 0x9c, 0x0e, 0x80, 0x74, 0xa8, 0x51, 0x6f, 0x31, 0x22, 0x4b, 0x5c, 0x98 }, + // 14 + { 0x91, 0xff, 0xd2, 0x6c, 0xfa, 0x4d, 0xa5, 0x13, 0x4c, 0x7e, 0xa2, 0x62, 0xf7, 0x88, 0x9c, 0x32, 0x9f, 0x61, 0xf6, 0xa6, 0x57, 0x22, 0x5c, 0xc2, 0x12, 0xf4, 0x00, 0x56, 0xd9, 0x86, 0xb3, 0xf4 }, + // 15 + { 0xd9, 0x7c, 0x82, 0x8d, 0x81, 0x82, 0xa7, 0x21, 0x80, 0xa0, 0x6a, 0x78, 0x26, 0x83, 0x30, 0x67, 0x3f, 0x7c, 0x4e, 0x06, 0x35, 0x94, 0x7c, 0x04, 0xc0, 0x23, 0x23, 0xfd, 0x45, 0xc0, 0xa5, 0x2d }, + // 16 + { 0xef, 0xc0, 0x4c, 0xdc, 0x39, 0x1c, 0x7e, 0x91, 0x19, 0xbd, 0x38, 0x66, 0x8a, 0x53, 0x4e, 0x65, 0xfe, 0x31, 0x03, 0x6d, 0x6a, 0x62, 0x11, 0x2e, 0x44, 0xeb, 0xeb, 0x11, 0xf9, 0xc5, 0x70, 0x80 }, + // 17 + { 0x99, 0x2c, 0xf5, 0xc0, 0x53, 0x44, 0x2a, 0x5f, 0xbc, 0x4f, 0xaf, 0x58, 0x3e, 0x04, 0xe5, 0x0b, 0xb7, 0x0d, 0x2f, 0x39, 0xfb, 0xb6, 0xa5, 0x03, 0xf8, 0x9e, 0x56, 0xa6, 0x3e, 0x18, 0x57, 0x8a }, + // 18 + { 0x38, 0x64, 0x0e, 0x9f, 0x21, 0x98, 0x3e, 0x67, 0xb5, 0x39, 0xca, 0xcc, 0xae, 0x5e, 0xcf, 0x61, 0x5a, 0xe2, 0x76, 0x4f, 0x75, 0xa0, 0x9c, 0x9c, 0x59, 0xb7, 0x64, 0x83, 0xc1, 0xfb, 0xc7, 0x35 }, + // 19 + { 0x21, 0x3d, 0xd3, 0x4c, 0x7e, 0xfe, 0x4f, 0xb2, 0x7a, 0x6b, 0x35, 0xf6, 0xb4, 0x00, 0x0d, 0x1f, 0xe0, 0x32, 0x81, 0xaf, 0x3c, 0x72, 0x3e, 0x5c, 0x9f, 0x94, 0x74, 0x7a, 0x5f, 0x31, 0xcd, 0x3b }, + // 20 + { 0xec, 0x24, 0x6e, 0xee, 0xb9, 0xce, 0xd3, 0xf7, 0xad, 0x33, 0xed, 0x28, 0x66, 0x0d, 0xd9, 0xbb, 0x07, 0x32, 0x51, 0x3d, 0xb4, 0xe2, 0xfa, 0x27, 0x8b, 0x60, 0xcd, 0xe3, 0x68, 0x2a, 0x4c, 0xcd }, + // 21 + { 0xac, 0x9b, 0x61, 0xd4, 0x46, 0x64, 0x8c, 0x30, 0x05, 0xd7, 0x89, 0x2b, 0xf3, 0xa8, 0x71, 0x9f, 0x4c, 0x81, 0x81, 0xcf, 0xdc, 0xbc, 0x2b, 0x79, 0xfe, 0xf1, 0x0a, 0x27, 0x9b, 0x91, 0x10, 0x95 }, + // 22 + { 0x7b, 0xf8, 0xb2, 0x29, 0x59, 0xe3, 0x4e, 0x3a, 0x43, 0xf7, 0x07, 0x92, 0x23, 0xe8, 0x3a, 0x97, 0x54, 0x61, 0x7d, 0x39, 0x1e, 0x21, 0x3d, 0xfd, 0x80, 0x8e, 0x41, 0xb9, 0xbe, 0xad, 0x4c, 0xe7 }, + // 23 + { 0x68, 0xd4, 0xb5, 0xd4, 0xfa, 0x0e, 0x30, 0x2b, 0x64, 0xcc, 0xc5, 0xaf, 0x79, 0x29, 0x13, 0xac, 0x4c, 0x88, 0xec, 0x95, 0xc0, 0x7d, 0xdf, 0x40, 0x69, 0x42, 0x56, 0xeb, 0x88, 0xce, 0x9f, 0x3d }, + // 24 + { 0xb2, 0xc2, 0x42, 0x0f, 0x05, 0xf9, 0xab, 0xe3, 0x63, 0x15, 0x91, 0x93, 0x36, 0xb3, 0x7e, 0x4e, 0x0f, 0xa3, 0x3f, 0xf7, 0xe7, 0x6a, 0x49, 0x27, 0x67, 0x00, 0x6f, 0xdb, 0x5d, 0x93, 0x54, 0x62 }, + // 25 + { 0x13, 0x4f, 0x61, 0xbb, 0xd0, 0xbb, 0xb6, 0x9a, 0xed, 0x53, 0x43, 0x90, 0x45, 0x51, 0xa3, 0xe6, 0xc1, 0xaa, 0x7d, 0xcd, 0xd7, 0x7e, 0x90, 0x3e, 0x70, 0x23, 0xeb, 0x7c, 0x60, 0x32, 0x0a, 0xa7 }, + // 26 + { 0x46, 0x93, 0xf9, 0xbf, 0xf7, 0xd4, 0xf3, 0x98, 0x6a, 0x7d, 0x17, 0x6e, 0x6e, 0x06, 0xf7, 0x2a, 0xd1, 0x49, 0x0d, 0x80, 0x5c, 0x99, 0xe2, 0x53, 0x47, 0xb8, 0xde, 0x77, 0xb4, 0xdb, 0x6d, 0x9b }, + // 27 + { 0x85, 0x3e, 0x26, 0xf7, 0x41, 0x95, 0x3b, 0x0f, 0xd5, 0xbd, 0xb4, 0x24, 0xe8, 0xab, 0x9e, 0x8b, 0x37, 0x50, 0xea, 0xa8, 0xef, 0x61, 0xe4, 0x79, 0x02, 0xc9, 0x1e, 0x55, 0x4e, 0x9c, 0x73, 0xb9 }, + // 28 + { 0xf7, 0xde, 0x53, 0x63, 0x61, 0xab, 0xaa, 0x0e, 0x15, 0x81, 0x56, 0xcf, 0x0e, 0xa4, 0xf6, 0x3a, 0x99, 0xb5, 0xe4, 0x05, 0x4f, 0x8f, 0xa4, 0xc9, 0xd4, 0x5f, 0x62, 0x85, 0xca, 0xd5, 0x56, 0x94 }, + // 29 + { 0x4c, 0x23, 0x06, 0x08, 0x86, 0x0a, 0x99, 0xae, 0x8d, 0x7b, 0xd5, 0xc2, 0xcc, 0x17, 0xfa, 0x52, 0x09, 0x6b, 0x9a, 0x61, 0xbe, 0xdb, 0x17, 0xcb, 0x76, 0x17, 0x86, 0x4a, 0xd2, 0x9c, 0xa7, 0xa6 }, + // 30 + { 0xae, 0xb9, 0x20, 0xea, 0x87, 0x95, 0x2d, 0xad, 0xb1, 0xfb, 0x75, 0x92, 0x91, 0xe3, 0x38, 0x81, 0x39, 0xa8, 0x72, 0x86, 0x50, 0x01, 0x88, 0x6e, 0xd8, 0x47, 0x52, 0xe9, 0x3c, 0x25, 0x0c, 0x2a }, + // 31 + { 0xab, 0xa4, 0xad, 0x9b, 0x48, 0x0b, 0x9d, 0xf3, 0xd0, 0x8c, 0xa5, 0xe8, 0x7b, 0x0c, 0x24, 0x40, 0xd4, 0xe4, 0xea, 0x21, 0x22, 0x4c, 0x2e, 0xb4, 0x2c, 0xba, 0xe4, 0x69, 0xd0, 0x89, 0xb9, 0x31 }, + // 32 + { 0x05, 0x82, 0x56, 0x07, 0xd7, 0xfd, 0xf2, 0xd8, 0x2e, 0xf4, 0xc3, 0xc8, 0xc2, 0xae, 0xa9, 0x61, 0xad, 0x98, 0xd6, 0x0e, 0xdf, 0xf7, 0xd0, 0x18, 0x98, 0x3e, 0x21, 0x20, 0x4c, 0x0d, 0x93, 0xd1 }, + // 33 + { 0xa7, 0x42, 0xf8, 0xb6, 0xaf, 0x82, 0xd8, 0xa6, 0xca, 0x23, 0x57, 0xc5, 0xf1, 0xcf, 0x91, 0xde, 0xfb, 0xd0, 0x66, 0x26, 0x7d, 0x75, 0xc0, 0x48, 0xb3, 0x52, 0x36, 0x65, 0x85, 0x02, 0x59, 0x62 }, + // 34 + { 0x2b, 0xca, 0xc8, 0x95, 0x99, 0x00, 0x0b, 0x42, 0xc9, 0x5a, 0xe2, 0x38, 0x35, 0xa7, 0x13, 0x70, 0x4e, 0xd7, 0x97, 0x89, 0xc8, 0x4f, 0xef, 0x14, 0x9a, 0x87, 0x4f, 0xf7, 0x33, 0xf0, 0x17, 0xa2 }, + // 35 + { 0xac, 0x1e, 0xd0, 0x7d, 0x04, 0x8f, 0x10, 0x5a, 0x9e, 0x5b, 0x7a, 0xb8, 0x5b, 0x09, 0xa4, 0x92, 0xd5, 0xba, 0xff, 0x14, 0xb8, 0xbf, 0xb0, 0xe9, 0xfd, 0x78, 0x94, 0x86, 0xee, 0xa2, 0xb9, 0x74 }, + // 36 + { 0xe4, 0x8d, 0x0e, 0xcf, 0xaf, 0x49, 0x7d, 0x5b, 0x27, 0xc2, 0x5d, 0x99, 0xe1, 0x56, 0xcb, 0x05, 0x79, 0xd4, 0x40, 0xd6, 0xe3, 0x1f, 0xb6, 0x24, 0x73, 0x69, 0x6d, 0xbf, 0x95, 0xe0, 0x10, 0xe4 }, + // 37 + { 0x12, 0xa9, 0x1f, 0xad, 0xf8, 0xb2, 0x16, 0x44, 0xfd, 0x0f, 0x93, 0x4f, 0x3c, 0x4a, 0x8f, 0x62, 0xba, 0x86, 0x2f, 0xfd, 0x20, 0xe8, 0xe9, 0x61, 0x15, 0x4c, 0x15, 0xc1, 0x38, 0x84, 0xed, 0x3d }, + // 38 + { 0x7c, 0xbe, 0xe9, 0x6e, 0x13, 0x98, 0x97, 0xdc, 0x98, 0xfb, 0xef, 0x3b, 0xe8, 0x1a, 0xd4, 0xd9, 0x64, 0xd2, 0x35, 0xcb, 0x12, 0x14, 0x1f, 0xb6, 0x67, 0x27, 0xe6, 0xe5, 0xdf, 0x73, 0xa8, 0x78 }, + // 39 + { 0xeb, 0xf6, 0x6a, 0xbb, 0x59, 0x7a, 0xe5, 0x72, 0xa7, 0x29, 0x7c, 0xb0, 0x87, 0x1e, 0x35, 0x5a, 0xcc, 0xaf, 0xad, 0x83, 0x77, 0xb8, 0xe7, 0x8b, 0xf1, 0x64, 0xce, 0x2a, 0x18, 0xde, 0x4b, 0xaf }, + // 40 + { 0x71, 0xb9, 0x33, 0xb0, 0x7e, 0x4f, 0xf7, 0x81, 0x8c, 0xe0, 0x59, 0xd0, 0x08, 0x82, 0x9e, 0x45, 0x3c, 0x6f, 0xf0, 0x2e, 0xc0, 0xa7, 0xdb, 0x39, 0x3f, 0xc2, 0xd8, 0x70, 0xf3, 0x7a, 0x72, 0x86 }, + // 41 + { 0x7c, 0xf7, 0xc5, 0x13, 0x31, 0x22, 0x0b, 0x8d, 0x3e, 0xba, 0xed, 0x9c, 0x29, 0x39, 0x8a, 0x16, 0xd9, 0x81, 0x56, 0xe2, 0x61, 0x3c, 0xb0, 0x88, 0xf2, 0xb0, 0xe0, 0x8a, 0x1b, 0xe4, 0xcf, 0x4f }, + // 42 + { 0x3e, 0x41, 0xa1, 0x08, 0xe0, 0xf6, 0x4a, 0xd2, 0x76, 0xb9, 0x79, 0xe1, 0xce, 0x06, 0x82, 0x79, 0xe1, 0x6f, 0x7b, 0xc7, 0xe4, 0xaa, 0x1d, 0x21, 0x1e, 0x17, 0xb8, 0x11, 0x61, 0xdf, 0x16, 0x02 }, + // 43 + { 0x88, 0x65, 0x02, 0xa8, 0x2a, 0xb4, 0x7b, 0xa8, 0xd8, 0x67, 0x10, 0xaa, 0x9d, 0xe3, 0xd4, 0x6e, 0xa6, 0x5c, 0x47, 0xaf, 0x6e, 0xe8, 0xde, 0x45, 0x0c, 0xce, 0xb8, 0xb1, 0x1b, 0x04, 0x5f, 0x50 }, + // 44 + { 0xc0, 0x21, 0xbc, 0x5f, 0x09, 0x54, 0xfe, 0xe9, 0x4f, 0x46, 0xea, 0x09, 0x48, 0x7e, 0x10, 0xa8, 0x48, 0x40, 0xd0, 0x2f, 0x64, 0x81, 0x0b, 0xc0, 0x8d, 0x9e, 0x55, 0x1f, 0x7d, 0x41, 0x68, 0x14 }, + // 45 + { 0x20, 0x30, 0x51, 0x6e, 0x8a, 0x5f, 0xe1, 0x9a, 0xe7, 0x9c, 0x33, 0x6f, 0xce, 0x26, 0x38, 0x2a, 0x74, 0x9d, 0x3f, 0xd0, 0xec, 0x91, 0xe5, 0x37, 0xd4, 0xbd, 0x23, 0x58, 0xc1, 0x2d, 0xfb, 0x22 }, + // 46 + { 0x55, 0x66, 0x98, 0xda, 0xc8, 0x31, 0x7f, 0xd3, 0x6d, 0xfb, 0xdf, 0x25, 0xa7, 0x9c, 0xb1, 0x12, 0xd5, 0x42, 0x58, 0x60, 0x60, 0x5c, 0xba, 0xf5, 0x07, 0xf2, 0x3b, 0xf7, 0xe9, 0xf4, 0x2a, 0xfe }, + // 47 + { 0x2f, 0x86, 0x7b, 0xa6, 0x77, 0x73, 0xfd, 0xc3, 0xe9, 0x2f, 0xce, 0xd9, 0x9a, 0x64, 0x09, 0xad, 0x39, 0xd0, 0xb8, 0x80, 0xfd, 0xe8, 0xf1, 0x09, 0xa8, 0x17, 0x30, 0xc4, 0x45, 0x1d, 0x01, 0x78 }, + // 48 + { 0x17, 0x2e, 0xc2, 0x18, 0xf1, 0x19, 0xdf, 0xae, 0x98, 0x89, 0x6d, 0xff, 0x29, 0xdd, 0x98, 0x76, 0xc9, 0x4a, 0xf8, 0x74, 0x17, 0xf9, 0xae, 0x4c, 0x70, 0x14, 0xbb, 0x4e, 0x4b, 0x96, 0xaf, 0xc7 }, + // 49 + { 0x3f, 0x85, 0x81, 0x4a, 0x18, 0x19, 0x5f, 0x87, 0x9a, 0xa9, 0x62, 0xf9, 0x5d, 0x26, 0xbd, 0x82, 0xa2, 0x78, 0xf2, 0xb8, 0x23, 0x20, 0x21, 0x8f, 0x6b, 0x3b, 0xd6, 0xf7, 0xf6, 0x67, 0xa6, 0xd9 }, + // 50 + { 0x1b, 0x61, 0x8f, 0xba, 0xa5, 0x66, 0xb3, 0xd4, 0x98, 0xc1, 0x2e, 0x98, 0x2c, 0x9e, 0xc5, 0x2e, 0x4d, 0xa8, 0x5a, 0x8c, 0x54, 0xf3, 0x8f, 0x34, 0xc0, 0x90, 0x39, 0x4f, 0x23, 0xc1, 0x84, 0xc1 }, + // 51 + { 0x0c, 0x75, 0x8f, 0xb5, 0x69, 0x2f, 0xfd, 0x41, 0xa3, 0x57, 0x5d, 0x0a, 0xf0, 0x0c, 0xc7, 0xfb, 0xf2, 0xcb, 0xe5, 0x90, 0x5a, 0x58, 0x32, 0x3a, 0x88, 0xae, 0x42, 0x44, 0xf6, 0xe4, 0xc9, 0x93 }, + // 52 + { 0xa9, 0x31, 0x36, 0x0c, 0xad, 0x62, 0x8c, 0x7f, 0x12, 0xa6, 0xc1, 0xc4, 0xb7, 0x53, 0xb0, 0xf4, 0x06, 0x2a, 0xef, 0x3c, 0xe6, 0x5a, 0x1a, 0xe3, 0xf1, 0x93, 0x69, 0xda, 0xdf, 0x3a, 0xe2, 0x3d }, + // 53 + { 0xcb, 0xac, 0x7d, 0x77, 0x3b, 0x1e, 0x3b, 0x3c, 0x66, 0x91, 0xd7, 0xab, 0xb7, 0xe9, 0xdf, 0x04, 0x5c, 0x8b, 0xa1, 0x92, 0x68, 0xde, 0xd1, 0x53, 0x20, 0x7f, 0x5e, 0x80, 0x43, 0x52, 0xec, 0x5d }, + // 54 + { 0x23, 0xa1, 0x96, 0xd3, 0x80, 0x2e, 0xd3, 0xc1, 0xb3, 0x84, 0x01, 0x9a, 0x82, 0x32, 0x58, 0x40, 0xd3, 0x2f, 0x71, 0x95, 0x0c, 0x45, 0x80, 0xb0, 0x34, 0x45, 0xe0, 0x89, 0x8e, 0x14, 0x05, 0x3c }, + // 55 + { 0xf4, 0x49, 0x54, 0x70, 0xf2, 0x26, 0xc8, 0xc2, 0x14, 0xbe, 0x08, 0xfd, 0xfa, 0xd4, 0xbc, 0x4a, 0x2a, 0x9d, 0xbe, 0xa9, 0x13, 0x6a, 0x21, 0x0d, 0xf0, 0xd4, 0xb6, 0x49, 0x29, 0xe6, 0xfc, 0x14 }, + // 56 + { 0xe2, 0x90, 0xdd, 0x27, 0x0b, 0x46, 0x7f, 0x34, 0xab, 0x1c, 0x00, 0x2d, 0x34, 0x0f, 0xa0, 0x16, 0x25, 0x7f, 0xf1, 0x9e, 0x58, 0x33, 0xfd, 0xbb, 0xf2, 0xcb, 0x40, 0x1c, 0x3b, 0x28, 0x17, 0xde }, + // 57 + { 0x9f, 0xc7, 0xb5, 0xde, 0xd3, 0xc1, 0x50, 0x42, 0xb2, 0xa6, 0x58, 0x2d, 0xc3, 0x9b, 0xe0, 0x16, 0xd2, 0x4a, 0x68, 0x2d, 0x5e, 0x61, 0xad, 0x1e, 0xff, 0x9c, 0x63, 0x30, 0x98, 0x48, 0xf7, 0x06 }, + // 58 + { 0x8c, 0xca, 0x67, 0xa3, 0x6d, 0x17, 0xd5, 0xe6, 0x34, 0x1c, 0xb5, 0x92, 0xfd, 0x7b, 0xef, 0x99, 0x26, 0xc9, 0xe3, 0xaa, 0x10, 0x27, 0xea, 0x11, 0xa7, 0xd8, 0xbd, 0x26, 0x0b, 0x57, 0x6e, 0x04 }, + // 59 + { 0x40, 0x93, 0x92, 0xf5, 0x60, 0xf8, 0x68, 0x31, 0xda, 0x43, 0x73, 0xee, 0x5e, 0x00, 0x74, 0x26, 0x05, 0x95, 0xd7, 0xbc, 0x24, 0x18, 0x3b, 0x60, 0xed, 0x70, 0x0d, 0x45, 0x83, 0xd3, 0xf6, 0xf0 }, + // 60 + { 0x28, 0x02, 0x16, 0x5d, 0xe0, 0x90, 0x91, 0x55, 0x46, 0xf3, 0x39, 0x8c, 0xd8, 0x49, 0x16, 0x4a, 0x19, 0xf9, 0x2a, 0xdb, 0xc3, 0x61, 0xad, 0xc9, 0x9b, 0x0f, 0x20, 0xc8, 0xea, 0x07, 0x10, 0x54 }, + // 61 + { 0xad, 0x83, 0x91, 0x68, 0xd9, 0xf8, 0xa4, 0xbe, 0x95, 0xba, 0x9e, 0xf9, 0xa6, 0x92, 0xf0, 0x72, 0x56, 0xae, 0x43, 0xfe, 0x6f, 0x98, 0x64, 0xe2, 0x90, 0x69, 0x1b, 0x02, 0x56, 0xce, 0x50, 0xa9 }, + // 62 + { 0x75, 0xfd, 0xaa, 0x50, 0x38, 0xc2, 0x84, 0xb8, 0x6d, 0x6e, 0x8a, 0xff, 0xe8, 0xb2, 0x80, 0x7e, 0x46, 0x7b, 0x86, 0x60, 0x0e, 0x79, 0xaf, 0x36, 0x89, 0xfb, 0xc0, 0x63, 0x28, 0xcb, 0xf8, 0x94 }, + // 63 + { 0xe5, 0x7c, 0xb7, 0x94, 0x87, 0xdd, 0x57, 0x90, 0x24, 0x32, 0xb2, 0x50, 0x73, 0x38, 0x13, 0xbd, 0x96, 0xa8, 0x4e, 0xfc, 0xe5, 0x9f, 0x65, 0x0f, 0xac, 0x26, 0xe6, 0x69, 0x6a, 0xef, 0xaf, 0xc3 }, + // 64 + { 0x56, 0xf3, 0x4e, 0x8b, 0x96, 0x55, 0x7e, 0x90, 0xc1, 0xf2, 0x4b, 0x52, 0xd0, 0xc8, 0x9d, 0x51, 0x08, 0x6a, 0xcf, 0x1b, 0x00, 0xf6, 0x34, 0xcf, 0x1d, 0xde, 0x92, 0x33, 0xb8, 0xea, 0xaa, 0x3e }, + // 65 + { 0x1b, 0x53, 0xee, 0x94, 0xaa, 0xf3, 0x4e, 0x4b, 0x15, 0x9d, 0x48, 0xde, 0x35, 0x2c, 0x7f, 0x06, 0x61, 0xd0, 0xa4, 0x0e, 0xdf, 0xf9, 0x5a, 0x0b, 0x16, 0x39, 0xb4, 0x09, 0x0e, 0x97, 0x44, 0x72 }, + // 66 + { 0x05, 0x70, 0x5e, 0x2a, 0x81, 0x75, 0x7c, 0x14, 0xbd, 0x38, 0x3e, 0xa9, 0x8d, 0xda, 0x54, 0x4e, 0xb1, 0x0e, 0x6b, 0xc0, 0x7b, 0xae, 0x43, 0x5e, 0x25, 0x18, 0xdb, 0xe1, 0x33, 0x52, 0x53, 0x75 }, + // 67 + { 0xd8, 0xb2, 0x86, 0x6e, 0x8a, 0x30, 0x9d, 0xb5, 0x3e, 0x52, 0x9e, 0xc3, 0x29, 0x11, 0xd8, 0x2f, 0x5c, 0xa1, 0x6c, 0xff, 0x76, 0x21, 0x68, 0x91, 0xa9, 0x67, 0x6a, 0xa3, 0x1a, 0xaa, 0x6c, 0x42 }, + // 68 + { 0xf5, 0x04, 0x1c, 0x24, 0x12, 0x70, 0xeb, 0x04, 0xc7, 0x1e, 0xc2, 0xc9, 0x5d, 0x4c, 0x38, 0xd8, 0x03, 0xb1, 0x23, 0x7b, 0x0f, 0x29, 0xfd, 0x4d, 0xb3, 0xeb, 0x39, 0x76, 0x69, 0xe8, 0x86, 0x99 }, + // 69 + { 0x9a, 0x4c, 0xe0, 0x77, 0xc3, 0x49, 0x32, 0x2f, 0x59, 0x5e, 0x0e, 0xe7, 0x9e, 0xd0, 0xda, 0x5f, 0xab, 0x66, 0x75, 0x2c, 0xbf, 0xef, 0x8f, 0x87, 0xd0, 0xe9, 0xd0, 0x72, 0x3c, 0x75, 0x30, 0xdd }, + // 70 + { 0x65, 0x7b, 0x09, 0xf3, 0xd0, 0xf5, 0x2b, 0x5b, 0x8f, 0x2f, 0x97, 0x16, 0x3a, 0x0e, 0xdf, 0x0c, 0x04, 0xf0, 0x75, 0x40, 0x8a, 0x07, 0xbb, 0xeb, 0x3a, 0x41, 0x01, 0xa8, 0x91, 0x99, 0x0d, 0x62 }, + // 71 + { 0x1e, 0x3f, 0x7b, 0xd5, 0xa5, 0x8f, 0xa5, 0x33, 0x34, 0x4a, 0xa8, 0xed, 0x3a, 0xc1, 0x22, 0xbb, 0x9e, 0x70, 0xd4, 0xef, 0x50, 0xd0, 0x04, 0x53, 0x08, 0x21, 0x94, 0x8f, 0x5f, 0xe6, 0x31, 0x5a }, + // 72 + { 0x80, 0xdc, 0xcf, 0x3f, 0xd8, 0x3d, 0xfd, 0x0d, 0x35, 0xaa, 0x28, 0x58, 0x59, 0x22, 0xab, 0x89, 0xd5, 0x31, 0x39, 0x97, 0x67, 0x3e, 0xaf, 0x90, 0x5c, 0xea, 0x9c, 0x0b, 0x22, 0x5c, 0x7b, 0x5f }, + // 73 + { 0x8a, 0x0d, 0x0f, 0xbf, 0x63, 0x77, 0xd8, 0x3b, 0xb0, 0x8b, 0x51, 0x4b, 0x4b, 0x1c, 0x43, 0xac, 0xc9, 0x5d, 0x75, 0x17, 0x14, 0xf8, 0x92, 0x56, 0x45, 0xcb, 0x6b, 0xc8, 0x56, 0xca, 0x15, 0x0a }, + // 74 + { 0x9f, 0xa5, 0xb4, 0x87, 0x73, 0x8a, 0xd2, 0x84, 0x4c, 0xc6, 0x34, 0x8a, 0x90, 0x19, 0x18, 0xf6, 0x59, 0xa3, 0xb8, 0x9e, 0x9c, 0x0d, 0xfe, 0xea, 0xd3, 0x0d, 0xd9, 0x4b, 0xcf, 0x42, 0xef, 0x8e }, + // 75 + { 0x80, 0x83, 0x2c, 0x4a, 0x16, 0x77, 0xf5, 0xea, 0x25, 0x60, 0xf6, 0x68, 0xe9, 0x35, 0x4d, 0xd3, 0x69, 0x97, 0xf0, 0x37, 0x28, 0xcf, 0xa5, 0x5e, 0x1b, 0x38, 0x33, 0x7c, 0x0c, 0x9e, 0xf8, 0x18 }, + // 76 + { 0xab, 0x37, 0xdd, 0xb6, 0x83, 0x13, 0x7e, 0x74, 0x08, 0x0d, 0x02, 0x6b, 0x59, 0x0b, 0x96, 0xae, 0x9b, 0xb4, 0x47, 0x72, 0x2f, 0x30, 0x5a, 0x5a, 0xc5, 0x70, 0xec, 0x1d, 0xf9, 0xb1, 0x74, 0x3c }, + // 77 + { 0x3e, 0xe7, 0x35, 0xa6, 0x94, 0xc2, 0x55, 0x9b, 0x69, 0x3a, 0xa6, 0x86, 0x29, 0x36, 0x1e, 0x15, 0xd1, 0x22, 0x65, 0xad, 0x6a, 0x3d, 0xed, 0xf4, 0x88, 0xb0, 0xb0, 0x0f, 0xac, 0x97, 0x54, 0xba }, + // 78 + { 0xd6, 0xfc, 0xd2, 0x32, 0x19, 0xb6, 0x47, 0xe4, 0xcb, 0xd5, 0xeb, 0x2d, 0x0a, 0xd0, 0x1e, 0xc8, 0x83, 0x8a, 0x4b, 0x29, 0x01, 0xfc, 0x32, 0x5c, 0xc3, 0x70, 0x19, 0x81, 0xca, 0x6c, 0x88, 0x8b }, + // 79 + { 0x05, 0x20, 0xec, 0x2f, 0x5b, 0xf7, 0xa7, 0x55, 0xda, 0xcb, 0x50, 0xc6, 0xbf, 0x23, 0x3e, 0x35, 0x15, 0x43, 0x47, 0x63, 0xdb, 0x01, 0x39, 0xcc, 0xd9, 0xfa, 0xef, 0xbb, 0x82, 0x07, 0x61, 0x2d }, + // 80 + { 0xaf, 0xf3, 0xb7, 0x5f, 0x3f, 0x58, 0x12, 0x64, 0xd7, 0x66, 0x16, 0x62, 0xb9, 0x2f, 0x5a, 0xd3, 0x7c, 0x1d, 0x32, 0xbd, 0x45, 0xff, 0x81, 0xa4, 0xed, 0x8a, 0xdc, 0x9e, 0xf3, 0x0d, 0xd9, 0x89 }, + // 81 + { 0xd0, 0xdd, 0x65, 0x0b, 0xef, 0xd3, 0xba, 0x63, 0xdc, 0x25, 0x10, 0x2c, 0x62, 0x7c, 0x92, 0x1b, 0x9c, 0xbe, 0xb0, 0xb1, 0x30, 0x68, 0x69, 0x35, 0xb5, 0xc9, 0x27, 0xcb, 0x7c, 0xcd, 0x5e, 0x3b }, + // 82 + { 0xe1, 0x14, 0x98, 0x16, 0xb1, 0x0a, 0x85, 0x14, 0xfb, 0x3e, 0x2c, 0xab, 0x2c, 0x08, 0xbe, 0xe9, 0xf7, 0x3c, 0xe7, 0x62, 0x21, 0x70, 0x12, 0x46, 0xa5, 0x89, 0xbb, 0xb6, 0x73, 0x02, 0xd8, 0xa9 }, + // 83 + { 0x7d, 0xa3, 0xf4, 0x41, 0xde, 0x90, 0x54, 0x31, 0x7e, 0x72, 0xb5, 0xdb, 0xf9, 0x79, 0xda, 0x01, 0xe6, 0xbc, 0xee, 0xbb, 0x84, 0x78, 0xea, 0xe6, 0xa2, 0x28, 0x49, 0xd9, 0x02, 0x92, 0x63, 0x5c }, + // 84 + { 0x12, 0x30, 0xb1, 0xfc, 0x8a, 0x7d, 0x92, 0x15, 0xed, 0xc2, 0xd4, 0xa2, 0xde, 0xcb, 0xdd, 0x0a, 0x6e, 0x21, 0x6c, 0x92, 0x42, 0x78, 0xc9, 0x1f, 0xc5, 0xd1, 0x0e, 0x7d, 0x60, 0x19, 0x2d, 0x94 }, + // 85 + { 0x57, 0x50, 0xd7, 0x16, 0xb4, 0x80, 0x8f, 0x75, 0x1f, 0xeb, 0xc3, 0x88, 0x06, 0xba, 0x17, 0x0b, 0xf6, 0xd5, 0x19, 0x9a, 0x78, 0x16, 0xbe, 0x51, 0x4e, 0x3f, 0x93, 0x2f, 0xbe, 0x0c, 0xb8, 0x71 }, + // 86 + { 0x6f, 0xc5, 0x9b, 0x2f, 0x10, 0xfe, 0xba, 0x95, 0x4a, 0xa6, 0x82, 0x0b, 0x3c, 0xa9, 0x87, 0xee, 0x81, 0xd5, 0xcc, 0x1d, 0xa3, 0xc6, 0x3c, 0xe8, 0x27, 0x30, 0x1c, 0x56, 0x9d, 0xfb, 0x39, 0xce }, + // 87 + { 0xc7, 0xc3, 0xfe, 0x1e, 0xeb, 0xdc, 0x7b, 0x5a, 0x93, 0x93, 0x26, 0xe8, 0xdd, 0xb8, 0x3e, 0x8b, 0xf2, 0xb7, 0x80, 0xb6, 0x56, 0x78, 0xcb, 0x62, 0xf2, 0x08, 0xb0, 0x40, 0xab, 0xdd, 0x35, 0xe2 }, + // 88 + { 0x0c, 0x75, 0xc1, 0xa1, 0x5c, 0xf3, 0x4a, 0x31, 0x4e, 0xe4, 0x78, 0xf4, 0xa5, 0xce, 0x0b, 0x8a, 0x6b, 0x36, 0x52, 0x8e, 0xf7, 0xa8, 0x20, 0x69, 0x6c, 0x3e, 0x42, 0x46, 0xc5, 0xa1, 0x58, 0x64 }, + // 89 + { 0x21, 0x6d, 0xc1, 0x2a, 0x10, 0x85, 0x69, 0xa3, 0xc7, 0xcd, 0xde, 0x4a, 0xed, 0x43, 0xa6, 0xc3, 0x30, 0x13, 0x9d, 0xda, 0x3c, 0xcc, 0x4a, 0x10, 0x89, 0x05, 0xdb, 0x38, 0x61, 0x89, 0x90, 0x50 }, + // 90 + { 0xa5, 0x7b, 0xe6, 0xae, 0x67, 0x56, 0xf2, 0x8b, 0x02, 0xf5, 0x9d, 0xad, 0xf7, 0xe0, 0xd7, 0xd8, 0x80, 0x7f, 0x10, 0xfa, 0x15, 0xce, 0xd1, 0xad, 0x35, 0x85, 0x52, 0x1a, 0x1d, 0x99, 0x5a, 0x89 }, + // 91 + { 0x81, 0x6a, 0xef, 0x87, 0x59, 0x53, 0x71, 0x6c, 0xd7, 0xa5, 0x81, 0xf7, 0x32, 0xf5, 0x3d, 0xd4, 0x35, 0xda, 0xb6, 0x6d, 0x09, 0xc3, 0x61, 0xd2, 0xd6, 0x59, 0x2d, 0xe1, 0x77, 0x55, 0xd8, 0xa8 }, + // 92 + { 0x9a, 0x76, 0x89, 0x32, 0x26, 0x69, 0x3b, 0x6e, 0xa9, 0x7e, 0x6a, 0x73, 0x8f, 0x9d, 0x10, 0xfb, 0x3d, 0x0b, 0x43, 0xae, 0x0e, 0x8b, 0x7d, 0x81, 0x23, 0xea, 0x76, 0xce, 0x97, 0x98, 0x9c, 0x7e }, + // 93 + { 0x8d, 0xae, 0xdb, 0x9a, 0x27, 0x15, 0x29, 0xdb, 0xb7, 0xdc, 0x3b, 0x60, 0x7f, 0xe5, 0xeb, 0x2d, 0x32, 0x11, 0x77, 0x07, 0x58, 0xdd, 0x3b, 0x0a, 0x35, 0x93, 0xd2, 0xd7, 0x95, 0x4e, 0x2d, 0x5b }, + // 94 + { 0x16, 0xdb, 0xc0, 0xaa, 0x5d, 0xd2, 0xc7, 0x74, 0xf5, 0x05, 0x10, 0x0f, 0x73, 0x37, 0x86, 0xd8, 0xa1, 0x75, 0xfc, 0xbb, 0xb5, 0x9c, 0x43, 0xe1, 0xfb, 0xff, 0x3e, 0x1e, 0xaf, 0x31, 0xcb, 0x4a }, + // 95 + { 0x86, 0x06, 0xcb, 0x89, 0x9c, 0x6a, 0xea, 0xf5, 0x1b, 0x9d, 0xb0, 0xfe, 0x49, 0x24, 0xa9, 0xfd, 0x5d, 0xab, 0xc1, 0x9f, 0x88, 0x26, 0xf2, 0xbc, 0x1c, 0x1d, 0x7d, 0xa1, 0x4d, 0x2c, 0x2c, 0x99 }, + // 96 + { 0x84, 0x79, 0x73, 0x1a, 0xed, 0xa5, 0x7b, 0xd3, 0x7e, 0xad, 0xb5, 0x1a, 0x50, 0x7e, 0x30, 0x7f, 0x3b, 0xd9, 0x5e, 0x69, 0xdb, 0xca, 0x94, 0xf3, 0xbc, 0x21, 0x72, 0x60, 0x66, 0xad, 0x6d, 0xfd }, + // 97 + { 0x58, 0x47, 0x3a, 0x9e, 0xa8, 0x2e, 0xfa, 0x3f, 0x3b, 0x3d, 0x8f, 0xc8, 0x3e, 0xd8, 0x86, 0x31, 0x27, 0xb3, 0x3a, 0xe8, 0xde, 0xae, 0x63, 0x07, 0x20, 0x1e, 0xdb, 0x6d, 0xde, 0x61, 0xde, 0x29 }, + // 98 + { 0x9a, 0x92, 0x55, 0xd5, 0x3a, 0xf1, 0x16, 0xde, 0x8b, 0xa2, 0x7c, 0xe3, 0x5b, 0x4c, 0x7e, 0x15, 0x64, 0x06, 0x57, 0xa0, 0xfc, 0xb8, 0x88, 0xc7, 0x0d, 0x95, 0x43, 0x1d, 0xac, 0xd8, 0xf8, 0x30 }, + // 99 + { 0x9e, 0xb0, 0x5f, 0xfb, 0xa3, 0x9f, 0xd8, 0x59, 0x6a, 0x45, 0x49, 0x3e, 0x18, 0xd2, 0x51, 0x0b, 0xf3, 0xef, 0x06, 0x5c, 0x51, 0xd6, 0xe1, 0x3a, 0xbe, 0x66, 0xaa, 0x57, 0xe0, 0x5c, 0xfd, 0xb7 }, + // 100 + { 0x81, 0xdc, 0xc3, 0xa5, 0x05, 0xea, 0xce, 0x3f, 0x87, 0x9d, 0x8f, 0x70, 0x27, 0x76, 0x77, 0x0f, 0x9d, 0xf5, 0x0e, 0x52, 0x1d, 0x14, 0x28, 0xa8, 0x5d, 0xaf, 0x04, 0xf9, 0xad, 0x21, 0x50, 0xe0 }, + // 101 + { 0xe3, 0xe3, 0xc4, 0xaa, 0x3a, 0xcb, 0xbc, 0x85, 0x33, 0x2a, 0xf9, 0xd5, 0x64, 0xbc, 0x24, 0x16, 0x5e, 0x16, 0x87, 0xf6, 0xb1, 0xad, 0xcb, 0xfa, 0xe7, 0x7a, 0x8f, 0x03, 0xc7, 0x2a, 0xc2, 0x8c }, + // 102 + { 0x67, 0x46, 0xc8, 0x0b, 0x4e, 0xb5, 0x6a, 0xea, 0x45, 0xe6, 0x4e, 0x72, 0x89, 0xbb, 0xa3, 0xed, 0xbf, 0x45, 0xec, 0xf8, 0x20, 0x64, 0x81, 0xff, 0x63, 0x02, 0x12, 0x29, 0x84, 0xcd, 0x52, 0x6a }, + // 103 + { 0x2b, 0x62, 0x8e, 0x52, 0x76, 0x4d, 0x7d, 0x62, 0xc0, 0x86, 0x8b, 0x21, 0x23, 0x57, 0xcd, 0xd1, 0x2d, 0x91, 0x49, 0x82, 0x2f, 0x4e, 0x98, 0x45, 0xd9, 0x18, 0xa0, 0x8d, 0x1a, 0xe9, 0x90, 0xc0 }, + // 104 + { 0xe4, 0xbf, 0xe8, 0x0d, 0x58, 0xc9, 0x19, 0x94, 0x61, 0x39, 0x09, 0xdc, 0x4b, 0x1a, 0x12, 0x49, 0x68, 0x96, 0xc0, 0x04, 0xaf, 0x7b, 0x57, 0x01, 0x48, 0x3d, 0xe4, 0x5d, 0x28, 0x23, 0xd7, 0x8e }, + // 105 + { 0xeb, 0xb4, 0xba, 0x15, 0x0c, 0xef, 0x27, 0x34, 0x34, 0x5b, 0x5d, 0x64, 0x1b, 0xbe, 0xd0, 0x3a, 0x21, 0xea, 0xfa, 0xe9, 0x33, 0xc9, 0x9e, 0x00, 0x92, 0x12, 0xef, 0x04, 0x57, 0x4a, 0x85, 0x30 }, + // 106 + { 0x39, 0x66, 0xec, 0x73, 0xb1, 0x54, 0xac, 0xc6, 0x97, 0xac, 0x5c, 0xf5, 0xb2, 0x4b, 0x40, 0xbd, 0xb0, 0xdb, 0x9e, 0x39, 0x88, 0x36, 0xd7, 0x6d, 0x4b, 0x88, 0x0e, 0x3b, 0x2a, 0xf1, 0xaa, 0x27 }, + // 107 + { 0xef, 0x7e, 0x48, 0x31, 0xb3, 0xa8, 0x46, 0x36, 0x51, 0x8d, 0x6e, 0x4b, 0xfc, 0xe6, 0x4a, 0x43, 0xdb, 0x2a, 0x5d, 0xda, 0x9c, 0xca, 0x2b, 0x44, 0xf3, 0x90, 0x33, 0xbd, 0xc4, 0x0d, 0x62, 0x43 }, + // 108 + { 0x7a, 0xbf, 0x6a, 0xcf, 0x5c, 0x8e, 0x54, 0x9d, 0xdb, 0xb1, 0x5a, 0xe8, 0xd8, 0xb3, 0x88, 0xc1, 0xc1, 0x97, 0xe6, 0x98, 0x73, 0x7c, 0x97, 0x85, 0x50, 0x1e, 0xd1, 0xf9, 0x49, 0x30, 0xb7, 0xd9 }, + // 109 + { 0x88, 0x01, 0x8d, 0xed, 0x66, 0x81, 0x3f, 0x0c, 0xa9, 0x5d, 0xef, 0x47, 0x4c, 0x63, 0x06, 0x92, 0x01, 0x99, 0x67, 0xb9, 0xe3, 0x68, 0x88, 0xda, 0xdd, 0x94, 0x12, 0x47, 0x19, 0xb6, 0x82, 0xf6 }, + // 110 + { 0x39, 0x30, 0x87, 0x6b, 0x9f, 0xc7, 0x52, 0x90, 0x36, 0xb0, 0x08, 0xb1, 0xb8, 0xbb, 0x99, 0x75, 0x22, 0xa4, 0x41, 0x63, 0x5a, 0x0c, 0x25, 0xec, 0x02, 0xfb, 0x6d, 0x90, 0x26, 0xe5, 0x5a, 0x97 }, + // 111 + { 0x0a, 0x40, 0x49, 0xd5, 0x7e, 0x83, 0x3b, 0x56, 0x95, 0xfa, 0xc9, 0x3d, 0xd1, 0xfb, 0xef, 0x31, 0x66, 0xb4, 0x4b, 0x12, 0xad, 0x11, 0x24, 0x86, 0x62, 0x38, 0x3a, 0xe0, 0x51, 0xe1, 0x58, 0x27 }, + // 112 + { 0x81, 0xdc, 0xc0, 0x67, 0x8b, 0xb6, 0xa7, 0x65, 0xe4, 0x8c, 0x32, 0x09, 0x65, 0x4f, 0xe9, 0x00, 0x89, 0xce, 0x44, 0xff, 0x56, 0x18, 0x47, 0x7e, 0x39, 0xab, 0x28, 0x64, 0x76, 0xdf, 0x05, 0x2b }, + // 113 + { 0xe6, 0x9b, 0x3a, 0x36, 0xa4, 0x46, 0x19, 0x12, 0xdc, 0x08, 0x34, 0x6b, 0x11, 0xdd, 0xcb, 0x9d, 0xb7, 0x96, 0xf8, 0x85, 0xfd, 0x01, 0x93, 0x6e, 0x66, 0x2f, 0xe2, 0x92, 0x97, 0xb0, 0x99, 0xa4 }, + // 114 + { 0x5a, 0xc6, 0x50, 0x3b, 0x0d, 0x8d, 0xa6, 0x91, 0x76, 0x46, 0xe6, 0xdc, 0xc8, 0x7e, 0xdc, 0x58, 0xe9, 0x42, 0x45, 0x32, 0x4c, 0xc2, 0x04, 0xf4, 0xdd, 0x4a, 0xf0, 0x15, 0x63, 0xac, 0xd4, 0x27 }, + // 115 + { 0xdf, 0x6d, 0xda, 0x21, 0x35, 0x9a, 0x30, 0xbc, 0x27, 0x17, 0x80, 0x97, 0x1c, 0x1a, 0xbd, 0x56, 0xa6, 0xef, 0x16, 0x7e, 0x48, 0x08, 0x87, 0x88, 0x8e, 0x73, 0xa8, 0x6d, 0x3b, 0xf6, 0x05, 0xe9 }, + // 116 + { 0xe8, 0xe6, 0xe4, 0x70, 0x71, 0xe7, 0xb7, 0xdf, 0x25, 0x80, 0xf2, 0x25, 0xcf, 0xbb, 0xed, 0xf8, 0x4c, 0xe6, 0x77, 0x46, 0x62, 0x66, 0x28, 0xd3, 0x30, 0x97, 0xe4, 0xb7, 0xdc, 0x57, 0x11, 0x07 }, + // 117 + { 0x53, 0xe4, 0x0e, 0xad, 0x62, 0x05, 0x1e, 0x19, 0xcb, 0x9b, 0xa8, 0x13, 0x3e, 0x3e, 0x5c, 0x1c, 0xe0, 0x0d, 0xdc, 0xad, 0x8a, 0xcf, 0x34, 0x2a, 0x22, 0x43, 0x60, 0xb0, 0xac, 0xc1, 0x47, 0x77 }, + // 118 + { 0x9c, 0xcd, 0x53, 0xfe, 0x80, 0xbe, 0x78, 0x6a, 0xa9, 0x84, 0x63, 0x84, 0x62, 0xfb, 0x28, 0xaf, 0xdf, 0x12, 0x2b, 0x34, 0xd7, 0x8f, 0x46, 0x87, 0xec, 0x63, 0x2b, 0xb1, 0x9d, 0xe2, 0x37, 0x1a }, + // 119 + { 0xcb, 0xd4, 0x80, 0x52, 0xc4, 0x8d, 0x78, 0x84, 0x66, 0xa3, 0xe8, 0x11, 0x8c, 0x56, 0xc9, 0x7f, 0xe1, 0x46, 0xe5, 0x54, 0x6f, 0xaa, 0xf9, 0x3e, 0x2b, 0xc3, 0xc4, 0x7e, 0x45, 0x93, 0x97, 0x53 }, + // 120 + { 0x25, 0x68, 0x83, 0xb1, 0x4e, 0x2a, 0xf4, 0x4d, 0xad, 0xb2, 0x8e, 0x1b, 0x34, 0xb2, 0xac, 0x0f, 0x0f, 0x4c, 0x91, 0xc3, 0x4e, 0xc9, 0x16, 0x9e, 0x29, 0x03, 0x61, 0x58, 0xac, 0xaa, 0x95, 0xb9 }, + // 121 + { 0x44, 0x71, 0xb9, 0x1a, 0xb4, 0x2d, 0xb7, 0xc4, 0xdd, 0x84, 0x90, 0xab, 0x95, 0xa2, 0xee, 0x8d, 0x04, 0xe3, 0xef, 0x5c, 0x3d, 0x6f, 0xc7, 0x1a, 0xc7, 0x4b, 0x2b, 0x26, 0x91, 0x4d, 0x16, 0x41 }, + // 122 + { 0xa5, 0xeb, 0x08, 0x03, 0x8f, 0x8f, 0x11, 0x55, 0xed, 0x86, 0xe6, 0x31, 0x90, 0x6f, 0xc1, 0x30, 0x95, 0xf6, 0xbb, 0xa4, 0x1d, 0xe5, 0xd4, 0xe7, 0x95, 0x75, 0x8e, 0xc8, 0xc8, 0xdf, 0x8a, 0xf1 }, + // 123 + { 0xdc, 0x1d, 0xb6, 0x4e, 0xd8, 0xb4, 0x8a, 0x91, 0x0e, 0x06, 0x0a, 0x6b, 0x86, 0x63, 0x74, 0xc5, 0x78, 0x78, 0x4e, 0x9a, 0xc4, 0x9a, 0xb2, 0x77, 0x40, 0x92, 0xac, 0x71, 0x50, 0x19, 0x34, 0xac }, + // 124 + { 0x28, 0x54, 0x13, 0xb2, 0xf2, 0xee, 0x87, 0x3d, 0x34, 0x31, 0x9e, 0xe0, 0xbb, 0xfb, 0xb9, 0x0f, 0x32, 0xda, 0x43, 0x4c, 0xc8, 0x7e, 0x3d, 0xb5, 0xed, 0x12, 0x1b, 0xb3, 0x98, 0xed, 0x96, 0x4b }, + // 125 + { 0x02, 0x16, 0xe0, 0xf8, 0x1f, 0x75, 0x0f, 0x26, 0xf1, 0x99, 0x8b, 0xc3, 0x93, 0x4e, 0x3e, 0x12, 0x4c, 0x99, 0x45, 0xe6, 0x85, 0xa6, 0x0b, 0x25, 0xe8, 0xfb, 0xd9, 0x62, 0x5a, 0xb6, 0xb5, 0x99 }, + // 126 + { 0x38, 0xc4, 0x10, 0xf5, 0xb9, 0xd4, 0x07, 0x20, 0x50, 0x75, 0x5b, 0x31, 0xdc, 0xa8, 0x9f, 0xd5, 0x39, 0x5c, 0x67, 0x85, 0xee, 0xb3, 0xd7, 0x90, 0xf3, 0x20, 0xff, 0x94, 0x1c, 0x5a, 0x93, 0xbf }, + // 127 + { 0xf1, 0x84, 0x17, 0xb3, 0x9d, 0x61, 0x7a, 0xb1, 0xc1, 0x8f, 0xdf, 0x91, 0xeb, 0xd0, 0xfc, 0x6d, 0x55, 0x16, 0xbb, 0x34, 0xcf, 0x39, 0x36, 0x40, 0x37, 0xbc, 0xe8, 0x1f, 0xa0, 0x4c, 0xec, 0xb1 }, + // 128 + { 0x1f, 0xa8, 0x77, 0xde, 0x67, 0x25, 0x9d, 0x19, 0x86, 0x3a, 0x2a, 0x34, 0xbc, 0xc6, 0x96, 0x2a, 0x2b, 0x25, 0xfc, 0xbf, 0x5c, 0xbe, 0xcd, 0x7e, 0xde, 0x8f, 0x1f, 0xa3, 0x66, 0x88, 0xa7, 0x96 }, + // 129 + { 0x5b, 0xd1, 0x69, 0xe6, 0x7c, 0x82, 0xc2, 0xc2, 0xe9, 0x8e, 0xf7, 0x00, 0x8b, 0xdf, 0x26, 0x1f, 0x2d, 0xdf, 0x30, 0xb1, 0xc0, 0x0f, 0x9e, 0x7f, 0x27, 0x5b, 0xb3, 0xe8, 0xa2, 0x8d, 0xc9, 0xa2 }, + // 130 + { 0xc8, 0x0a, 0xbe, 0xeb, 0xb6, 0x69, 0xad, 0x5d, 0xee, 0xb5, 0xf5, 0xec, 0x8e, 0xa6, 0xb7, 0xa0, 0x5d, 0xdf, 0x7d, 0x31, 0xec, 0x4c, 0x0a, 0x2e, 0xe2, 0x0b, 0x0b, 0x98, 0xca, 0xec, 0x67, 0x46 }, + // 131 + { 0xe7, 0x6d, 0x3f, 0xbd, 0xa5, 0xba, 0x37, 0x4e, 0x6b, 0xf8, 0xe5, 0x0f, 0xad, 0xc3, 0xbb, 0xb9, 0xba, 0x5c, 0x20, 0x6e, 0xbd, 0xec, 0x89, 0xa3, 0xa5, 0x4c, 0xf3, 0xdd, 0x84, 0xa0, 0x70, 0x16 }, + // 132 + { 0x7b, 0xba, 0x9d, 0xc5, 0xb5, 0xdb, 0x20, 0x71, 0xd1, 0x77, 0x52, 0xb1, 0x04, 0x4c, 0x1e, 0xce, 0xd9, 0x6a, 0xaf, 0x2d, 0xd4, 0x6e, 0x9b, 0x43, 0x37, 0x50, 0xe8, 0xea, 0x0d, 0xcc, 0x18, 0x70 }, + // 133 + { 0xf2, 0x9b, 0x1b, 0x1a, 0xb9, 0xba, 0xb1, 0x63, 0x01, 0x8e, 0xe3, 0xda, 0x15, 0x23, 0x2c, 0xca, 0x78, 0xec, 0x52, 0xdb, 0xc3, 0x4e, 0xda, 0x5b, 0x82, 0x2e, 0xc1, 0xd8, 0x0f, 0xc2, 0x1b, 0xd0 }, + // 134 + { 0x9e, 0xe3, 0xe3, 0xe7, 0xe9, 0x00, 0xf1, 0xe1, 0x1d, 0x30, 0x8c, 0x4b, 0x2b, 0x30, 0x76, 0xd2, 0x72, 0xcf, 0x70, 0x12, 0x4f, 0x9f, 0x51, 0xe1, 0xda, 0x60, 0xf3, 0x78, 0x46, 0xcd, 0xd2, 0xf4 }, + // 135 + { 0x70, 0xea, 0x3b, 0x01, 0x76, 0x92, 0x7d, 0x90, 0x96, 0xa1, 0x85, 0x08, 0xcd, 0x12, 0x3a, 0x29, 0x03, 0x25, 0x92, 0x0a, 0x9d, 0x00, 0xa8, 0x9b, 0x5d, 0xe0, 0x42, 0x73, 0xfb, 0xc7, 0x6b, 0x85 }, + // 136 + { 0x67, 0xde, 0x25, 0xc0, 0x2a, 0x4a, 0xab, 0xa2, 0x3b, 0xdc, 0x97, 0x3c, 0x8b, 0xb0, 0xb5, 0x79, 0x6d, 0x47, 0xcc, 0x06, 0x59, 0xd4, 0x3d, 0xff, 0x1f, 0x97, 0xde, 0x17, 0x49, 0x63, 0xb6, 0x8e }, + // 137 + { 0xb2, 0x16, 0x8e, 0x4e, 0x0f, 0x18, 0xb0, 0xe6, 0x41, 0x00, 0xb5, 0x17, 0xed, 0x95, 0x25, 0x7d, 0x73, 0xf0, 0x62, 0x0d, 0xf8, 0x85, 0xc1, 0x3d, 0x2e, 0xcf, 0x79, 0x36, 0x7b, 0x38, 0x4c, 0xee }, + // 138 + { 0x2e, 0x7d, 0xec, 0x24, 0x28, 0x85, 0x3b, 0x2c, 0x71, 0x76, 0x07, 0x45, 0x54, 0x1f, 0x7a, 0xfe, 0x98, 0x25, 0xb5, 0xdd, 0x77, 0xdf, 0x06, 0x51, 0x1d, 0x84, 0x41, 0xa9, 0x4b, 0xac, 0xc9, 0x27 }, + // 139 + { 0xca, 0x9f, 0xfa, 0xc4, 0xc4, 0x3f, 0x0b, 0x48, 0x46, 0x1d, 0xc5, 0xc2, 0x63, 0xbe, 0xa3, 0xf6, 0xf0, 0x06, 0x11, 0xce, 0xac, 0xab, 0xf6, 0xf8, 0x95, 0xba, 0x2b, 0x01, 0x01, 0xdb, 0xb6, 0x8d }, + // 140 + { 0x74, 0x10, 0xd4, 0x2d, 0x8f, 0xd1, 0xd5, 0xe9, 0xd2, 0xf5, 0x81, 0x5c, 0xb9, 0x34, 0x17, 0x99, 0x88, 0x28, 0xef, 0x3c, 0x42, 0x30, 0xbf, 0xbd, 0x41, 0x2d, 0xf0, 0xa4, 0xa7, 0xa2, 0x50, 0x7a }, + // 141 + { 0x50, 0x10, 0xf6, 0x84, 0x51, 0x6d, 0xcc, 0xd0, 0xb6, 0xee, 0x08, 0x52, 0xc2, 0x51, 0x2b, 0x4d, 0xc0, 0x06, 0x6c, 0xf0, 0xd5, 0x6f, 0x35, 0x30, 0x29, 0x78, 0xdb, 0x8a, 0xe3, 0x2c, 0x6a, 0x81 }, + // 142 + { 0xac, 0xaa, 0xb5, 0x85, 0xf7, 0xb7, 0x9b, 0x71, 0x99, 0x35, 0xce, 0xb8, 0x95, 0x23, 0xdd, 0xc5, 0x48, 0x27, 0xf7, 0x5c, 0x56, 0x88, 0x38, 0x56, 0x15, 0x4a, 0x56, 0xcd, 0xcd, 0x5e, 0xe9, 0x88 }, + // 143 + { 0x66, 0x6d, 0xe5, 0xd1, 0x44, 0x0f, 0xee, 0x73, 0x31, 0xaa, 0xf0, 0x12, 0x3a, 0x62, 0xef, 0x2d, 0x8b, 0xa5, 0x74, 0x53, 0xa0, 0x76, 0x96, 0x35, 0xac, 0x6c, 0xd0, 0x1e, 0x63, 0x3f, 0x77, 0x12 }, + // 144 + { 0xa6, 0xf9, 0x86, 0x58, 0xf6, 0xea, 0xba, 0xf9, 0x02, 0xd8, 0xb3, 0x87, 0x1a, 0x4b, 0x10, 0x1d, 0x16, 0x19, 0x6e, 0x8a, 0x4b, 0x24, 0x1e, 0x15, 0x58, 0xfe, 0x29, 0x96, 0x6e, 0x10, 0x3e, 0x8d }, + // 145 + { 0x89, 0x15, 0x46, 0xa8, 0xb2, 0x9f, 0x30, 0x47, 0xdd, 0xcf, 0xe5, 0xb0, 0x0e, 0x45, 0xfd, 0x55, 0x75, 0x63, 0x73, 0x10, 0x5e, 0xa8, 0x63, 0x7d, 0xfc, 0xff, 0x54, 0x7b, 0x6e, 0xa9, 0x53, 0x5f }, + // 146 + { 0x18, 0xdf, 0xbc, 0x1a, 0xc5, 0xd2, 0x5b, 0x07, 0x61, 0x13, 0x7d, 0xbd, 0x22, 0xc1, 0x7c, 0x82, 0x9d, 0x0f, 0x0e, 0xf1, 0xd8, 0x23, 0x44, 0xe9, 0xc8, 0x9c, 0x28, 0x66, 0x94, 0xda, 0x24, 0xe8 }, + // 147 + { 0xb5, 0x4b, 0x9b, 0x67, 0xf8, 0xfe, 0xd5, 0x4b, 0xbf, 0x5a, 0x26, 0x66, 0xdb, 0xdf, 0x4b, 0x23, 0xcf, 0xf1, 0xd1, 0xb6, 0xf4, 0xaf, 0xc9, 0x85, 0xb2, 0xe6, 0xd3, 0x30, 0x5a, 0x9f, 0xf8, 0x0f }, + // 148 + { 0x7d, 0xb4, 0x42, 0xe1, 0x32, 0xba, 0x59, 0xbc, 0x12, 0x89, 0xaa, 0x98, 0xb0, 0xd3, 0xe8, 0x06, 0x00, 0x4f, 0x8e, 0xc1, 0x28, 0x11, 0xaf, 0x1e, 0x2e, 0x33, 0xc6, 0x9b, 0xfd, 0xe7, 0x29, 0xe1 }, + // 149 + { 0x25, 0x0f, 0x37, 0xcd, 0xc1, 0x5e, 0x81, 0x7d, 0x2f, 0x16, 0x0d, 0x99, 0x56, 0xc7, 0x1f, 0xe3, 0xeb, 0x5d, 0xb7, 0x45, 0x56, 0xe4, 0xad, 0xf9, 0xa4, 0xff, 0xaf, 0xba, 0x74, 0x01, 0x03, 0x96 }, + // 150 + { 0x4a, 0xb8, 0xa3, 0xdd, 0x1d, 0xdf, 0x8a, 0xd4, 0x3d, 0xab, 0x13, 0xa2, 0x7f, 0x66, 0xa6, 0x54, 0x4f, 0x29, 0x05, 0x97, 0xfa, 0x96, 0x04, 0x0e, 0x0e, 0x1d, 0xb9, 0x26, 0x3a, 0xa4, 0x79, 0xf8 }, + // 151 + { 0xee, 0x61, 0x72, 0x7a, 0x07, 0x66, 0xdf, 0x93, 0x9c, 0xcd, 0xc8, 0x60, 0x33, 0x40, 0x44, 0xc7, 0x9a, 0x3c, 0x9b, 0x15, 0x62, 0x00, 0xbc, 0x3a, 0xa3, 0x29, 0x73, 0x48, 0x3d, 0x83, 0x41, 0xae }, + // 152 + { 0x3f, 0x68, 0xc7, 0xec, 0x63, 0xac, 0x11, 0xeb, 0xb9, 0x8f, 0x94, 0xb3, 0x39, 0xb0, 0x5c, 0x10, 0x49, 0x84, 0xfd, 0xa5, 0x01, 0x03, 0x06, 0x01, 0x44, 0xe5, 0xa2, 0xbf, 0xcc, 0xc9, 0xda, 0x95 }, + // 153 + { 0x05, 0x6f, 0x29, 0x81, 0x6b, 0x8a, 0xf8, 0xf5, 0x66, 0x82, 0xbc, 0x4d, 0x7c, 0xf0, 0x94, 0x11, 0x1d, 0xa7, 0x73, 0x3e, 0x72, 0x6c, 0xd1, 0x3d, 0x6b, 0x3e, 0x8e, 0xa0, 0x3e, 0x92, 0xa0, 0xd5 }, + // 154 + { 0xf5, 0xec, 0x43, 0xa2, 0x8a, 0xcb, 0xef, 0xf1, 0xf3, 0x31, 0x8a, 0x5b, 0xca, 0xc7, 0xc6, 0x6d, 0xdb, 0x52, 0x30, 0xb7, 0x9d, 0xb2, 0xd1, 0x05, 0xbc, 0xbe, 0x15, 0xf3, 0xc1, 0x14, 0x8d, 0x69 }, + // 155 + { 0x2a, 0x69, 0x60, 0xad, 0x1d, 0x8d, 0xd5, 0x47, 0x55, 0x5c, 0xfb, 0xd5, 0xe4, 0x60, 0x0f, 0x1e, 0xaa, 0x1c, 0x8e, 0xda, 0x34, 0xde, 0x03, 0x74, 0xec, 0x4a, 0x26, 0xea, 0xaa, 0xa3, 0x3b, 0x4e }, + // 156 + { 0xdc, 0xc1, 0xea, 0x7b, 0xaa, 0xb9, 0x33, 0x84, 0xf7, 0x6b, 0x79, 0x68, 0x66, 0x19, 0x97, 0x54, 0x74, 0x2f, 0x7b, 0x96, 0xd6, 0xb4, 0xc1, 0x20, 0x16, 0x5c, 0x04, 0xa6, 0xc4, 0xf5, 0xce, 0x10 }, + // 157 + { 0x13, 0xd5, 0xdf, 0x17, 0x92, 0x21, 0x37, 0x9c, 0x6a, 0x78, 0xc0, 0x7c, 0x79, 0x3f, 0xf5, 0x34, 0x87, 0xca, 0xe6, 0xbf, 0x9f, 0xe8, 0x82, 0x54, 0x1a, 0xb0, 0xe7, 0x35, 0xe3, 0xea, 0xda, 0x3b }, + // 158 + { 0x8c, 0x59, 0xe4, 0x40, 0x76, 0x41, 0xa0, 0x1e, 0x8f, 0xf9, 0x1f, 0x99, 0x80, 0xdc, 0x23, 0x6f, 0x4e, 0xcd, 0x6f, 0xcf, 0x52, 0x58, 0x9a, 0x09, 0x9a, 0x96, 0x16, 0x33, 0x96, 0x77, 0x14, 0xe1 }, + // 159 + { 0x83, 0x3b, 0x1a, 0xc6, 0xa2, 0x51, 0xfd, 0x08, 0xfd, 0x6d, 0x90, 0x8f, 0xea, 0x2a, 0x4e, 0xe1, 0xe0, 0x40, 0xbc, 0xa9, 0x3f, 0xc1, 0xa3, 0x8e, 0xc3, 0x82, 0x0e, 0x0c, 0x10, 0xbd, 0x82, 0xea }, + // 160 + { 0xa2, 0x44, 0xf9, 0x27, 0xf3, 0xb4, 0x0b, 0x8f, 0x6c, 0x39, 0x15, 0x70, 0xc7, 0x65, 0x41, 0x8f, 0x2f, 0x6e, 0x70, 0x8e, 0xac, 0x90, 0x06, 0xc5, 0x1a, 0x7f, 0xef, 0xf4, 0xaf, 0x3b, 0x2b, 0x9e }, + // 161 + { 0x3d, 0x99, 0xed, 0x95, 0x50, 0xcf, 0x11, 0x96, 0xe6, 0xc4, 0xd2, 0x0c, 0x25, 0x96, 0x20, 0xf8, 0x58, 0xc3, 0xd7, 0x03, 0x37, 0x4c, 0x12, 0x8c, 0xe7, 0xb5, 0x90, 0x31, 0x0c, 0x83, 0x04, 0x6d }, + // 162 + { 0x2b, 0x35, 0xc4, 0x7d, 0x7b, 0x87, 0x76, 0x1f, 0x0a, 0xe4, 0x3a, 0xc5, 0x6a, 0xc2, 0x7b, 0x9f, 0x25, 0x83, 0x03, 0x67, 0xb5, 0x95, 0xbe, 0x8c, 0x24, 0x0e, 0x94, 0x60, 0x0c, 0x6e, 0x33, 0x12 }, + // 163 + { 0x5d, 0x11, 0xed, 0x37, 0xd2, 0x4d, 0xc7, 0x67, 0x30, 0x5c, 0xb7, 0xe1, 0x46, 0x7d, 0x87, 0xc0, 0x65, 0xac, 0x4b, 0xc8, 0xa4, 0x26, 0xde, 0x38, 0x99, 0x1f, 0xf5, 0x9a, 0xa8, 0x73, 0x5d, 0x02 }, + // 164 + { 0xb8, 0x36, 0x47, 0x8e, 0x1c, 0xa0, 0x64, 0x0d, 0xce, 0x6f, 0xd9, 0x10, 0xa5, 0x09, 0x62, 0x72, 0xc8, 0x33, 0x09, 0x90, 0xcd, 0x97, 0x86, 0x4a, 0xc2, 0xbf, 0x14, 0xef, 0x6b, 0x23, 0x91, 0x4a }, + // 165 + { 0x91, 0x00, 0xf9, 0x46, 0xd6, 0xcc, 0xde, 0x3a, 0x59, 0x7f, 0x90, 0xd3, 0x9f, 0xc1, 0x21, 0x5b, 0xad, 0xdc, 0x74, 0x13, 0x64, 0x3d, 0x85, 0xc2, 0x1c, 0x3e, 0xee, 0x5d, 0x2d, 0xd3, 0x28, 0x94 }, + // 166 + { 0xda, 0x70, 0xee, 0xdd, 0x23, 0xe6, 0x63, 0xaa, 0x1a, 0x74, 0xb9, 0x76, 0x69, 0x35, 0xb4, 0x79, 0x22, 0x2a, 0x72, 0xaf, 0xba, 0x5c, 0x79, 0x51, 0x58, 0xda, 0xd4, 0x1a, 0x3b, 0xd7, 0x7e, 0x40 }, + // 167 + { 0xf0, 0x67, 0xed, 0x6a, 0x0d, 0xbd, 0x43, 0xaa, 0x0a, 0x92, 0x54, 0xe6, 0x9f, 0xd6, 0x6b, 0xdd, 0x8a, 0xcb, 0x87, 0xde, 0x93, 0x6c, 0x25, 0x8c, 0xfb, 0x02, 0x28, 0x5f, 0x2c, 0x11, 0xfa, 0x79 }, + // 168 + { 0x71, 0x5c, 0x99, 0xc7, 0xd5, 0x75, 0x80, 0xcf, 0x97, 0x53, 0xb4, 0xc1, 0xd7, 0x95, 0xe4, 0x5a, 0x83, 0xfb, 0xb2, 0x28, 0xc0, 0xd3, 0x6f, 0xbe, 0x20, 0xfa, 0xf3, 0x9b, 0xdd, 0x6d, 0x4e, 0x85 }, + // 169 + { 0xe4, 0x57, 0xd6, 0xad, 0x1e, 0x67, 0xcb, 0x9b, 0xbd, 0x17, 0xcb, 0xd6, 0x98, 0xfa, 0x6d, 0x7d, 0xae, 0x0c, 0x9b, 0x7a, 0xd6, 0xcb, 0xd6, 0x53, 0x96, 0x34, 0xe3, 0x2a, 0x71, 0x9c, 0x84, 0x92 }, + // 170 + { 0xec, 0xe3, 0xea, 0x81, 0x03, 0xe0, 0x24, 0x83, 0xc6, 0x4a, 0x70, 0xa4, 0xbd, 0xce, 0xe8, 0xce, 0xb6, 0x27, 0x8f, 0x25, 0x33, 0xf3, 0xf4, 0x8d, 0xbe, 0xed, 0xfb, 0xa9, 0x45, 0x31, 0xd4, 0xae }, + // 171 + { 0x38, 0x8a, 0xa5, 0xd3, 0x66, 0x7a, 0x97, 0xc6, 0x8d, 0x3d, 0x56, 0xf8, 0xf3, 0xee, 0x8d, 0x3d, 0x36, 0x09, 0x1f, 0x17, 0xfe, 0x5d, 0x1b, 0x0d, 0x5d, 0x84, 0xc9, 0x3b, 0x2f, 0xfe, 0x40, 0xbd }, + // 172 + { 0x8b, 0x6b, 0x31, 0xb9, 0xad, 0x7c, 0x3d, 0x5c, 0xd8, 0x4b, 0xf9, 0x89, 0x47, 0xb9, 0xcd, 0xb5, 0x9d, 0xf8, 0xa2, 0x5f, 0xf7, 0x38, 0x10, 0x10, 0x13, 0xbe, 0x4f, 0xd6, 0x5e, 0x1d, 0xd1, 0xa3 }, + // 173 + { 0x06, 0x62, 0x91, 0xf6, 0xbb, 0xd2, 0x5f, 0x3c, 0x85, 0x3d, 0xb7, 0xd8, 0xb9, 0x5c, 0x9a, 0x1c, 0xfb, 0x9b, 0xf1, 0xc1, 0xc9, 0x9f, 0xb9, 0x5a, 0x9b, 0x78, 0x69, 0xd9, 0x0f, 0x1c, 0x29, 0x03 }, + // 174 + { 0xa7, 0x07, 0xef, 0xbc, 0xcd, 0xce, 0xed, 0x42, 0x96, 0x7a, 0x66, 0xf5, 0x53, 0x9b, 0x93, 0xed, 0x75, 0x60, 0xd4, 0x67, 0x30, 0x40, 0x16, 0xc4, 0x78, 0x0d, 0x77, 0x55, 0xa5, 0x65, 0xd4, 0xc4 }, + // 175 + { 0x38, 0xc5, 0x3d, 0xfb, 0x70, 0xbe, 0x7e, 0x79, 0x2b, 0x07, 0xa6, 0xa3, 0x5b, 0x8a, 0x6a, 0x0a, 0xba, 0x02, 0xc5, 0xc5, 0xf3, 0x8b, 0xaf, 0x5c, 0x82, 0x3f, 0xdf, 0xd9, 0xe4, 0x2d, 0x65, 0x7e }, + // 176 + { 0xf2, 0x91, 0x13, 0x86, 0x50, 0x1d, 0x9a, 0xb9, 0xd7, 0x20, 0xcf, 0x8a, 0xd1, 0x05, 0x03, 0xd5, 0x63, 0x4b, 0xf4, 0xb7, 0xd1, 0x2b, 0x56, 0xdf, 0xb7, 0x4f, 0xec, 0xc6, 0xe4, 0x09, 0x3f, 0x68 }, + // 177 + { 0xc6, 0xf2, 0xbd, 0xd5, 0x2b, 0x81, 0xe6, 0xe4, 0xf6, 0x59, 0x5a, 0xbd, 0x4d, 0x7f, 0xb3, 0x1f, 0x65, 0x11, 0x69, 0xd0, 0x0f, 0xf3, 0x26, 0x92, 0x6b, 0x34, 0x94, 0x7b, 0x28, 0xa8, 0x39, 0x59 }, + // 178 + { 0x29, 0x3d, 0x94, 0xb1, 0x8c, 0x98, 0xbb, 0x32, 0x23, 0x36, 0x6b, 0x8c, 0xe7, 0x4c, 0x28, 0xfb, 0xdf, 0x28, 0xe1, 0xf8, 0x4a, 0x33, 0x50, 0xb0, 0xeb, 0x2d, 0x18, 0x04, 0xa5, 0x77, 0x57, 0x9b }, + // 179 + { 0x2c, 0x2f, 0xa5, 0xc0, 0xb5, 0x15, 0x33, 0x16, 0x5b, 0xc3, 0x75, 0xc2, 0x2e, 0x27, 0x81, 0x76, 0x82, 0x70, 0xa3, 0x83, 0x98, 0x5d, 0x13, 0xbd, 0x6b, 0x67, 0xb6, 0xfd, 0x67, 0xf8, 0x89, 0xeb }, + // 180 + { 0xca, 0xa0, 0x9b, 0x82, 0xb7, 0x25, 0x62, 0xe4, 0x3f, 0x4b, 0x22, 0x75, 0xc0, 0x91, 0x91, 0x8e, 0x62, 0x4d, 0x91, 0x16, 0x61, 0xcc, 0x81, 0x1b, 0xb5, 0xfa, 0xec, 0x51, 0xf6, 0x08, 0x8e, 0xf7 }, + // 181 + { 0x24, 0x76, 0x1e, 0x45, 0xe6, 0x74, 0x39, 0x53, 0x79, 0xfb, 0x17, 0x72, 0x9c, 0x78, 0xcb, 0x93, 0x9e, 0x6f, 0x74, 0xc5, 0xdf, 0xfb, 0x9c, 0x96, 0x1f, 0x49, 0x59, 0x82, 0xc3, 0xed, 0x1f, 0xe3 }, + // 182 + { 0x55, 0xb7, 0x0a, 0x82, 0x13, 0x1e, 0xc9, 0x48, 0x88, 0xd7, 0xab, 0x54, 0xa7, 0xc5, 0x15, 0x25, 0x5c, 0x39, 0x38, 0xbb, 0x10, 0xbc, 0x78, 0x4d, 0xc9, 0xb6, 0x7f, 0x07, 0x6e, 0x34, 0x1a, 0x73 }, + // 183 + { 0x6a, 0xb9, 0x05, 0x7b, 0x97, 0x7e, 0xbc, 0x3c, 0xa4, 0xd4, 0xce, 0x74, 0x50, 0x6c, 0x25, 0xcc, 0xcd, 0xc5, 0x66, 0x49, 0x7c, 0x45, 0x0b, 0x54, 0x15, 0xa3, 0x94, 0x86, 0xf8, 0x65, 0x7a, 0x03 }, + // 184 + { 0x24, 0x06, 0x6d, 0xee, 0xe0, 0xec, 0xee, 0x15, 0xa4, 0x5f, 0x0a, 0x32, 0x6d, 0x0f, 0x8d, 0xbc, 0x79, 0x76, 0x1e, 0xbb, 0x93, 0xcf, 0x8c, 0x03, 0x77, 0xaf, 0x44, 0x09, 0x78, 0xfc, 0xf9, 0x94 }, + // 185 + { 0x20, 0x00, 0x0d, 0x3f, 0x66, 0xba, 0x76, 0x86, 0x0d, 0x5a, 0x95, 0x06, 0x88, 0xb9, 0xaa, 0x0d, 0x76, 0xcf, 0xea, 0x59, 0xb0, 0x05, 0xd8, 0x59, 0x91, 0x4b, 0x1a, 0x46, 0x65, 0x3a, 0x93, 0x9b }, + // 186 + { 0xb9, 0x2d, 0xaa, 0x79, 0x60, 0x3e, 0x3b, 0xdb, 0xc3, 0xbf, 0xe0, 0xf4, 0x19, 0xe4, 0x09, 0xb2, 0xea, 0x10, 0xdc, 0x43, 0x5b, 0xee, 0xfe, 0x29, 0x59, 0xda, 0x16, 0x89, 0x5d, 0x5d, 0xca, 0x1c }, + // 187 + { 0xe9, 0x47, 0x94, 0x87, 0x05, 0xb2, 0x06, 0xd5, 0x72, 0xb0, 0xe8, 0xf6, 0x2f, 0x66, 0xa6, 0x55, 0x1c, 0xbd, 0x6b, 0xc3, 0x05, 0xd2, 0x6c, 0xe7, 0x53, 0x9a, 0x12, 0xf9, 0xaa, 0xdf, 0x75, 0x71 }, + // 188 + { 0x3d, 0x67, 0xc1, 0xb3, 0xf9, 0xb2, 0x39, 0x10, 0xe3, 0xd3, 0x5e, 0x6b, 0x0f, 0x2c, 0xcf, 0x44, 0xa0, 0xb5, 0x40, 0xa4, 0x5c, 0x18, 0xba, 0x3c, 0x36, 0x26, 0x4d, 0xd4, 0x8e, 0x96, 0xaf, 0x6a }, + // 189 + { 0xc7, 0x55, 0x8b, 0xab, 0xda, 0x04, 0xbc, 0xcb, 0x76, 0x4d, 0x0b, 0xbf, 0x33, 0x58, 0x42, 0x51, 0x41, 0x90, 0x2d, 0x22, 0x39, 0x1d, 0x9f, 0x8c, 0x59, 0x15, 0x9f, 0xec, 0x9e, 0x49, 0xb1, 0x51 }, + // 190 + { 0x0b, 0x73, 0x2b, 0xb0, 0x35, 0x67, 0x5a, 0x50, 0xff, 0x58, 0xf2, 0xc2, 0x42, 0xe4, 0x71, 0x0a, 0xec, 0xe6, 0x46, 0x70, 0x07, 0x9c, 0x13, 0x04, 0x4c, 0x79, 0xc9, 0xb7, 0x49, 0x1f, 0x70, 0x00 }, + // 191 + { 0xd1, 0x20, 0xb5, 0xef, 0x6d, 0x57, 0xeb, 0xf0, 0x6e, 0xaf, 0x96, 0xbc, 0x93, 0x3c, 0x96, 0x7b, 0x16, 0xcb, 0xe6, 0xe2, 0xbf, 0x00, 0x74, 0x1c, 0x30, 0xaa, 0x1c, 0x54, 0xba, 0x64, 0x80, 0x1f }, + // 192 + { 0x58, 0xd2, 0x12, 0xad, 0x6f, 0x58, 0xae, 0xf0, 0xf8, 0x01, 0x16, 0xb4, 0x41, 0xe5, 0x7f, 0x61, 0x95, 0xbf, 0xef, 0x26, 0xb6, 0x14, 0x63, 0xed, 0xec, 0x11, 0x83, 0xcd, 0xb0, 0x4f, 0xe7, 0x6d }, + // 193 + { 0xb8, 0x83, 0x6f, 0x51, 0xd1, 0xe2, 0x9b, 0xdf, 0xdb, 0xa3, 0x25, 0x56, 0x53, 0x60, 0x26, 0x8b, 0x8f, 0xad, 0x62, 0x74, 0x73, 0xed, 0xec, 0xef, 0x7e, 0xae, 0xfe, 0xe8, 0x37, 0xc7, 0x40, 0x03 }, + // 194 + { 0xc5, 0x47, 0xa3, 0xc1, 0x24, 0xae, 0x56, 0x85, 0xff, 0xa7, 0xb8, 0xed, 0xaf, 0x96, 0xec, 0x86, 0xf8, 0xb2, 0xd0, 0xd5, 0x0c, 0xee, 0x8b, 0xe3, 0xb1, 0xf0, 0xc7, 0x67, 0x63, 0x06, 0x9d, 0x9c }, + // 195 + { 0x5d, 0x16, 0x8b, 0x76, 0x9a, 0x2f, 0x67, 0x85, 0x3d, 0x62, 0x95, 0xf7, 0x56, 0x8b, 0xe4, 0x0b, 0xb7, 0xa1, 0x6b, 0x8d, 0x65, 0xba, 0x87, 0x63, 0x5d, 0x19, 0x78, 0xd2, 0xab, 0x11, 0xba, 0x2a }, + // 196 + { 0xa2, 0xf6, 0x75, 0xdc, 0x73, 0x02, 0x63, 0x8c, 0xb6, 0x02, 0x01, 0x06, 0x4c, 0xa5, 0x50, 0x77, 0x71, 0x4d, 0x71, 0xfe, 0x09, 0x6a, 0x31, 0x5f, 0x2f, 0xe7, 0x40, 0x12, 0x77, 0xca, 0xa5, 0xaf }, + // 197 + { 0xc8, 0xaa, 0xb5, 0xcd, 0x01, 0x60, 0xae, 0x78, 0xcd, 0x2e, 0x8a, 0xc5, 0xfb, 0x0e, 0x09, 0x3c, 0xdb, 0x5c, 0x4b, 0x60, 0x52, 0xa0, 0xa9, 0x7b, 0xb0, 0x42, 0x16, 0x82, 0x6f, 0xa7, 0xa4, 0x37 }, + // 198 + { 0xff, 0x68, 0xca, 0x40, 0x35, 0xbf, 0xeb, 0x43, 0xfb, 0xf1, 0x45, 0xfd, 0xdd, 0x5e, 0x43, 0xf1, 0xce, 0xa5, 0x4f, 0x11, 0xf7, 0xbe, 0xe1, 0x30, 0x58, 0xf0, 0x27, 0x32, 0x9a, 0x4a, 0x5f, 0xa4 }, + // 199 + { 0x1d, 0x4e, 0x54, 0x87, 0xae, 0x3c, 0x74, 0x0f, 0x2b, 0xa6, 0xe5, 0x41, 0xac, 0x91, 0xbc, 0x2b, 0xfc, 0xd2, 0x99, 0x9c, 0x51, 0x8d, 0x80, 0x7b, 0x42, 0x67, 0x48, 0x80, 0x3a, 0x35, 0x0f, 0xd4 }, + // 200 + { 0x6d, 0x24, 0x4e, 0x1a, 0x06, 0xce, 0x4e, 0xf5, 0x78, 0xdd, 0x0f, 0x63, 0xaf, 0xf0, 0x93, 0x67, 0x06, 0x73, 0x51, 0x19, 0xca, 0x9c, 0x8d, 0x22, 0xd8, 0x6c, 0x80, 0x14, 0x14, 0xab, 0x97, 0x41 }, + // 201 + { 0xde, 0xcf, 0x73, 0x29, 0xdb, 0xcc, 0x82, 0x7b, 0x8f, 0xc5, 0x24, 0xc9, 0x43, 0x1e, 0x89, 0x98, 0x02, 0x9e, 0xce, 0x12, 0xce, 0x93, 0xb7, 0xb2, 0xf3, 0xe7, 0x69, 0xa9, 0x41, 0xfb, 0x8c, 0xea }, + // 202 + { 0x2f, 0xaf, 0xcc, 0x0f, 0x2e, 0x63, 0xcb, 0xd0, 0x77, 0x55, 0xbe, 0x7b, 0x75, 0xec, 0xea, 0x0a, 0xdf, 0xf9, 0xaa, 0x5e, 0xde, 0x2a, 0x52, 0xfd, 0xab, 0x4d, 0xfd, 0x03, 0x74, 0xcd, 0x48, 0x3f }, + // 203 + { 0xaa, 0x85, 0x01, 0x0d, 0xd4, 0x6a, 0x54, 0x6b, 0x53, 0x5e, 0xf4, 0xcf, 0x5f, 0x07, 0xd6, 0x51, 0x61, 0xe8, 0x98, 0x28, 0xf3, 0xa7, 0x7d, 0xb7, 0xb9, 0xb5, 0x6f, 0x0d, 0xf5, 0x9a, 0xae, 0x45 }, + // 204 + { 0x07, 0xe8, 0xe1, 0xee, 0x73, 0x2c, 0xb0, 0xd3, 0x56, 0xc9, 0xc0, 0xd1, 0x06, 0x9c, 0x89, 0xd1, 0x7a, 0xdf, 0x6a, 0x9a, 0x33, 0x4f, 0x74, 0x5e, 0xc7, 0x86, 0x73, 0x32, 0x54, 0x8c, 0xa8, 0xe9 }, + // 205 + { 0x0e, 0x01, 0xe8, 0x1c, 0xad, 0xa8, 0x16, 0x2b, 0xfd, 0x5f, 0x8a, 0x8c, 0x81, 0x8a, 0x6c, 0x69, 0xfe, 0xdf, 0x02, 0xce, 0xb5, 0x20, 0x85, 0x23, 0xcb, 0xe5, 0x31, 0x3b, 0x89, 0xca, 0x10, 0x53 }, + // 206 + { 0x6b, 0xb6, 0xc6, 0x47, 0x26, 0x55, 0x08, 0x43, 0x99, 0x85, 0x2e, 0x00, 0x24, 0x9f, 0x8c, 0xb2, 0x47, 0x89, 0x6d, 0x39, 0x2b, 0x02, 0xd7, 0x3b, 0x7f, 0x0d, 0xd8, 0x18, 0xe1, 0xe2, 0x9b, 0x07 }, + // 207 + { 0x42, 0xd4, 0x63, 0x6e, 0x20, 0x60, 0xf0, 0x8f, 0x41, 0xc8, 0x82, 0xe7, 0x6b, 0x39, 0x6b, 0x11, 0x2e, 0xf6, 0x27, 0xcc, 0x24, 0xc4, 0x3d, 0xd5, 0xf8, 0x3a, 0x1d, 0x1a, 0x7e, 0xad, 0x71, 0x1a }, + // 208 + { 0x48, 0x58, 0xc9, 0xa1, 0x88, 0xb0, 0x23, 0x4f, 0xb9, 0xa8, 0xd4, 0x7d, 0x0b, 0x41, 0x33, 0x65, 0x0a, 0x03, 0x0b, 0xd0, 0x61, 0x1b, 0x87, 0xc3, 0x89, 0x2e, 0x94, 0x95, 0x1f, 0x8d, 0xf8, 0x52 }, + // 209 + { 0x3f, 0xab, 0x3e, 0x36, 0x98, 0x8d, 0x44, 0x5a, 0x51, 0xc8, 0x78, 0x3e, 0x53, 0x1b, 0xe3, 0xa0, 0x2b, 0xe4, 0x0c, 0xd0, 0x47, 0x96, 0xcf, 0xb6, 0x1d, 0x40, 0x34, 0x74, 0x42, 0xd3, 0xf7, 0x94 }, + // 210 + { 0xeb, 0xab, 0xc4, 0x96, 0x36, 0xbd, 0x43, 0x3d, 0x2e, 0xc8, 0xf0, 0xe5, 0x18, 0x73, 0x2e, 0xf8, 0xfa, 0x21, 0xd4, 0xd0, 0x71, 0xcc, 0x3b, 0xc4, 0x6c, 0xd7, 0x9f, 0xa3, 0x8a, 0x28, 0xb8, 0x10 }, + // 211 + { 0xa1, 0xd0, 0x34, 0x35, 0x23, 0xb8, 0x93, 0xfc, 0xa8, 0x4f, 0x47, 0xfe, 0xb4, 0xa6, 0x4d, 0x35, 0x0a, 0x17, 0xd8, 0xee, 0xf5, 0x49, 0x7e, 0xce, 0x69, 0x7d, 0x02, 0xd7, 0x91, 0x78, 0xb5, 0x91 }, + // 212 + { 0x26, 0x2e, 0xbf, 0xd9, 0x13, 0x0b, 0x7d, 0x28, 0x76, 0x0d, 0x08, 0xef, 0x8b, 0xfd, 0x3b, 0x86, 0xcd, 0xd3, 0xb2, 0x11, 0x3d, 0x2c, 0xae, 0xf7, 0xea, 0x95, 0x1a, 0x30, 0x3d, 0xfa, 0x38, 0x46 }, + // 213 + { 0xf7, 0x61, 0x58, 0xed, 0xd5, 0x0a, 0x15, 0x4f, 0xa7, 0x82, 0x03, 0xed, 0x23, 0x62, 0x93, 0x2f, 0xcb, 0x82, 0x53, 0xaa, 0xe3, 0x78, 0x90, 0x3e, 0xde, 0xd1, 0xe0, 0x3f, 0x70, 0x21, 0xa2, 0x57 }, + // 214 + { 0x26, 0x17, 0x8e, 0x95, 0x0a, 0xc7, 0x22, 0xf6, 0x7a, 0xe5, 0x6e, 0x57, 0x1b, 0x28, 0x4c, 0x02, 0x07, 0x68, 0x4a, 0x63, 0x34, 0xa1, 0x77, 0x48, 0xa9, 0x4d, 0x26, 0x0b, 0xc5, 0xf5, 0x52, 0x74 }, + // 215 + { 0xc3, 0x78, 0xd1, 0xe4, 0x93, 0xb4, 0x0e, 0xf1, 0x1f, 0xe6, 0xa1, 0x5d, 0x9c, 0x27, 0x37, 0xa3, 0x78, 0x09, 0x63, 0x4c, 0x5a, 0xba, 0xd5, 0xb3, 0x3d, 0x7e, 0x39, 0x3b, 0x4a, 0xe0, 0x5d, 0x03 }, + // 216 + { 0x98, 0x4b, 0xd8, 0x37, 0x91, 0x01, 0xbe, 0x8f, 0xd8, 0x06, 0x12, 0xd8, 0xea, 0x29, 0x59, 0xa7, 0x86, 0x5e, 0xc9, 0x71, 0x85, 0x23, 0x55, 0x01, 0x07, 0xae, 0x39, 0x38, 0xdf, 0x32, 0x01, 0x1b }, + // 217 + { 0xc6, 0xf2, 0x5a, 0x81, 0x2a, 0x14, 0x48, 0x58, 0xac, 0x5c, 0xed, 0x37, 0xa9, 0x3a, 0x9f, 0x47, 0x59, 0xba, 0x0b, 0x1c, 0x0f, 0xdc, 0x43, 0x1d, 0xce, 0x35, 0xf9, 0xec, 0x1f, 0x1f, 0x4a, 0x99 }, + // 218 + { 0x92, 0x4c, 0x75, 0xc9, 0x44, 0x24, 0xff, 0x75, 0xe7, 0x4b, 0x8b, 0x4e, 0x94, 0x35, 0x89, 0x58, 0xb0, 0x27, 0xb1, 0x71, 0xdf, 0x5e, 0x57, 0x89, 0x9a, 0xd0, 0xd4, 0xda, 0xc3, 0x73, 0x53, 0xb6 }, + // 219 + { 0x0a, 0xf3, 0x58, 0x92, 0xa6, 0x3f, 0x45, 0x93, 0x1f, 0x68, 0x46, 0xed, 0x19, 0x03, 0x61, 0xcd, 0x07, 0x30, 0x89, 0xe0, 0x77, 0x16, 0x57, 0x14, 0xb5, 0x0b, 0x81, 0xa2, 0xe3, 0xdd, 0x9b, 0xa1 }, + // 220 + { 0xcc, 0x80, 0xce, 0xfb, 0x26, 0xc3, 0xb2, 0xb0, 0xda, 0xef, 0x23, 0x3e, 0x60, 0x6d, 0x5f, 0xfc, 0x80, 0xfa, 0x17, 0x42, 0x7d, 0x18, 0xe3, 0x04, 0x89, 0x67, 0x3e, 0x06, 0xef, 0x4b, 0x87, 0xf7 }, + // 221 + { 0xc2, 0xf8, 0xc8, 0x11, 0x74, 0x47, 0xf3, 0x97, 0x8b, 0x08, 0x18, 0xdc, 0xf6, 0xf7, 0x01, 0x16, 0xac, 0x56, 0xfd, 0x18, 0x4d, 0xd1, 0x27, 0x84, 0x94, 0xe1, 0x03, 0xfc, 0x6d, 0x74, 0xa8, 0x87 }, + // 222 + { 0xbd, 0xec, 0xf6, 0xbf, 0xc1, 0xba, 0x0d, 0xf6, 0xe8, 0x62, 0xc8, 0x31, 0x99, 0x22, 0x07, 0x79, 0x6a, 0xcc, 0x79, 0x79, 0x68, 0x35, 0x88, 0x28, 0xc0, 0x6e, 0x7a, 0x51, 0xe0, 0x90, 0x09, 0x8f }, + // 223 + { 0x24, 0xd1, 0xa2, 0x6e, 0x3d, 0xab, 0x02, 0xfe, 0x45, 0x72, 0xd2, 0xaa, 0x7d, 0xbd, 0x3e, 0xc3, 0x0f, 0x06, 0x93, 0xdb, 0x26, 0xf2, 0x73, 0xd0, 0xab, 0x2c, 0xb0, 0xc1, 0x3b, 0x5e, 0x64, 0x51 }, + // 224 + { 0xec, 0x56, 0xf5, 0x8b, 0x09, 0x29, 0x9a, 0x30, 0x0b, 0x14, 0x05, 0x65, 0xd7, 0xd3, 0xe6, 0x87, 0x82, 0xb6, 0xe2, 0xfb, 0xeb, 0x4b, 0x7e, 0xa9, 0x7a, 0xc0, 0x57, 0x98, 0x90, 0x61, 0xdd, 0x3f }, + // 225 + { 0x11, 0xa4, 0x37, 0xc1, 0xab, 0xa3, 0xc1, 0x19, 0xdd, 0xfa, 0xb3, 0x1b, 0x3e, 0x8c, 0x84, 0x1d, 0xee, 0xeb, 0x91, 0x3e, 0xf5, 0x7f, 0x7e, 0x48, 0xf2, 0xc9, 0xcf, 0x5a, 0x28, 0xfa, 0x42, 0xbc }, + // 226 + { 0x53, 0xc7, 0xe6, 0x11, 0x4b, 0x85, 0x0a, 0x2c, 0xb4, 0x96, 0xc9, 0xb3, 0xc6, 0x9a, 0x62, 0x3e, 0xae, 0xa2, 0xcb, 0x1d, 0x33, 0xdd, 0x81, 0x7e, 0x47, 0x65, 0xed, 0xaa, 0x68, 0x23, 0xc2, 0x28 }, + // 227 + { 0x15, 0x4c, 0x3e, 0x96, 0xfe, 0xe5, 0xdb, 0x14, 0xf8, 0x77, 0x3e, 0x18, 0xaf, 0x14, 0x85, 0x79, 0x13, 0x50, 0x9d, 0xa9, 0x99, 0xb4, 0x6c, 0xdd, 0x3d, 0x4c, 0x16, 0x97, 0x60, 0xc8, 0x3a, 0xd2 }, + // 228 + { 0x40, 0xb9, 0x91, 0x6f, 0x09, 0x3e, 0x02, 0x7a, 0x87, 0x86, 0x64, 0x18, 0x18, 0x92, 0x06, 0x20, 0x47, 0x2f, 0xbc, 0xf6, 0x8f, 0x70, 0x1d, 0x1b, 0x68, 0x06, 0x32, 0xe6, 0x99, 0x6b, 0xde, 0xd3 }, + // 229 + { 0x24, 0xc4, 0xcb, 0xba, 0x07, 0x11, 0x98, 0x31, 0xa7, 0x26, 0xb0, 0x53, 0x05, 0xd9, 0x6d, 0xa0, 0x2f, 0xf8, 0xb1, 0x48, 0xf0, 0xda, 0x44, 0x0f, 0xe2, 0x33, 0xbc, 0xaa, 0x32, 0xc7, 0x2f, 0x6f }, + // 230 + { 0x5d, 0x20, 0x15, 0x10, 0x25, 0x00, 0x20, 0xb7, 0x83, 0x68, 0x96, 0x88, 0xab, 0xbf, 0x8e, 0xcf, 0x25, 0x94, 0xa9, 0x6a, 0x08, 0xf2, 0xbf, 0xec, 0x6c, 0xe0, 0x57, 0x44, 0x65, 0xdd, 0xed, 0x71 }, + // 231 + { 0x04, 0x3b, 0x97, 0xe3, 0x36, 0xee, 0x6f, 0xdb, 0xbe, 0x2b, 0x50, 0xf2, 0x2a, 0xf8, 0x32, 0x75, 0xa4, 0x08, 0x48, 0x05, 0xd2, 0xd5, 0x64, 0x59, 0x62, 0x45, 0x4b, 0x6c, 0x9b, 0x80, 0x53, 0xa0 }, + // 232 + { 0x56, 0x48, 0x35, 0xcb, 0xae, 0xa7, 0x74, 0x94, 0x85, 0x68, 0xbe, 0x36, 0xcf, 0x52, 0xfc, 0xdd, 0x83, 0x93, 0x4e, 0xb0, 0xa2, 0x75, 0x12, 0xdb, 0xe3, 0xe2, 0xdb, 0x47, 0xb9, 0xe6, 0x63, 0x5a }, + // 233 + { 0xf2, 0x1c, 0x33, 0xf4, 0x7b, 0xde, 0x40, 0xa2, 0xa1, 0x01, 0xc9, 0xcd, 0xe8, 0x02, 0x7a, 0xaf, 0x61, 0xa3, 0x13, 0x7d, 0xe2, 0x42, 0x2b, 0x30, 0x03, 0x5a, 0x04, 0xc2, 0x70, 0x89, 0x41, 0x83 }, + // 234 + { 0x9d, 0xb0, 0xef, 0x74, 0xe6, 0x6c, 0xbb, 0x84, 0x2e, 0xb0, 0xe0, 0x73, 0x43, 0xa0, 0x3c, 0x5c, 0x56, 0x7e, 0x37, 0x2b, 0x3f, 0x23, 0xb9, 0x43, 0xc7, 0x88, 0xa4, 0xf2, 0x50, 0xf6, 0x78, 0x91 }, + // 235 + { 0xab, 0x8d, 0x08, 0x65, 0x5f, 0xf1, 0xd3, 0xfe, 0x87, 0x58, 0xd5, 0x62, 0x23, 0x5f, 0xd2, 0x3e, 0x7c, 0xf9, 0xdc, 0xaa, 0xd6, 0x58, 0x87, 0x2a, 0x49, 0xe5, 0xd3, 0x18, 0x3b, 0x6c, 0xce, 0xbd }, + // 236 + { 0x6f, 0x27, 0xf7, 0x7e, 0x7b, 0xcf, 0x46, 0xa1, 0xe9, 0x63, 0xad, 0xe0, 0x30, 0x97, 0x33, 0x54, 0x30, 0x31, 0xdc, 0xcd, 0xd4, 0x7c, 0xaa, 0xc1, 0x74, 0xd7, 0xd2, 0x7c, 0xe8, 0x07, 0x7e, 0x8b }, + // 237 + { 0xe3, 0xcd, 0x54, 0xda, 0x7e, 0x44, 0x4c, 0xaa, 0x62, 0x07, 0x56, 0x95, 0x25, 0xa6, 0x70, 0xeb, 0xae, 0x12, 0x78, 0xde, 0x4e, 0x3f, 0xe2, 0x68, 0x4b, 0x3e, 0x33, 0xf5, 0xef, 0x90, 0xcc, 0x1b }, + // 238 + { 0xb2, 0xc3, 0xe3, 0x3a, 0x51, 0xd2, 0x2c, 0x4c, 0x08, 0xfc, 0x09, 0x89, 0xc8, 0x73, 0xc9, 0xcc, 0x41, 0x50, 0x57, 0x9b, 0x1e, 0x61, 0x63, 0xfa, 0x69, 0x4a, 0xd5, 0x1d, 0x53, 0xd7, 0x12, 0xdc }, + // 239 + { 0xbe, 0x7f, 0xda, 0x98, 0x3e, 0x13, 0x18, 0x9b, 0x4c, 0x77, 0xe0, 0xa8, 0x09, 0x20, 0xb6, 0xe0, 0xe0, 0xea, 0x80, 0xc3, 0xb8, 0x4d, 0xbe, 0x7e, 0x71, 0x17, 0xd2, 0x53, 0xf4, 0x81, 0x12, 0xf4 }, + // 240 + { 0xb6, 0x00, 0x8c, 0x28, 0xfa, 0xe0, 0x8a, 0xa4, 0x27, 0xe5, 0xbd, 0x3a, 0xad, 0x36, 0xf1, 0x00, 0x21, 0xf1, 0x6c, 0x77, 0xcf, 0xea, 0xbe, 0xd0, 0x7f, 0x97, 0xcc, 0x7d, 0xc1, 0xf1, 0x28, 0x4a }, + // 241 + { 0x6e, 0x4e, 0x67, 0x60, 0xc5, 0x38, 0xf2, 0xe9, 0x7b, 0x3a, 0xdb, 0xfb, 0xbc, 0xde, 0x57, 0xf8, 0x96, 0x6b, 0x7e, 0xa8, 0xfc, 0xb5, 0xbf, 0x7e, 0xfe, 0xc9, 0x13, 0xfd, 0x2a, 0x2b, 0x0c, 0x55 }, + // 242 + { 0x4a, 0xe5, 0x1f, 0xd1, 0x83, 0x4a, 0xa5, 0xbd, 0x9a, 0x6f, 0x7e, 0xc3, 0x9f, 0xc6, 0x63, 0x33, 0x8d, 0xc5, 0xd2, 0xe2, 0x07, 0x61, 0x56, 0x6d, 0x90, 0xcc, 0x68, 0xb1, 0xcb, 0x87, 0x5e, 0xd8 }, + // 243 + { 0xb6, 0x73, 0xaa, 0xd7, 0x5a, 0xb1, 0xfd, 0xb5, 0x40, 0x1a, 0xbf, 0xa1, 0xbf, 0x89, 0xf3, 0xad, 0xd2, 0xeb, 0xc4, 0x68, 0xdf, 0x36, 0x24, 0xa4, 0x78, 0xf4, 0xfe, 0x85, 0x9d, 0x8d, 0x55, 0xe2 }, + // 244 + { 0x13, 0xc9, 0x47, 0x1a, 0x98, 0x55, 0x91, 0x35, 0x39, 0x83, 0x66, 0x60, 0x39, 0x8d, 0xa0, 0xf3, 0xf9, 0x9a, 0xda, 0x08, 0x47, 0x9c, 0x69, 0xd1, 0xb7, 0xfc, 0xaa, 0x34, 0x61, 0xdd, 0x7e, 0x59 }, + // 245 + { 0x2c, 0x11, 0xf4, 0xa7, 0xf9, 0x9a, 0x1d, 0x23, 0xa5, 0x8b, 0xb6, 0x36, 0x35, 0x0f, 0xe8, 0x49, 0xf2, 0x9c, 0xba, 0xc1, 0xb2, 0xa1, 0x11, 0x2d, 0x9f, 0x1e, 0xd5, 0xbc, 0x5b, 0x31, 0x3c, 0xcd }, + // 246 + { 0xc7, 0xd3, 0xc0, 0x70, 0x6b, 0x11, 0xae, 0x74, 0x1c, 0x05, 0xa1, 0xef, 0x15, 0x0d, 0xd6, 0x5b, 0x54, 0x94, 0xd6, 0xd5, 0x4c, 0x9a, 0x86, 0xe2, 0x61, 0x78, 0x54, 0xe6, 0xae, 0xee, 0xbb, 0xd9 }, + // 247 + { 0x19, 0x4e, 0x10, 0xc9, 0x38, 0x93, 0xaf, 0xa0, 0x64, 0xc3, 0xac, 0x04, 0xc0, 0xdd, 0x80, 0x8d, 0x79, 0x1c, 0x3d, 0x4b, 0x75, 0x56, 0xe8, 0x9d, 0x8d, 0x9c, 0xb2, 0x25, 0xc4, 0xb3, 0x33, 0x39 }, + // 248 + { 0x6f, 0xc4, 0x98, 0x8b, 0x8f, 0x78, 0x54, 0x6b, 0x16, 0x88, 0x99, 0x18, 0x45, 0x90, 0x8f, 0x13, 0x4b, 0x6a, 0x48, 0x2e, 0x69, 0x94, 0xb3, 0xd4, 0x83, 0x17, 0xbf, 0x08, 0xdb, 0x29, 0x21, 0x85 }, + // 249 + { 0x56, 0x65, 0xbe, 0xb8, 0xb0, 0x95, 0x55, 0x25, 0x81, 0x3b, 0x59, 0x81, 0xcd, 0x14, 0x2e, 0xd4, 0xd0, 0x3f, 0xba, 0x38, 0xa6, 0xf3, 0xe5, 0xad, 0x26, 0x8e, 0x0c, 0xc2, 0x70, 0xd1, 0xcd, 0x11 }, + // 250 + { 0xb8, 0x83, 0xd6, 0x8f, 0x5f, 0xe5, 0x19, 0x36, 0x43, 0x1b, 0xa4, 0x25, 0x67, 0x38, 0x05, 0x3b, 0x1d, 0x04, 0x26, 0xd4, 0xcb, 0x64, 0xb1, 0x6e, 0x83, 0xba, 0xdc, 0x5e, 0x9f, 0xbe, 0x3b, 0x81 }, + // 251 + { 0x53, 0xe7, 0xb2, 0x7e, 0xa5, 0x9c, 0x2f, 0x6d, 0xbb, 0x50, 0x76, 0x9e, 0x43, 0x55, 0x4d, 0xf3, 0x5a, 0xf8, 0x9f, 0x48, 0x22, 0xd0, 0x46, 0x6b, 0x00, 0x7d, 0xd6, 0xf6, 0xde, 0xaf, 0xff, 0x02 }, + // 252 + { 0x1f, 0x1a, 0x02, 0x29, 0xd4, 0x64, 0x0f, 0x01, 0x90, 0x15, 0x88, 0xd9, 0xde, 0xc2, 0x2d, 0x13, 0xfc, 0x3e, 0xb3, 0x4a, 0x61, 0xb3, 0x29, 0x38, 0xef, 0xbf, 0x53, 0x34, 0xb2, 0x80, 0x0a, 0xfa }, + // 253 + { 0xc2, 0xb4, 0x05, 0xaf, 0xa0, 0xfa, 0x66, 0x68, 0x85, 0x2a, 0xee, 0x4d, 0x88, 0x04, 0x08, 0x53, 0xfa, 0xb8, 0x00, 0xe7, 0x2b, 0x57, 0x58, 0x14, 0x18, 0xe5, 0x50, 0x6f, 0x21, 0x4c, 0x7d, 0x1f }, + // 254 + { 0xc0, 0x8a, 0xa1, 0xc2, 0x86, 0xd7, 0x09, 0xfd, 0xc7, 0x47, 0x37, 0x44, 0x97, 0x71, 0x88, 0xc8, 0x95, 0xba, 0x01, 0x10, 0x14, 0x24, 0x7e, 0x4e, 0xfa, 0x8d, 0x07, 0xe7, 0x8f, 0xec, 0x69, 0x5c }, + // 255 + { 0xf0, 0x3f, 0x57, 0x89, 0xd3, 0x33, 0x6b, 0x80, 0xd0, 0x02, 0xd5, 0x9f, 0xdf, 0x91, 0x8b, 0xdb, 0x77, 0x5b, 0x00, 0x95, 0x6e, 0xd5, 0x52, 0x8e, 0x86, 0xaa, 0x99, 0x4a, 0xcb, 0x38, 0xfe, 0x2d }, +}; +static const uint8_t secret_KATs[256][32] = { + // 0 + { 0xc2, 0x46, 0x11, 0x1b, 0x7f, 0xd2, 0xad, 0x01, 0x78, 0xfa, 0x71, 0xa3, 0x2d, 0xd6, 0xc3, 0x85, 0x3f, 0x0b, 0xb5, 0x27, 0xbb, 0x7e, 0x7f, 0x43, 0x11, 0x31, 0xe5, 0xea, 0xd8, 0x44, 0x98, 0x09 }, + // 1 + { 0xea, 0x7d, 0x63, 0x3f, 0xd6, 0x97, 0x31, 0xbd, 0x1c, 0xff, 0x95, 0x42, 0xe9, 0x11, 0xdf, 0x43, 0xa2, 0x2a, 0x32, 0x8c, 0x59, 0x25, 0x73, 0x23, 0xd0, 0x62, 0x9a, 0xa2, 0xb7, 0x25, 0x61, 0x85 }, + // 2 + { 0x2b, 0x12, 0x3b, 0x56, 0x40, 0x76, 0xc9, 0xbd, 0xfe, 0xd5, 0x16, 0x21, 0x38, 0xe3, 0xd5, 0xfa, 0x9e, 0x7b, 0x79, 0xc6, 0xd2, 0xfc, 0x1c, 0xf0, 0x14, 0x31, 0x1e, 0xbb, 0xd3, 0x8d, 0x32, 0x32 }, + // 3 + { 0x0d, 0x93, 0xb5, 0xb5, 0x26, 0xc7, 0x2b, 0xd9, 0x8e, 0xc1, 0x20, 0xe9, 0xd8, 0x50, 0x18, 0x00, 0x86, 0x7a, 0x60, 0x98, 0x5a, 0x91, 0xeb, 0x53, 0x92, 0x02, 0x5b, 0x3e, 0x57, 0xe4, 0x30, 0x8b }, + // 4 + { 0x24, 0x6c, 0x1e, 0x43, 0x3f, 0xfc, 0x88, 0x36, 0x05, 0x6d, 0x86, 0xa5, 0xef, 0xa4, 0x83, 0x10, 0x7a, 0x5f, 0xb7, 0x6b, 0x15, 0xcd, 0xdd, 0x41, 0x75, 0x49, 0x8e, 0xb5, 0x52, 0x8f, 0x09, 0x7a }, + // 5 + { 0x9a, 0x3d, 0xbe, 0xcc, 0x68, 0x23, 0x3c, 0x75, 0x33, 0x7f, 0x13, 0xe7, 0xce, 0x2a, 0x67, 0x61, 0x8d, 0xcd, 0x9e, 0x12, 0xf6, 0x17, 0xaa, 0xb1, 0xae, 0x0d, 0xaa, 0xac, 0xa7, 0xdf, 0x16, 0xaa }, + // 6 + { 0xd9, 0x97, 0xf9, 0x97, 0x8a, 0x46, 0x52, 0x67, 0xc5, 0xef, 0x9f, 0xad, 0x38, 0x62, 0xca, 0x5a, 0x40, 0x59, 0xa6, 0xd7, 0xf1, 0x41, 0x92, 0x34, 0xa8, 0xf3, 0xd2, 0x2b, 0xa2, 0xaa, 0x96, 0x79 }, + // 7 + { 0x1d, 0xcc, 0xda, 0x90, 0x6c, 0xa9, 0x1e, 0xcd, 0xbb, 0x17, 0x55, 0x70, 0xd9, 0xcb, 0xe3, 0x4c, 0x32, 0xd5, 0x68, 0xb0, 0x98, 0x23, 0x25, 0xb9, 0x54, 0xa0, 0x2a, 0x77, 0x37, 0x13, 0xd6, 0x9a }, + // 8 + { 0x92, 0x33, 0x0f, 0x59, 0x33, 0x77, 0xd1, 0x7a, 0x93, 0x4f, 0x14, 0x7e, 0x7e, 0x7d, 0xff, 0x42, 0xf4, 0x23, 0xf7, 0x6c, 0xc3, 0x3c, 0xd0, 0xb6, 0x93, 0xe6, 0xa7, 0x8d, 0xea, 0x25, 0xb3, 0x67 }, + // 9 + { 0xa3, 0xc6, 0xe0, 0x9c, 0x34, 0xd7, 0x15, 0x50, 0x22, 0xd9, 0xd8, 0xc7, 0xe8, 0x83, 0x81, 0x08, 0xf5, 0xd8, 0xf8, 0xc9, 0x48, 0xc3, 0xa3, 0x91, 0xe9, 0x75, 0x3f, 0x17, 0xf8, 0x37, 0x32, 0x0a }, + // 10 + { 0x35, 0x50, 0xd0, 0xbe, 0x66, 0xa1, 0x17, 0x48, 0x7a, 0x6b, 0x09, 0x2e, 0x85, 0x29, 0xce, 0x85, 0x4c, 0x03, 0x83, 0xc5, 0xfb, 0xc5, 0xcc, 0x8f, 0x25, 0x9b, 0xc7, 0x35, 0x24, 0xde, 0x8e, 0x95 }, + // 11 + { 0x39, 0xe9, 0xfc, 0x92, 0x42, 0x33, 0x42, 0xa4, 0xf9, 0xbf, 0x07, 0xbb, 0x19, 0x4c, 0x5f, 0x82, 0x60, 0x6c, 0xe0, 0x54, 0x05, 0x2e, 0xf9, 0xff, 0xc2, 0x66, 0xe1, 0x7e, 0xf2, 0xbd, 0x7f, 0x7f }, + // 12 + { 0x13, 0xc0, 0xc0, 0x24, 0xf3, 0x58, 0x81, 0xc8, 0x38, 0xa3, 0x30, 0x4f, 0x9d, 0x5c, 0x84, 0xce, 0x29, 0x95, 0xfa, 0xe3, 0x78, 0x86, 0x47, 0x33, 0xd1, 0x2e, 0x36, 0x95, 0x9f, 0xa4, 0x19, 0xcd }, + // 13 + { 0xc0, 0xf4, 0x98, 0x5d, 0xd9, 0x82, 0xae, 0xde, 0xb4, 0xcb, 0x4e, 0x1c, 0x8e, 0x21, 0x6d, 0x30, 0xd2, 0x46, 0xdf, 0x5d, 0xd3, 0x46, 0xe3, 0xb9, 0xbe, 0xaa, 0x39, 0x99, 0xd9, 0x1c, 0xa9, 0xaf }, + // 14 + { 0xc7, 0x42, 0x6a, 0x25, 0x9f, 0xf5, 0x0c, 0x43, 0xba, 0x85, 0xe8, 0x49, 0x1d, 0x99, 0x7c, 0xc2, 0xbf, 0x69, 0x79, 0xe9, 0x45, 0xd5, 0x6d, 0xcb, 0xf8, 0x5f, 0x57, 0xfe, 0x23, 0x48, 0x97, 0x9e }, + // 15 + { 0xa0, 0x23, 0x5d, 0x3c, 0xc3, 0x69, 0x6f, 0x61, 0xc0, 0xf0, 0xea, 0xe1, 0xe9, 0x74, 0x05, 0xcb, 0xd8, 0x41, 0x01, 0x31, 0xe7, 0x35, 0xac, 0xf4, 0x8f, 0xf2, 0x40, 0x3b, 0x16, 0xa5, 0x37, 0xaa }, + // 16 + { 0xb4, 0xfc, 0xec, 0x34, 0x89, 0x1f, 0x0a, 0xd4, 0xf2, 0xce, 0x4d, 0xd3, 0xc2, 0x5e, 0x09, 0x1f, 0xe9, 0x80, 0xd0, 0xfc, 0xb1, 0x00, 0xcd, 0xdf, 0xc8, 0x63, 0x4c, 0xa1, 0x6f, 0x9b, 0x15, 0x5f }, + // 17 + { 0x7d, 0xb4, 0xe5, 0xfa, 0x52, 0xa6, 0xd9, 0x19, 0xa8, 0xd5, 0x18, 0x0e, 0xfb, 0xea, 0xe4, 0x9c, 0xf4, 0xd7, 0xbb, 0xad, 0xd3, 0x79, 0xa7, 0x0d, 0x26, 0xc9, 0x4f, 0xc9, 0xff, 0xc6, 0xd2, 0xd3 }, + // 18 + { 0xa6, 0x09, 0xee, 0x20, 0xcb, 0xda, 0xe8, 0x5d, 0xc3, 0x7c, 0x14, 0xca, 0x68, 0x15, 0x88, 0x8e, 0x97, 0xe6, 0x91, 0xb5, 0x5b, 0x2f, 0xe9, 0x5f, 0x61, 0x4d, 0x89, 0x24, 0x75, 0x94, 0xb6, 0xb9 }, + // 19 + { 0x56, 0x5e, 0xeb, 0xd2, 0xda, 0x80, 0x11, 0x43, 0x6d, 0xfd, 0xf3, 0xa4, 0x92, 0xa7, 0x76, 0xdf, 0x67, 0xef, 0x6f, 0x4c, 0xf5, 0xfa, 0x0c, 0xf4, 0x63, 0xee, 0x2e, 0x56, 0x4d, 0x71, 0x41, 0xa4 }, + // 20 + { 0x5f, 0x28, 0x99, 0x4b, 0xb2, 0x30, 0x63, 0xe6, 0x48, 0x1b, 0xf4, 0x09, 0x64, 0x77, 0x6a, 0x03, 0x0d, 0x74, 0xe8, 0xc9, 0xb0, 0x91, 0xc3, 0xd9, 0x3a, 0x06, 0xd3, 0x74, 0x00, 0x95, 0x79, 0x86 }, + // 21 + { 0xc9, 0x94, 0x5f, 0x3f, 0x70, 0xee, 0x67, 0x5f, 0x1c, 0x9a, 0xc6, 0x93, 0x7e, 0x21, 0x0a, 0x50, 0x30, 0xaa, 0x56, 0x76, 0xdd, 0x72, 0x12, 0xe9, 0x57, 0x02, 0x19, 0x01, 0x8a, 0x85, 0xd5, 0x67 }, + // 22 + { 0xca, 0xd4, 0xa9, 0x7f, 0xff, 0xcb, 0x34, 0x4d, 0xfa, 0x85, 0x95, 0x23, 0x0e, 0x12, 0xc2, 0x04, 0x66, 0x63, 0x38, 0x7b, 0xa9, 0x83, 0xd5, 0x60, 0x52, 0x16, 0xe7, 0xf4, 0xff, 0xc6, 0xe9, 0xeb }, + // 23 + { 0xb1, 0xa4, 0x50, 0xec, 0xee, 0xe0, 0x71, 0x04, 0xd8, 0x2b, 0x16, 0x29, 0x6a, 0xf5, 0xa3, 0x99, 0x8f, 0xd7, 0x33, 0x76, 0x8e, 0x63, 0xa6, 0x80, 0x69, 0x60, 0xa1, 0x8c, 0x6c, 0x52, 0x81, 0xc1 }, + // 24 + { 0x06, 0x17, 0xc8, 0x44, 0xcd, 0x2c, 0xa8, 0xe7, 0x5d, 0xfb, 0xcc, 0x79, 0x26, 0x52, 0xfc, 0x73, 0x4e, 0x7e, 0x9c, 0x5e, 0x3d, 0x45, 0x65, 0xea, 0x2d, 0xe9, 0x83, 0xcb, 0x15, 0xe5, 0x95, 0x73 }, + // 25 + { 0xac, 0xef, 0x33, 0xd2, 0x25, 0x0e, 0xfc, 0x67, 0x28, 0x29, 0x7a, 0xda, 0xba, 0xa1, 0x1f, 0xc1, 0xb8, 0xab, 0x16, 0x4c, 0x3a, 0xa6, 0xa7, 0x9b, 0xd4, 0xe5, 0x3a, 0x1a, 0x0a, 0x89, 0x2a, 0xb9 }, + // 26 + { 0x16, 0x20, 0x23, 0x53, 0xf1, 0xc9, 0x17, 0xac, 0x67, 0x69, 0x73, 0xdc, 0x20, 0x55, 0x1d, 0xe2, 0x80, 0x9f, 0x4e, 0x63, 0xe3, 0x2a, 0x98, 0xf9, 0xe5, 0xa7, 0x90, 0xde, 0x79, 0x64, 0x9c, 0xef }, + // 27 + { 0x96, 0xab, 0xbc, 0x8b, 0x77, 0xfa, 0x09, 0x07, 0x69, 0xcc, 0x11, 0x75, 0x86, 0xd9, 0x9e, 0xdc, 0x6d, 0xeb, 0xc1, 0x12, 0x21, 0x73, 0x4d, 0x61, 0xfe, 0x87, 0xdc, 0xf2, 0x30, 0xf3, 0x93, 0xef }, + // 28 + { 0xc6, 0x18, 0x1d, 0xe0, 0x78, 0x94, 0xa3, 0xba, 0x37, 0x19, 0x1f, 0x7d, 0xd9, 0xb3, 0x17, 0xf7, 0xc0, 0xbe, 0x5b, 0xb3, 0x95, 0xab, 0x34, 0xb8, 0xb1, 0x53, 0xfa, 0xd8, 0x08, 0xc6, 0x8b, 0x3f }, + // 29 + { 0x9a, 0xfa, 0x47, 0x90, 0xd6, 0x75, 0x6f, 0x5a, 0x48, 0xa0, 0xd5, 0x7f, 0x20, 0x1a, 0x18, 0x44, 0xd6, 0x8b, 0x31, 0xa6, 0x44, 0xa2, 0x5b, 0x9f, 0x18, 0x53, 0xea, 0xa9, 0xd8, 0xb3, 0xcb, 0x73 }, + // 30 + { 0x78, 0x3f, 0x50, 0x46, 0x64, 0x8c, 0x0f, 0x5b, 0x8b, 0xc1, 0xfe, 0x09, 0xa8, 0xa0, 0x11, 0x71, 0xd4, 0xad, 0x60, 0x40, 0x69, 0x70, 0xf0, 0xd8, 0xbd, 0x29, 0x7d, 0x36, 0x0c, 0xfb, 0xe7, 0x40 }, + // 31 + { 0x32, 0x5a, 0x19, 0x6e, 0xc9, 0x08, 0xa9, 0x4b, 0x54, 0x10, 0x52, 0x3c, 0x03, 0x0d, 0xf7, 0xb2, 0xed, 0x5b, 0x69, 0x3d, 0xb3, 0x8f, 0x32, 0x6c, 0x82, 0xd7, 0x00, 0x01, 0xeb, 0x14, 0xd0, 0x41 }, + // 32 + { 0x64, 0xdb, 0x7e, 0xf8, 0x98, 0x4a, 0xf4, 0x77, 0x0e, 0xaf, 0xc2, 0x01, 0xfc, 0x7b, 0xc6, 0x11, 0x06, 0xe5, 0x09, 0xc7, 0xd8, 0xc7, 0x64, 0x8b, 0x13, 0x76, 0x1a, 0x15, 0xd9, 0x73, 0x07, 0xc7 }, + // 33 + { 0xbc, 0x20, 0x71, 0x1f, 0x33, 0x8c, 0x9a, 0xb8, 0x0d, 0x3e, 0x80, 0x36, 0x6b, 0x1b, 0x96, 0xf0, 0xd2, 0x72, 0x27, 0x03, 0xc3, 0x47, 0xe1, 0xbc, 0x6a, 0x0a, 0xeb, 0xc3, 0x5b, 0x5d, 0xda, 0x05 }, + // 34 + { 0x4a, 0xc6, 0xf4, 0x2f, 0xf0, 0x92, 0xfd, 0x36, 0xa9, 0x23, 0x95, 0xa4, 0xf8, 0x8a, 0xd0, 0xb2, 0xcd, 0xd6, 0x0c, 0x94, 0x9d, 0x15, 0x27, 0xa3, 0x12, 0x28, 0xc2, 0x06, 0x85, 0xdb, 0x71, 0x70 }, + // 35 + { 0x3d, 0x7e, 0x4a, 0xc9, 0x98, 0x0d, 0x55, 0x6e, 0x31, 0x18, 0x78, 0x0e, 0xc9, 0xcc, 0x69, 0x96, 0xa1, 0xc4, 0xbd, 0x84, 0x43, 0x8b, 0xea, 0x42, 0x2b, 0x05, 0x1e, 0x8f, 0xda, 0xd3, 0x13, 0xc4 }, + // 36 + { 0x36, 0x87, 0x8f, 0xd5, 0x4d, 0x00, 0x43, 0x24, 0x1a, 0xfc, 0xa0, 0x88, 0x85, 0xe5, 0xf0, 0x89, 0x23, 0x92, 0xed, 0x26, 0xaf, 0xf1, 0xe9, 0x90, 0x13, 0x25, 0x75, 0xc0, 0x54, 0x3b, 0x2b, 0x5d }, + // 37 + { 0xb2, 0x53, 0xa4, 0x7f, 0x48, 0x01, 0xdd, 0x13, 0xd8, 0x09, 0xd0, 0xd4, 0x40, 0x34, 0xf0, 0x02, 0xac, 0xd1, 0x5a, 0x51, 0x97, 0xe7, 0x0c, 0x38, 0xc0, 0x51, 0xe6, 0xc3, 0xbb, 0xd7, 0xab, 0xa5 }, + // 38 + { 0x62, 0x29, 0x7a, 0x40, 0x4a, 0x20, 0x15, 0x80, 0x6f, 0xa5, 0x2e, 0xd4, 0x16, 0xe9, 0x5a, 0x50, 0xbf, 0x78, 0x2e, 0x39, 0x09, 0x5c, 0x2e, 0x0d, 0x6c, 0x1c, 0xb9, 0x28, 0x23, 0xdb, 0xf9, 0x0c }, + // 39 + { 0xfb, 0x2e, 0x9d, 0x06, 0xf2, 0xe7, 0x04, 0x4f, 0xf8, 0xd4, 0x6e, 0x78, 0xe2, 0xdc, 0x86, 0xee, 0x38, 0xc0, 0xd5, 0x51, 0x48, 0x03, 0xbb, 0x00, 0xfe, 0x9c, 0xc0, 0x82, 0x55, 0xcf, 0x90, 0x8f }, + // 40 + { 0x78, 0xab, 0x0d, 0x99, 0x08, 0x57, 0xec, 0xad, 0x91, 0xb9, 0x34, 0x5f, 0xe3, 0x1a, 0x74, 0x3b, 0x16, 0x26, 0x3f, 0xab, 0x7f, 0x16, 0x83, 0xfb, 0xbc, 0xae, 0x7a, 0x03, 0xc6, 0x46, 0xd3, 0x83 }, + // 41 + { 0x18, 0xfd, 0x18, 0xa5, 0xf4, 0xda, 0x12, 0xb5, 0x01, 0x6c, 0xed, 0xd2, 0x81, 0x66, 0xf9, 0x58, 0x16, 0x64, 0x02, 0x83, 0xdc, 0xa0, 0x08, 0x6e, 0x86, 0x61, 0x31, 0x2e, 0x18, 0xd4, 0xed, 0xa2 }, + // 42 + { 0xa4, 0xa2, 0x49, 0x3b, 0x02, 0x9e, 0x2f, 0x07, 0x2b, 0xa5, 0xc1, 0x2e, 0xf3, 0x1a, 0x30, 0xe1, 0xbd, 0xb3, 0x83, 0x5b, 0xf1, 0x98, 0x3f, 0xd9, 0x5d, 0x80, 0x5c, 0xa3, 0xd0, 0xf1, 0x5b, 0x54 }, + // 43 + { 0x5e, 0x31, 0x5c, 0x0d, 0x8a, 0x87, 0x55, 0x76, 0xfb, 0xe7, 0x6a, 0x9d, 0xf1, 0x5a, 0x54, 0x0b, 0xde, 0x24, 0x08, 0x9b, 0x41, 0x87, 0x58, 0xfd, 0x5a, 0x15, 0xb8, 0x3f, 0x3d, 0x87, 0x7d, 0xa9 }, + // 44 + { 0x07, 0xc8, 0x70, 0x54, 0xcb, 0x5c, 0x60, 0x13, 0x41, 0x3f, 0xe7, 0x2d, 0xfc, 0x96, 0xfc, 0x54, 0x6b, 0x2a, 0x8f, 0xba, 0x01, 0x85, 0x55, 0x6d, 0x56, 0xd6, 0xad, 0xb4, 0x14, 0x35, 0x19, 0x76 }, + // 45 + { 0x32, 0x0e, 0xcc, 0x42, 0x8f, 0xc7, 0xb3, 0xb5, 0x6c, 0x1f, 0x9f, 0x7b, 0xb2, 0x7a, 0x15, 0x0c, 0xd4, 0x04, 0x64, 0xd4, 0x3f, 0x77, 0x49, 0x06, 0x2c, 0x7e, 0xcc, 0x29, 0x2e, 0xaf, 0x5c, 0x3d }, + // 46 + { 0xcb, 0xed, 0xbd, 0xd2, 0x04, 0xb7, 0x9e, 0x23, 0x36, 0x88, 0xaf, 0x8f, 0x7e, 0xa8, 0x64, 0xd2, 0x31, 0x0a, 0x6c, 0x25, 0xcc, 0x07, 0xb9, 0x6d, 0xb3, 0x21, 0xc3, 0x24, 0xa7, 0x89, 0x78, 0x20 }, + // 47 + { 0x34, 0x33, 0x98, 0x96, 0x32, 0x42, 0x65, 0xf4, 0xfc, 0xf0, 0x5a, 0x4f, 0x46, 0xb8, 0x3f, 0x81, 0xb6, 0x81, 0xcd, 0xa2, 0xf4, 0xbc, 0x3e, 0xf7, 0x90, 0xcc, 0x00, 0x7e, 0x39, 0x3a, 0x05, 0xce }, + // 48 + { 0x8d, 0x8f, 0xaa, 0x4d, 0xd2, 0xe3, 0x83, 0x1f, 0x1d, 0x86, 0x58, 0xe7, 0xc9, 0x77, 0x2e, 0x61, 0x44, 0x3c, 0x0d, 0xde, 0x83, 0x34, 0xae, 0xba, 0xab, 0x1d, 0xd7, 0x44, 0xe5, 0xbb, 0xe1, 0x97 }, + // 49 + { 0xe3, 0x93, 0xa9, 0xd5, 0xbf, 0xd1, 0x7f, 0x71, 0x0a, 0x08, 0x5b, 0x66, 0x5f, 0x39, 0x0c, 0x75, 0xd2, 0xc5, 0x3c, 0xe6, 0xa8, 0xbe, 0xfa, 0x75, 0x82, 0xf0, 0xbd, 0xbc, 0x33, 0x9f, 0x4e, 0x19 }, + // 50 + { 0x3c, 0xb1, 0xaf, 0xca, 0x1b, 0x82, 0xe9, 0xe0, 0x38, 0x3a, 0x55, 0x2b, 0x18, 0x2f, 0xdf, 0x73, 0x27, 0xa1, 0xf8, 0x1b, 0x11, 0x57, 0x20, 0x85, 0xb5, 0x22, 0x09, 0x75, 0x67, 0x9a, 0x60, 0xb3 }, + // 51 + { 0xa6, 0xae, 0x0f, 0x6b, 0x88, 0xc9, 0x6d, 0x39, 0xce, 0x38, 0x46, 0xfa, 0x49, 0xb1, 0xfb, 0x86, 0xb5, 0x81, 0xba, 0xae, 0x82, 0xfa, 0x5f, 0x07, 0x69, 0xd0, 0x6a, 0x9c, 0x87, 0x40, 0xc7, 0x14 }, + // 52 + { 0xd7, 0x50, 0xa2, 0x22, 0x98, 0xd7, 0x4e, 0xdf, 0xe7, 0xb9, 0x79, 0x93, 0x19, 0x4d, 0x77, 0xc2, 0x7c, 0x9c, 0x08, 0xb3, 0xb4, 0x72, 0xef, 0xec, 0xa4, 0xf8, 0xa9, 0xa4, 0xad, 0xf9, 0xce, 0xe5 }, + // 53 + { 0x9b, 0xc8, 0xdb, 0x4a, 0x2a, 0x43, 0x22, 0xfe, 0x50, 0x52, 0xf5, 0x07, 0x55, 0xd2, 0xce, 0x18, 0x30, 0xef, 0xbd, 0x9a, 0xdc, 0xba, 0x37, 0xe2, 0x68, 0x0a, 0x37, 0x4e, 0x7f, 0xf2, 0xfb, 0x4e }, + // 54 + { 0x68, 0x88, 0x0c, 0x43, 0x40, 0xea, 0x93, 0xbd, 0x3e, 0x7d, 0x67, 0x33, 0x9d, 0x61, 0xfe, 0xa4, 0x82, 0x0d, 0x9a, 0x46, 0xa9, 0x4e, 0xc0, 0x40, 0x65, 0x48, 0x91, 0xa0, 0x98, 0x17, 0x1b, 0x95 }, + // 55 + { 0x8a, 0xaf, 0x20, 0xa8, 0x6a, 0x94, 0xda, 0xc0, 0x54, 0x74, 0x1f, 0x68, 0x1f, 0x60, 0xee, 0x47, 0xe3, 0xda, 0x8f, 0x67, 0x23, 0xea, 0x07, 0x4f, 0x51, 0x59, 0x46, 0xa6, 0x89, 0x31, 0x4d, 0x4d }, + // 56 + { 0x7b, 0xe0, 0xd2, 0x2f, 0xd6, 0xbc, 0xcd, 0x54, 0x10, 0xd4, 0xcb, 0xc9, 0xeb, 0x55, 0x4f, 0x73, 0xcd, 0xbd, 0x83, 0xd1, 0x53, 0xfb, 0x2b, 0x82, 0x38, 0x3f, 0x38, 0x49, 0xfe, 0xdd, 0x3f, 0x07 }, + // 57 + { 0x56, 0xcd, 0x01, 0x32, 0x3c, 0x7e, 0x07, 0x3c, 0x40, 0xcb, 0x7e, 0x8a, 0x80, 0xf1, 0xdf, 0x15, 0xdf, 0x79, 0xc8, 0x59, 0xc1, 0x91, 0x37, 0xb3, 0xf0, 0xc8, 0xa4, 0x01, 0xe2, 0x6a, 0x97, 0x91 }, + // 58 + { 0x17, 0x2e, 0x6e, 0x3b, 0xc8, 0x1e, 0x5f, 0x15, 0xdd, 0x56, 0xa8, 0xc1, 0x2c, 0xed, 0xb7, 0xd3, 0x8e, 0x1e, 0xbb, 0x84, 0x32, 0xef, 0xee, 0x0f, 0x31, 0xba, 0xbb, 0xc8, 0xc6, 0xc1, 0xcc, 0xad }, + // 59 + { 0xbf, 0xca, 0xef, 0x58, 0x3f, 0xfe, 0x4d, 0x1f, 0x12, 0x84, 0xda, 0xb9, 0x93, 0xcb, 0xfd, 0x23, 0xba, 0x55, 0x9c, 0x9c, 0x9b, 0x4c, 0xf7, 0x01, 0xde, 0x05, 0xf6, 0x60, 0xaa, 0xef, 0xb9, 0x03 }, + // 60 + { 0xf1, 0xaf, 0x7b, 0x0a, 0xd9, 0xfa, 0x3b, 0x04, 0xb5, 0x09, 0x56, 0x2e, 0x59, 0x6b, 0x47, 0x73, 0x72, 0x09, 0xf5, 0x72, 0x9d, 0x89, 0xfa, 0xa9, 0xe9, 0x9f, 0xbd, 0xe1, 0x73, 0xd6, 0xaa, 0xb7 }, + // 61 + { 0x8b, 0xf0, 0xeb, 0xa2, 0xf2, 0x58, 0x0e, 0xfc, 0xaa, 0xdc, 0x2b, 0x02, 0xc0, 0x3a, 0x95, 0x7e, 0x03, 0x19, 0x1a, 0x82, 0xed, 0x68, 0x0c, 0xce, 0x87, 0x5e, 0x57, 0x5a, 0xa9, 0x24, 0x34, 0x60 }, + // 62 + { 0x16, 0xcd, 0xc9, 0x38, 0x54, 0x7e, 0x66, 0x1f, 0x9d, 0xde, 0xb5, 0xea, 0x29, 0x16, 0x86, 0x9c, 0x12, 0xc2, 0x04, 0xe7, 0x70, 0x87, 0x77, 0x90, 0x8b, 0x17, 0x23, 0x33, 0x72, 0x3a, 0x10, 0x38 }, + // 63 + { 0xc8, 0xb5, 0xca, 0x98, 0x82, 0x11, 0x71, 0x05, 0xe2, 0x40, 0x41, 0xa3, 0xd5, 0xce, 0x90, 0xa6, 0xb4, 0x5c, 0xe4, 0xdc, 0x5d, 0x1a, 0x5e, 0x60, 0x70, 0xb4, 0x75, 0x89, 0xa9, 0x5e, 0x88, 0x8a }, + // 64 + { 0xbd, 0x37, 0x91, 0xa7, 0x43, 0xee, 0x8e, 0x71, 0x66, 0x7f, 0xa7, 0xa1, 0x7f, 0x9a, 0xde, 0x86, 0x45, 0xd8, 0x8e, 0xd1, 0xa2, 0x45, 0x31, 0x17, 0xc9, 0x48, 0x69, 0x40, 0xa8, 0x28, 0x48, 0x67 }, + // 65 + { 0xdc, 0x08, 0x75, 0xd9, 0xb1, 0xb8, 0xe8, 0xa3, 0x9a, 0x94, 0x00, 0xf3, 0x07, 0x8a, 0x34, 0xdd, 0xa1, 0xcb, 0xf5, 0x06, 0x3e, 0x14, 0xf6, 0x05, 0xaf, 0xa1, 0xb7, 0x3b, 0x19, 0xc2, 0x19, 0x68 }, + // 66 + { 0x09, 0x5b, 0x03, 0xf6, 0x90, 0x1b, 0x78, 0x2a, 0x01, 0x1c, 0x92, 0x63, 0xfc, 0x5b, 0x48, 0x9b, 0x5b, 0x16, 0xba, 0xc7, 0x73, 0xe6, 0x8c, 0x80, 0x78, 0x3d, 0x12, 0x86, 0x25, 0xb7, 0xd6, 0x3b }, + // 67 + { 0xa1, 0x77, 0x95, 0x5d, 0x67, 0x98, 0x26, 0x12, 0xae, 0x67, 0xc8, 0x7a, 0xe0, 0x8f, 0x42, 0x6a, 0x23, 0xef, 0x69, 0x26, 0x8e, 0xb1, 0x29, 0x44, 0x83, 0xdd, 0xa0, 0x64, 0xe6, 0x9c, 0xda, 0x18 }, + // 68 + { 0xb3, 0x81, 0xae, 0xf4, 0x11, 0xf8, 0x22, 0x25, 0xa8, 0xa9, 0x6f, 0xf1, 0xdf, 0x49, 0xf2, 0xa5, 0xd0, 0x84, 0xfd, 0xe5, 0x8b, 0x87, 0x7f, 0x04, 0x4e, 0xf4, 0x69, 0x6f, 0x90, 0xac, 0x0c, 0x9e }, + // 69 + { 0x2f, 0x86, 0x5e, 0xd6, 0x08, 0xd4, 0x27, 0x18, 0xfb, 0x9f, 0xe6, 0x8e, 0xaa, 0x13, 0x68, 0x28, 0x3b, 0x62, 0x2c, 0x1a, 0xeb, 0x5b, 0x03, 0x78, 0x16, 0x7a, 0x87, 0xa1, 0xd0, 0x73, 0x3d, 0xf7 }, + // 70 + { 0x35, 0x3b, 0xe9, 0x81, 0xf8, 0xc7, 0x7a, 0x2a, 0x78, 0x91, 0xef, 0xad, 0x34, 0xf7, 0x93, 0x91, 0xd1, 0x96, 0x3b, 0xfb, 0xb0, 0x37, 0x56, 0x0f, 0x51, 0x0b, 0x74, 0xea, 0x7e, 0xc3, 0x12, 0xcd }, + // 71 + { 0x6f, 0x17, 0x2f, 0x10, 0x31, 0x9d, 0xa2, 0xeb, 0x79, 0xd9, 0x89, 0xc6, 0x16, 0x9a, 0x69, 0xfd, 0x24, 0xbd, 0xd0, 0x03, 0x25, 0x90, 0x8f, 0x16, 0x83, 0x0f, 0x2f, 0x25, 0x23, 0x2f, 0xcc, 0x0e }, + // 72 + { 0x17, 0x89, 0x4b, 0x34, 0x63, 0x88, 0x1a, 0xfa, 0x90, 0x85, 0x21, 0x74, 0xfe, 0x41, 0x1d, 0x3b, 0x10, 0xf6, 0xf1, 0x6a, 0x15, 0x3a, 0x85, 0x35, 0x0d, 0x94, 0xe7, 0xf8, 0xb9, 0x9d, 0xd0, 0xe6 }, + // 73 + { 0xfa, 0xe5, 0x95, 0x85, 0x72, 0x0a, 0x79, 0x83, 0x5b, 0x25, 0x52, 0x66, 0x47, 0xcb, 0x9c, 0x31, 0x5b, 0x62, 0xe8, 0x1d, 0x75, 0x62, 0xf9, 0xfd, 0xc8, 0x2a, 0x77, 0x92, 0xad, 0x35, 0x6d, 0x6c }, + // 74 + { 0x14, 0x39, 0x47, 0x13, 0x4d, 0x14, 0x01, 0x85, 0x39, 0xaf, 0xde, 0xf3, 0x3e, 0x51, 0xc4, 0x19, 0x6b, 0x29, 0x5f, 0xa7, 0xda, 0x46, 0x0a, 0x81, 0xa6, 0x31, 0xd8, 0x29, 0xdc, 0xd7, 0x86, 0xca }, + // 75 + { 0x4e, 0x99, 0xa0, 0x4b, 0x08, 0xaa, 0x14, 0x60, 0x2f, 0x39, 0xdf, 0x6c, 0x6f, 0x68, 0xa2, 0x95, 0xee, 0x5c, 0x84, 0x51, 0x7b, 0x06, 0x76, 0xdc, 0xda, 0xa7, 0x3e, 0x0b, 0x17, 0xaf, 0x34, 0x4d }, + // 76 + { 0xa7, 0x0e, 0x23, 0xb3, 0x00, 0x6d, 0x50, 0x2f, 0x0a, 0x3f, 0x4b, 0xcb, 0x93, 0x30, 0xc4, 0x9b, 0x7e, 0xb3, 0x05, 0x2a, 0xae, 0x31, 0x9d, 0xcf, 0xad, 0x92, 0x22, 0xa9, 0xd5, 0xc7, 0x94, 0xad }, + // 77 + { 0x4e, 0x45, 0x02, 0xfb, 0xf8, 0x95, 0x67, 0x23, 0x82, 0x58, 0x79, 0x52, 0x08, 0x2e, 0x5d, 0xb8, 0x8b, 0x17, 0x62, 0xc3, 0x9d, 0x18, 0xd0, 0xec, 0xfc, 0x46, 0x1d, 0xbb, 0x64, 0x13, 0xba, 0xfd }, + // 78 + { 0x74, 0xd5, 0x5f, 0x5f, 0xe6, 0xc5, 0x60, 0x7e, 0x74, 0xbb, 0x7e, 0xbb, 0xdc, 0x47, 0x94, 0xe6, 0x30, 0x31, 0x80, 0x55, 0x14, 0x6c, 0x2b, 0x71, 0xc7, 0x53, 0x4c, 0x5f, 0x76, 0x7e, 0x3f, 0x76 }, + // 79 + { 0xa0, 0x09, 0x98, 0xf4, 0x5e, 0xf1, 0x0e, 0xc8, 0x9f, 0x84, 0xa6, 0xbe, 0xfe, 0x15, 0xba, 0x5a, 0x2f, 0x40, 0x35, 0xcf, 0x13, 0x1f, 0x6c, 0xbb, 0xbb, 0xd2, 0xdb, 0x53, 0xf2, 0x95, 0x13, 0x9a }, + // 80 + { 0x24, 0x94, 0xf9, 0xfb, 0xd5, 0x6f, 0x25, 0x1d, 0x5b, 0xff, 0xf1, 0x07, 0xed, 0x9f, 0x37, 0x08, 0x60, 0xd9, 0x8d, 0x70, 0x7b, 0xfd, 0xab, 0x92, 0xfc, 0x15, 0x67, 0x3f, 0xd1, 0x4c, 0x0a, 0x94 }, + // 81 + { 0x94, 0xca, 0xc7, 0xbc, 0x48, 0x18, 0x29, 0xf8, 0x7d, 0x47, 0xd3, 0x01, 0x4b, 0x21, 0xce, 0xed, 0xbb, 0x58, 0x1d, 0x74, 0x68, 0x87, 0x94, 0xf6, 0x12, 0x93, 0x1a, 0x0d, 0xd9, 0xd5, 0x22, 0xc9 }, + // 82 + { 0xb4, 0x3e, 0xa1, 0xf6, 0xd7, 0x76, 0xaf, 0x3b, 0x84, 0xe3, 0x81, 0x6e, 0x29, 0x26, 0x44, 0xcf, 0x2b, 0xdd, 0x37, 0x0d, 0x21, 0x41, 0x27, 0x82, 0x98, 0x81, 0x55, 0x70, 0x1f, 0x35, 0x09, 0x98 }, + // 83 + { 0xa2, 0x20, 0xe3, 0xdd, 0xcb, 0xed, 0xec, 0xf3, 0xb5, 0xf0, 0xe7, 0x97, 0x85, 0x9e, 0x14, 0x21, 0xd1, 0xde, 0x9b, 0x51, 0xea, 0xb4, 0xd1, 0x5c, 0xbd, 0xd4, 0xd7, 0xe4, 0xe7, 0x18, 0xef, 0x5b }, + // 84 + { 0x67, 0xb9, 0xc9, 0x28, 0x22, 0x9a, 0x1c, 0x57, 0x29, 0x7e, 0x81, 0xcb, 0xb8, 0x7b, 0x0c, 0xe0, 0x1e, 0x2d, 0xe7, 0xa1, 0x86, 0x92, 0xc1, 0x94, 0x8d, 0x9f, 0x12, 0xed, 0xbe, 0x3e, 0xb2, 0xc5 }, + // 85 + { 0x45, 0xc6, 0xdf, 0xf3, 0xd2, 0x17, 0x5a, 0x48, 0xce, 0x25, 0x85, 0x7d, 0x29, 0x7e, 0x9c, 0xc0, 0x39, 0x8a, 0x23, 0xcb, 0x4b, 0x8e, 0x81, 0x15, 0x4b, 0x6a, 0x59, 0xcb, 0x62, 0x5c, 0x64, 0xa9 }, + // 86 + { 0xdb, 0x3c, 0x05, 0x9f, 0xef, 0x5f, 0x16, 0x61, 0x2f, 0x73, 0xfe, 0x9e, 0xe1, 0xb7, 0x49, 0x74, 0x9d, 0x93, 0xf5, 0x50, 0x9f, 0xd5, 0xc4, 0xfc, 0xbb, 0xc8, 0x8c, 0x1f, 0x74, 0x41, 0x9d, 0x79 }, + // 87 + { 0x76, 0xe3, 0xf9, 0x6a, 0x0d, 0x6d, 0x95, 0x79, 0xf6, 0xf8, 0x34, 0x6e, 0x55, 0xcd, 0x2d, 0x84, 0x26, 0xc8, 0xc4, 0xfb, 0x83, 0x1e, 0x3b, 0xd5, 0x51, 0x44, 0x11, 0x41, 0x36, 0xd4, 0x4c, 0x93 }, + // 88 + { 0x79, 0xfa, 0x5f, 0xf0, 0x47, 0x87, 0xda, 0xef, 0x23, 0x89, 0x46, 0x08, 0x90, 0xba, 0xfd, 0x2a, 0x62, 0x13, 0x36, 0xc6, 0xc8, 0x38, 0xd4, 0xc8, 0x7f, 0xdd, 0x91, 0x7a, 0x20, 0x32, 0x2c, 0x16 }, + // 89 + { 0xda, 0xfe, 0x80, 0x2f, 0x02, 0x95, 0x2d, 0xca, 0x70, 0x4a, 0x85, 0x51, 0x64, 0xfa, 0x7e, 0xfd, 0xb5, 0xcb, 0xce, 0x48, 0xe9, 0xe0, 0xb4, 0x53, 0xd0, 0xb0, 0x18, 0xc5, 0x5d, 0x3a, 0x3f, 0xe2 }, + // 90 + { 0x34, 0x48, 0xa3, 0x40, 0xba, 0x2a, 0x13, 0x57, 0xcc, 0xe2, 0xdf, 0x8d, 0xb0, 0x0f, 0x60, 0x1c, 0x70, 0x00, 0xaf, 0xc1, 0xb9, 0x99, 0xc9, 0xc5, 0xab, 0x23, 0xf2, 0x86, 0x24, 0xf6, 0xe7, 0xfe }, + // 91 + { 0x0e, 0x21, 0x66, 0xcc, 0x61, 0x82, 0x08, 0xf4, 0x70, 0x6c, 0x02, 0xcf, 0x73, 0x09, 0xab, 0x2f, 0xd5, 0x97, 0xbf, 0x42, 0x01, 0x91, 0xab, 0xb2, 0x67, 0x4d, 0xd5, 0xd3, 0xaf, 0xc9, 0x14, 0x30 }, + // 92 + { 0x77, 0x7e, 0xa2, 0xac, 0xc9, 0x7b, 0x5a, 0x08, 0xa5, 0x06, 0x69, 0x8f, 0xdd, 0xf2, 0xfb, 0x42, 0xda, 0x37, 0xd5, 0x03, 0x62, 0x1e, 0x5e, 0x90, 0xee, 0xf3, 0xed, 0x62, 0x7a, 0xb5, 0x2e, 0x50 }, + // 93 + { 0x4c, 0x2e, 0x2a, 0x25, 0xb7, 0x17, 0xcc, 0xfd, 0xda, 0xf1, 0xe6, 0x0e, 0xb1, 0x87, 0x45, 0x1b, 0xf7, 0x67, 0xe6, 0x7c, 0xe4, 0x6c, 0x59, 0xf0, 0x64, 0x98, 0x8b, 0xd4, 0xf7, 0x6d, 0x46, 0x6b }, + // 94 + { 0xda, 0x42, 0xbd, 0x90, 0xad, 0xb6, 0x5e, 0x14, 0x3d, 0x48, 0x09, 0x65, 0xdb, 0x72, 0x38, 0x46, 0x35, 0x06, 0xc6, 0xd1, 0x42, 0xf5, 0xca, 0xa3, 0x13, 0x6b, 0xad, 0x11, 0xb3, 0x6f, 0x5e, 0x9f }, + // 95 + { 0x45, 0xc6, 0xb8, 0x9a, 0x0e, 0x4b, 0x8a, 0xcb, 0x18, 0x69, 0x57, 0x43, 0x90, 0x30, 0x54, 0x54, 0x1d, 0x4f, 0xfe, 0x13, 0x31, 0x97, 0x94, 0x45, 0xf0, 0xff, 0xc8, 0xe9, 0x52, 0x2f, 0x25, 0x0c }, + // 96 + { 0x4c, 0x85, 0x95, 0xe0, 0x0b, 0x57, 0xa5, 0x9e, 0x57, 0xd8, 0x85, 0x15, 0xe8, 0xcf, 0xe5, 0x52, 0xab, 0x7d, 0xd7, 0xe8, 0x71, 0x9c, 0x1b, 0x71, 0x1b, 0x8f, 0xa3, 0x92, 0xcc, 0x36, 0x37, 0x90 }, + // 97 + { 0xc3, 0xdc, 0xdb, 0x87, 0xad, 0xee, 0xc1, 0x5b, 0xd1, 0x90, 0xa8, 0x8b, 0x21, 0xf6, 0x2f, 0xe5, 0x2e, 0xbf, 0x18, 0xed, 0xc0, 0x6e, 0x5a, 0xe9, 0xb6, 0x02, 0xf9, 0xbe, 0x56, 0x49, 0x20, 0x10 }, + // 98 + { 0xed, 0x58, 0xcb, 0x0a, 0x82, 0xc2, 0xb3, 0xf1, 0xc1, 0xff, 0xf0, 0x9a, 0x22, 0xa1, 0x2b, 0x74, 0x80, 0xe6, 0x1f, 0xac, 0x5a, 0xa3, 0x90, 0xeb, 0x33, 0xdd, 0x73, 0x63, 0x12, 0x9d, 0x09, 0xdc }, + // 99 + { 0xcf, 0x7d, 0xdb, 0x1b, 0x76, 0xe7, 0xa6, 0x27, 0xf9, 0x5e, 0x32, 0x59, 0x74, 0x16, 0x06, 0xb2, 0xfb, 0x9d, 0x88, 0x72, 0x0d, 0x6e, 0xf0, 0xe5, 0xe5, 0xad, 0xbf, 0x26, 0xe5, 0xde, 0x88, 0xc5 }, + // 100 + { 0x3e, 0xef, 0xd3, 0x0f, 0xc5, 0x20, 0xa2, 0xd0, 0xae, 0x28, 0xca, 0x37, 0x14, 0xfb, 0x5e, 0xfd, 0x62, 0xc2, 0xec, 0xea, 0x47, 0x59, 0xfb, 0x4c, 0x25, 0xbf, 0x28, 0x2b, 0xd4, 0x2f, 0x60, 0x65 }, + // 101 + { 0x88, 0x52, 0x26, 0x4d, 0x4d, 0x34, 0x95, 0xca, 0xd7, 0x83, 0x30, 0xb3, 0x4e, 0x4e, 0xfa, 0x1a, 0x5d, 0x28, 0x22, 0xb5, 0x8b, 0x45, 0x0f, 0x47, 0x50, 0xb8, 0x90, 0xbf, 0xe5, 0x83, 0xbe, 0x41 }, + // 102 + { 0x09, 0x6f, 0x8d, 0x55, 0x5d, 0x5e, 0x3a, 0x7f, 0x07, 0x3e, 0x96, 0xa1, 0x34, 0xb4, 0xc8, 0xde, 0x08, 0x71, 0x30, 0x03, 0x73, 0x5d, 0x11, 0x90, 0x74, 0x51, 0x06, 0x78, 0x44, 0x5d, 0xb9, 0x28 }, + // 103 + { 0x97, 0x27, 0xe4, 0x65, 0xc3, 0x47, 0x4f, 0xfa, 0x85, 0x02, 0x99, 0xf8, 0x18, 0x05, 0x8d, 0x96, 0xc4, 0xf5, 0xd0, 0x56, 0x5c, 0x4d, 0xf0, 0x66, 0xba, 0x60, 0x19, 0x78, 0x54, 0xa1, 0x7b, 0x96 }, + // 104 + { 0x58, 0x7b, 0x5b, 0x7c, 0xaa, 0x11, 0x68, 0xbd, 0xe4, 0x74, 0x0a, 0x2d, 0xec, 0x64, 0x20, 0xe3, 0x9e, 0xa7, 0x60, 0x5c, 0x02, 0xcd, 0x76, 0x68, 0xe4, 0x6a, 0x56, 0x92, 0xcb, 0x25, 0xfc, 0xbe }, + // 105 + { 0xda, 0x78, 0x04, 0x16, 0x5a, 0x91, 0x5e, 0x9e, 0xf5, 0x4b, 0xd6, 0x59, 0x32, 0xf5, 0xea, 0xba, 0xf9, 0x77, 0x5c, 0xe0, 0xa3, 0x3e, 0xf4, 0xaa, 0x12, 0xa5, 0xf4, 0xf3, 0x80, 0x2d, 0xac, 0x4a }, + // 106 + { 0x80, 0xda, 0x72, 0x59, 0x5b, 0x0b, 0xc0, 0x13, 0x62, 0x11, 0xab, 0x44, 0xf4, 0xa3, 0xeb, 0xff, 0xac, 0xf6, 0x9c, 0x5d, 0x75, 0xe2, 0x6c, 0xde, 0xf8, 0x6a, 0x06, 0xb5, 0x24, 0xf8, 0xec, 0xd8 }, + // 107 + { 0xa3, 0x2c, 0xf1, 0x24, 0xe0, 0x1a, 0x55, 0x97, 0x5c, 0x95, 0x30, 0x6c, 0xdd, 0x5a, 0xf6, 0x44, 0x16, 0x50, 0x9a, 0x14, 0x18, 0xba, 0x27, 0x95, 0x9c, 0xdb, 0x5a, 0xd5, 0xb7, 0xf7, 0x51, 0x3d }, + // 108 + { 0x5b, 0x69, 0xf8, 0x14, 0xb7, 0xe6, 0x4a, 0xf1, 0xaf, 0x79, 0xa8, 0xe5, 0x1a, 0x4f, 0x0f, 0x72, 0x90, 0x0a, 0xb2, 0x60, 0xa2, 0xaf, 0xda, 0x69, 0xa9, 0x98, 0x32, 0x61, 0x38, 0xce, 0xb0, 0x23 }, + // 109 + { 0xf5, 0x30, 0x48, 0x01, 0x51, 0x4f, 0x7b, 0x60, 0x7e, 0x9d, 0x91, 0x60, 0x88, 0x84, 0xb0, 0x48, 0x31, 0x7e, 0x37, 0xe0, 0x5b, 0xe9, 0xde, 0x01, 0x17, 0x91, 0x50, 0x65, 0x66, 0x72, 0xb4, 0x6d }, + // 110 + { 0xc8, 0x0f, 0x51, 0x38, 0xc2, 0x1c, 0x99, 0x45, 0x96, 0xf9, 0x60, 0xa8, 0x25, 0x67, 0x2a, 0x69, 0x20, 0x75, 0x1f, 0x85, 0xb8, 0xd5, 0xd5, 0x4b, 0x74, 0x4c, 0x07, 0x0a, 0x16, 0x16, 0xb8, 0xf4 }, + // 111 + { 0xb4, 0xd1, 0x09, 0x9d, 0xcc, 0x5b, 0x62, 0x96, 0xad, 0x9e, 0x20, 0x34, 0x6c, 0x25, 0x78, 0xaf, 0x80, 0x70, 0xb3, 0x90, 0x1d, 0xda, 0x78, 0x4c, 0x9d, 0xf7, 0xdb, 0xb7, 0xe6, 0xcb, 0x15, 0x64 }, + // 112 + { 0x00, 0xc8, 0x89, 0x72, 0xb7, 0x30, 0xf5, 0xdd, 0xaf, 0x3a, 0x78, 0x0e, 0x9d, 0x57, 0x8a, 0xf1, 0x0a, 0xcc, 0x14, 0x48, 0xc8, 0xb2, 0x59, 0x84, 0x8a, 0xf9, 0x37, 0xa2, 0x08, 0x4a, 0x53, 0x27 }, + // 113 + { 0xc8, 0x04, 0x8c, 0xaf, 0x2b, 0xa6, 0x01, 0x91, 0x9e, 0xe4, 0x42, 0x01, 0x87, 0x0b, 0xbf, 0xec, 0x2b, 0x18, 0xfa, 0xf3, 0xb4, 0x03, 0x73, 0x29, 0x96, 0x82, 0xcf, 0xae, 0xf6, 0x90, 0xee, 0x9e }, + // 114 + { 0x44, 0x2d, 0xc9, 0x0e, 0x4e, 0xe3, 0x68, 0x07, 0x95, 0x1e, 0x4e, 0x5e, 0x66, 0x80, 0xab, 0x35, 0x43, 0x54, 0x53, 0x33, 0x0a, 0x04, 0xdc, 0x22, 0x3c, 0xbb, 0x03, 0x6c, 0x13, 0x27, 0x68, 0xd7 }, + // 115 + { 0x68, 0xdd, 0x32, 0xa3, 0x6a, 0xb1, 0x95, 0x91, 0x52, 0xb0, 0xb1, 0x90, 0x78, 0xca, 0x5d, 0x63, 0x7d, 0x4d, 0xe9, 0xa0, 0xa9, 0x7f, 0x2c, 0xeb, 0x9c, 0x05, 0xcd, 0xa0, 0xe3, 0xe5, 0xd5, 0x7f }, + // 116 + { 0x9c, 0xd4, 0xf4, 0x15, 0x01, 0xdc, 0x7a, 0xe4, 0x26, 0x13, 0x39, 0xa9, 0x72, 0x83, 0x5a, 0x80, 0xa4, 0x08, 0xf1, 0x60, 0x5c, 0x77, 0x70, 0xba, 0xfe, 0x04, 0xc5, 0xdf, 0x13, 0x92, 0x27, 0x3d }, + // 117 + { 0x62, 0x82, 0xbf, 0xb6, 0x95, 0x87, 0xeb, 0xde, 0x24, 0x7e, 0x10, 0x58, 0x27, 0x74, 0xea, 0x30, 0x23, 0x8b, 0x2f, 0xd5, 0x85, 0x44, 0xa0, 0xb3, 0xf4, 0xac, 0x86, 0x18, 0x03, 0x8f, 0x8b, 0x5f }, + // 118 + { 0xbb, 0x34, 0x47, 0x38, 0x29, 0x24, 0x46, 0xe2, 0xba, 0x2f, 0x62, 0x03, 0x13, 0x29, 0xc3, 0xec, 0xce, 0x3b, 0xc6, 0x08, 0xca, 0xeb, 0xc8, 0xac, 0x13, 0x64, 0x1f, 0xe7, 0x02, 0x25, 0x33, 0x58 }, + // 119 + { 0x2e, 0xd0, 0x98, 0xff, 0x9e, 0xd5, 0x34, 0x8e, 0xeb, 0xbb, 0x17, 0x33, 0xd5, 0x0a, 0x0e, 0xeb, 0x32, 0x77, 0xa3, 0x0a, 0xce, 0x12, 0x00, 0x6e, 0x94, 0x7b, 0x40, 0x58, 0xb1, 0x7b, 0x73, 0x4f }, + // 120 + { 0xc9, 0x5a, 0xe5, 0xdd, 0x38, 0x1c, 0xa8, 0x6b, 0xec, 0xb3, 0x87, 0x8a, 0xbf, 0xfc, 0xec, 0x4c, 0xfc, 0xd9, 0xf3, 0xa9, 0xed, 0xb5, 0x23, 0xba, 0xfc, 0xea, 0xd7, 0xb6, 0xcc, 0x9f, 0xc2, 0xcf }, + // 121 + { 0xa9, 0xf8, 0xe1, 0x65, 0xc1, 0xd0, 0x63, 0x90, 0x8b, 0x9f, 0xe4, 0xae, 0x37, 0x45, 0x0c, 0xba, 0x5f, 0x3c, 0x82, 0x61, 0x61, 0x80, 0x52, 0x93, 0x78, 0x66, 0xbf, 0x7e, 0x0e, 0xda, 0x55, 0xed }, + // 122 + { 0x1a, 0x55, 0x54, 0x55, 0x4e, 0x31, 0x4c, 0x95, 0x36, 0xec, 0x11, 0x2c, 0xb4, 0xd2, 0x66, 0x78, 0xe7, 0x4a, 0xdd, 0xd0, 0xbf, 0x91, 0xe1, 0x3b, 0xba, 0x8d, 0x92, 0x90, 0x8c, 0x62, 0x16, 0x1c }, + // 123 + { 0xe8, 0x36, 0xfb, 0x83, 0xd4, 0x80, 0x83, 0xd5, 0xc1, 0x3f, 0x13, 0x2b, 0x03, 0x37, 0x12, 0x4e, 0x83, 0x9f, 0xf1, 0xfd, 0x38, 0xde, 0xc0, 0x9d, 0xce, 0x2f, 0xba, 0xdc, 0x52, 0x93, 0x9b, 0x35 }, + // 124 + { 0x04, 0x68, 0xed, 0x5f, 0xe3, 0x58, 0x17, 0x35, 0x77, 0x4a, 0x96, 0x2c, 0x27, 0xc2, 0x26, 0x7f, 0xb8, 0xee, 0x59, 0xa9, 0x5d, 0x00, 0xc0, 0x8c, 0x92, 0x4b, 0x52, 0xa4, 0xc7, 0x68, 0x80, 0x50 }, + // 125 + { 0x03, 0xc9, 0xfc, 0xce, 0x9c, 0x7c, 0x07, 0x6a, 0x84, 0xfd, 0xeb, 0x51, 0x3c, 0x02, 0xf4, 0x88, 0x13, 0xeb, 0x06, 0x6e, 0x08, 0xc6, 0x0f, 0x8f, 0xca, 0xf6, 0x2f, 0x38, 0xfb, 0xf3, 0x92, 0x68 }, + // 126 + { 0xf8, 0x47, 0xa7, 0x26, 0x89, 0x06, 0xd8, 0x6b, 0x4d, 0xbb, 0x29, 0xfb, 0xcd, 0x2e, 0x30, 0x1a, 0xbb, 0xf1, 0x38, 0x3e, 0x54, 0xbd, 0xf6, 0x04, 0x82, 0x77, 0x9f, 0x0e, 0xec, 0x93, 0xae, 0x01 }, + // 127 + { 0xa6, 0xd5, 0x1c, 0x7e, 0xd9, 0x58, 0x2c, 0xfe, 0x77, 0x5d, 0x7f, 0x24, 0x2a, 0x7b, 0x47, 0x09, 0x07, 0x12, 0xd6, 0x83, 0x08, 0xa2, 0x5d, 0x1e, 0xda, 0x51, 0xa2, 0x30, 0x41, 0xce, 0x33, 0x30 }, + // 128 + { 0x78, 0x01, 0x38, 0xa5, 0xbd, 0x9e, 0xd6, 0x7e, 0x12, 0x46, 0x4b, 0x52, 0xa7, 0xfb, 0xea, 0xe5, 0xf0, 0xcc, 0xce, 0xba, 0x83, 0xcb, 0xb9, 0xb0, 0xc0, 0xcf, 0x28, 0xba, 0x1b, 0xde, 0x47, 0x43 }, + // 129 + { 0xe1, 0x1a, 0x06, 0x8e, 0x7b, 0x9d, 0xd1, 0xa1, 0xb7, 0xea, 0x91, 0x12, 0xf8, 0x90, 0x89, 0x23, 0x50, 0xec, 0xe6, 0xd9, 0xbe, 0x35, 0xfe, 0x30, 0x5e, 0x74, 0x00, 0x1a, 0x19, 0xd1, 0xa4, 0x81 }, + // 130 + { 0xb5, 0x98, 0x40, 0x7d, 0x03, 0xb1, 0x23, 0x47, 0x44, 0x86, 0x06, 0x16, 0xb1, 0xbe, 0xa4, 0x9b, 0x89, 0x11, 0xb3, 0x5c, 0x16, 0xac, 0x69, 0x17, 0x39, 0x35, 0xca, 0x8a, 0xda, 0x26, 0x90, 0x88 }, + // 131 + { 0xf4, 0x9c, 0x65, 0x98, 0xc9, 0xbc, 0x44, 0xd5, 0xd3, 0xb5, 0x18, 0x4d, 0xeb, 0x99, 0xfd, 0xee, 0x0e, 0x86, 0x78, 0x2d, 0x80, 0x0b, 0x4e, 0x69, 0x05, 0x71, 0x4c, 0x51, 0x15, 0x24, 0x26, 0xec }, + // 132 + { 0x0c, 0xcf, 0xcf, 0x4a, 0x6b, 0xe2, 0x03, 0x1b, 0xf6, 0x04, 0xd4, 0x92, 0x95, 0x20, 0xd6, 0xf7, 0x51, 0xc6, 0x44, 0x4c, 0x05, 0xdd, 0x2b, 0x68, 0x9e, 0x66, 0x01, 0x47, 0xed, 0xc4, 0xa7, 0x0d }, + // 133 + { 0x8b, 0x91, 0xbc, 0x5f, 0xae, 0xc9, 0x02, 0x81, 0xde, 0x18, 0x54, 0xcb, 0x58, 0x86, 0xdd, 0x30, 0x72, 0x15, 0x97, 0xac, 0x38, 0x91, 0x0e, 0xec, 0x1d, 0x20, 0x49, 0x41, 0xb2, 0x7e, 0xa7, 0xef }, + // 134 + { 0x5d, 0xff, 0xb0, 0xdf, 0x96, 0xc5, 0x3e, 0xd1, 0xb9, 0x40, 0x04, 0xe2, 0xa6, 0xb5, 0x4f, 0x09, 0x00, 0x9b, 0xa2, 0x93, 0x03, 0xa7, 0xe8, 0x36, 0x72, 0x2c, 0xc9, 0x74, 0x70, 0x2b, 0xc0, 0xed }, + // 135 + { 0xc5, 0x57, 0x03, 0xe3, 0xf4, 0xc2, 0xef, 0x3b, 0xfe, 0x97, 0x85, 0xe1, 0x47, 0xe1, 0x13, 0x98, 0x3b, 0x25, 0x15, 0x1b, 0x97, 0x86, 0x9a, 0x0f, 0xd5, 0x52, 0xfa, 0xb9, 0x90, 0x5d, 0x1d, 0x46 }, + // 136 + { 0xb2, 0x36, 0x80, 0x94, 0xb0, 0xf2, 0x20, 0xff, 0x7d, 0xd4, 0x4d, 0xf3, 0xd1, 0x50, 0x03, 0xcf, 0x36, 0x79, 0xb1, 0x73, 0x43, 0xeb, 0x7f, 0x0e, 0x21, 0x6c, 0x55, 0xc9, 0x26, 0xbe, 0x91, 0x6f }, + // 137 + { 0x5d, 0x54, 0x4b, 0x39, 0xc5, 0xfe, 0x1f, 0x38, 0xcd, 0xac, 0xc8, 0xaf, 0xc8, 0x25, 0x23, 0x35, 0x71, 0x58, 0x04, 0x72, 0x86, 0xcf, 0xeb, 0xca, 0x2a, 0x77, 0xac, 0x8f, 0x1f, 0xf7, 0x86, 0x9c }, + // 138 + { 0xf3, 0x03, 0x24, 0x9d, 0xfc, 0xdd, 0x40, 0x55, 0xa8, 0x77, 0x22, 0xbe, 0x63, 0xda, 0x44, 0x6e, 0xff, 0x0d, 0x1e, 0xa3, 0x7e, 0x6f, 0xbe, 0x68, 0x84, 0x0b, 0xc0, 0x67, 0x4e, 0x80, 0x3b, 0xf2 }, + // 139 + { 0x3f, 0xf7, 0xa7, 0xb0, 0x41, 0x2f, 0xa6, 0xee, 0x33, 0xd0, 0x64, 0x27, 0xf7, 0x7d, 0xb2, 0xd1, 0xf7, 0x60, 0xb6, 0xe8, 0xe7, 0x73, 0x88, 0x64, 0xa5, 0x52, 0x04, 0xfc, 0xd4, 0x19, 0x71, 0x22 }, + // 140 + { 0x30, 0x08, 0x27, 0x60, 0xae, 0x65, 0x90, 0x74, 0xb6, 0x42, 0x40, 0xf4, 0xcb, 0x75, 0x33, 0xf3, 0x9d, 0x62, 0x79, 0x81, 0x09, 0xfd, 0xcf, 0xdd, 0x0d, 0xe5, 0xbc, 0xdd, 0x42, 0x8d, 0xc7, 0xf6 }, + // 141 + { 0xa3, 0x4b, 0xb2, 0x62, 0x84, 0x36, 0x51, 0xb2, 0x9d, 0xe0, 0xff, 0xd3, 0x96, 0xb7, 0x81, 0x52, 0x00, 0x28, 0x5c, 0x91, 0x40, 0x48, 0x69, 0xf5, 0x5f, 0x89, 0x8c, 0xe2, 0x91, 0x23, 0xf3, 0xf9 }, + // 142 + { 0x15, 0x23, 0x64, 0x72, 0x47, 0xaa, 0x95, 0x48, 0x54, 0xc6, 0x93, 0x84, 0x96, 0xa8, 0x97, 0x6f, 0x2a, 0xe7, 0x0b, 0x70, 0xc6, 0x33, 0x77, 0x6a, 0x07, 0x51, 0x23, 0x24, 0x4d, 0x01, 0x53, 0xff }, + // 143 + { 0x54, 0x63, 0x03, 0x6b, 0x1a, 0xd8, 0x85, 0x19, 0x72, 0x2e, 0x63, 0x65, 0x98, 0x4e, 0x30, 0xa3, 0xb7, 0x58, 0xfe, 0x18, 0x98, 0x08, 0xd6, 0x7b, 0xed, 0xd8, 0xc4, 0xc4, 0xc9, 0x8f, 0x23, 0x7a }, + // 144 + { 0x60, 0x09, 0x8e, 0xd2, 0xa3, 0x10, 0x8a, 0xcd, 0x5b, 0xaa, 0x0e, 0x91, 0xb3, 0x18, 0xea, 0x08, 0x0f, 0x28, 0x26, 0x2f, 0xce, 0xfb, 0x5a, 0x36, 0x3f, 0x00, 0xe0, 0x23, 0xb2, 0xc9, 0x6e, 0x95 }, + // 145 + { 0x3e, 0x71, 0xfc, 0xbf, 0x19, 0xd9, 0xab, 0x2a, 0x6a, 0xf9, 0xe4, 0xcc, 0xdb, 0x1c, 0x5f, 0xdd, 0xe5, 0x19, 0x2d, 0x6a, 0xc9, 0xd1, 0x5e, 0x2d, 0x62, 0xad, 0x98, 0xca, 0x8c, 0x29, 0x13, 0x10 }, + // 146 + { 0x7f, 0x0a, 0x34, 0xda, 0xe7, 0x17, 0xcb, 0x8a, 0xb1, 0x69, 0xb9, 0xf0, 0x7e, 0xea, 0x05, 0x2a, 0x4a, 0x78, 0xe6, 0xc2, 0x60, 0x4d, 0x8b, 0x8d, 0xaf, 0x88, 0x9a, 0x5d, 0x64, 0x42, 0x8a, 0x1d }, + // 147 + { 0x16, 0xaa, 0xa8, 0x4d, 0x80, 0xe0, 0x5e, 0x60, 0xec, 0x08, 0x6d, 0x39, 0x8e, 0xb8, 0x5c, 0x24, 0x55, 0x4c, 0xac, 0x8d, 0x18, 0x6a, 0x5d, 0xcc, 0x98, 0xef, 0xe6, 0x77, 0x2f, 0xc7, 0x3a, 0x7a }, + // 148 + { 0x46, 0x6c, 0xfc, 0x50, 0x85, 0x6b, 0xbd, 0xd8, 0xb8, 0x65, 0xec, 0xd0, 0xcc, 0x49, 0x3e, 0x97, 0x5c, 0xd6, 0x39, 0x74, 0x6a, 0xe3, 0x14, 0x87, 0x8e, 0x84, 0x31, 0xa0, 0x72, 0x27, 0x67, 0x5a }, + // 149 + { 0xfa, 0x14, 0xaf, 0x2f, 0xc8, 0x74, 0xea, 0x85, 0xe7, 0x54, 0xee, 0x0d, 0xb0, 0x59, 0x0c, 0x61, 0xc2, 0xa5, 0x1a, 0xe0, 0x9f, 0xde, 0x55, 0xa9, 0x9b, 0xe4, 0x1a, 0x88, 0x3b, 0x18, 0x6d, 0x68 }, + // 150 + { 0xfb, 0xa2, 0x63, 0x2a, 0xe8, 0x5d, 0xf4, 0xf0, 0xa3, 0x7e, 0xb0, 0x5c, 0xeb, 0xf0, 0x20, 0xad, 0x9d, 0x8e, 0x17, 0x2b, 0x4d, 0x01, 0xaf, 0xea, 0xaf, 0xc6, 0xcc, 0x65, 0x42, 0x25, 0xef, 0x2f }, + // 151 + { 0x05, 0xb9, 0x29, 0x91, 0xd4, 0x95, 0xb0, 0xea, 0x99, 0xf0, 0x29, 0xa2, 0xc6, 0xbf, 0x2a, 0x2a, 0x38, 0x47, 0x79, 0xd5, 0x10, 0xf3, 0x4a, 0xd8, 0x32, 0x15, 0x32, 0x04, 0x1e, 0xef, 0x49, 0x01 }, + // 152 + { 0xf9, 0x5f, 0x06, 0xe3, 0x92, 0x6f, 0xb6, 0x52, 0x35, 0xf2, 0xdf, 0xbc, 0x2d, 0x7b, 0x2c, 0xae, 0x37, 0x4c, 0x33, 0x00, 0x7a, 0xf3, 0xa6, 0xf3, 0x0a, 0xd9, 0xb9, 0x59, 0xf6, 0x0b, 0xa5, 0x9c }, + // 153 + { 0x41, 0xe5, 0xcc, 0x0f, 0x82, 0x70, 0x2f, 0xa8, 0xc0, 0x72, 0xb7, 0xf5, 0xfe, 0x45, 0xa1, 0x7b, 0xae, 0x17, 0x63, 0x12, 0xee, 0x83, 0x1d, 0xbe, 0x24, 0x69, 0xa2, 0x3e, 0x16, 0xa2, 0x2d, 0xe0 }, + // 154 + { 0xfe, 0xc5, 0x29, 0x21, 0x63, 0x7b, 0x16, 0x81, 0xb9, 0x09, 0x5d, 0x0e, 0xa5, 0xa7, 0x51, 0x9b, 0x11, 0xf8, 0x71, 0x81, 0xb5, 0x9e, 0x0c, 0x03, 0xa0, 0xd1, 0x98, 0x0a, 0x97, 0xb7, 0x1e, 0xef }, + // 155 + { 0x1f, 0xcb, 0x5c, 0xbd, 0x45, 0xc1, 0xd7, 0xea, 0x77, 0x5d, 0x0d, 0xf9, 0x3d, 0x2d, 0xf2, 0xe8, 0x43, 0x35, 0x56, 0x3c, 0x9a, 0x5c, 0x42, 0x17, 0x2f, 0x17, 0x89, 0xde, 0x02, 0x53, 0x2e, 0xb9 }, + // 156 + { 0xdb, 0x14, 0x4d, 0xd9, 0x9b, 0xdb, 0x52, 0x3b, 0xcc, 0xf0, 0x3e, 0x19, 0xb0, 0x8b, 0x3c, 0x18, 0xa1, 0xe7, 0x5f, 0x44, 0x45, 0xda, 0x7b, 0xeb, 0x19, 0xde, 0x29, 0xaa, 0x78, 0xa8, 0x40, 0xcb }, + // 157 + { 0x94, 0x57, 0x65, 0x8b, 0x6d, 0xaf, 0x3f, 0x0c, 0xf8, 0x31, 0x66, 0x0f, 0xfb, 0x49, 0x85, 0x13, 0xa7, 0x70, 0x61, 0x80, 0x6a, 0xfe, 0x18, 0x7e, 0x59, 0xdf, 0x9d, 0x0c, 0x46, 0xc6, 0x73, 0xcd }, + // 158 + { 0xa0, 0xc2, 0x22, 0x51, 0x09, 0x52, 0xaa, 0x1d, 0x5c, 0x2e, 0x05, 0xb9, 0x8c, 0x24, 0xa9, 0x40, 0x4f, 0x57, 0xc7, 0xf5, 0xab, 0x24, 0xbd, 0x50, 0xf9, 0x2d, 0x1b, 0xd8, 0x7b, 0x47, 0x7e, 0xf6 }, + // 159 + { 0x6d, 0xd0, 0xba, 0xde, 0x12, 0x9a, 0x01, 0x01, 0xb5, 0x7f, 0x11, 0xa3, 0x9e, 0x59, 0x29, 0x96, 0x4e, 0xd8, 0x64, 0x15, 0x86, 0xbb, 0x81, 0xfb, 0x8c, 0x37, 0x63, 0x8c, 0x6f, 0x0d, 0x94, 0x0c }, + // 160 + { 0x27, 0x52, 0x31, 0x20, 0x50, 0x27, 0x8d, 0xdd, 0x74, 0xe8, 0x6c, 0x7d, 0xf7, 0x0e, 0xd1, 0x12, 0x3d, 0x89, 0x9f, 0x2d, 0x2e, 0xbe, 0x03, 0x45, 0x20, 0x10, 0xc4, 0x45, 0x90, 0xf9, 0xc9, 0x60 }, + // 161 + { 0xbf, 0x7e, 0xc7, 0xdf, 0xf4, 0xa6, 0x6e, 0x96, 0xf4, 0x55, 0xb7, 0x08, 0x2a, 0x41, 0xfb, 0x58, 0xae, 0x29, 0xa9, 0x06, 0x99, 0xdf, 0x02, 0x8e, 0x2a, 0x4f, 0x36, 0xb5, 0xeb, 0x9a, 0xa4, 0xbf }, + // 162 + { 0xc8, 0xad, 0x0c, 0xa3, 0xf5, 0x9a, 0x57, 0x32, 0xf7, 0xad, 0x4f, 0xd4, 0xdf, 0x4e, 0xec, 0x58, 0xdb, 0xc2, 0x8c, 0x14, 0x79, 0x3a, 0xb3, 0x08, 0xce, 0x3b, 0xaf, 0x01, 0xdf, 0x9f, 0xe4, 0x21 }, + // 163 + { 0xe7, 0xa2, 0x92, 0x35, 0xb6, 0x86, 0xe9, 0x34, 0x82, 0x7d, 0x54, 0xbe, 0x48, 0xc8, 0x40, 0xfb, 0x33, 0xff, 0x58, 0x3c, 0x8b, 0x6a, 0xcd, 0x68, 0xc7, 0x46, 0x56, 0xdb, 0xad, 0xfb, 0x9a, 0x9f }, + // 164 + { 0x21, 0x1d, 0xbe, 0x8a, 0x12, 0xe3, 0x93, 0x19, 0x7d, 0x25, 0x75, 0x7b, 0x44, 0x45, 0x94, 0x56, 0xf6, 0x3e, 0xfc, 0x4c, 0x82, 0xf5, 0x7e, 0x1f, 0x66, 0x9d, 0x28, 0x3c, 0x78, 0x12, 0x41, 0x80 }, + // 165 + { 0x50, 0x54, 0x8b, 0x91, 0x59, 0xf9, 0x98, 0x2a, 0x9c, 0x8b, 0x50, 0x64, 0x1e, 0x58, 0x03, 0x45, 0x14, 0x0f, 0x7c, 0xa6, 0xbb, 0x37, 0x91, 0x75, 0x03, 0x90, 0xb7, 0x7f, 0x40, 0x49, 0x3a, 0x15 }, + // 166 + { 0x65, 0xda, 0x83, 0x93, 0xa1, 0xb7, 0x58, 0x1c, 0xc5, 0x98, 0x76, 0x50, 0x2f, 0x55, 0x96, 0x90, 0xbc, 0x90, 0xc8, 0x6c, 0x0c, 0x7d, 0xd9, 0xaa, 0xdb, 0xa0, 0xb0, 0xd3, 0xe4, 0x3d, 0x31, 0xc7 }, + // 167 + { 0xf2, 0x80, 0xad, 0x5c, 0xac, 0x65, 0x52, 0x7d, 0xef, 0xee, 0x90, 0xe4, 0xe9, 0xe5, 0x48, 0x83, 0x37, 0x58, 0xe1, 0x6e, 0xa3, 0x79, 0x2a, 0x31, 0x09, 0x79, 0x80, 0xeb, 0xbf, 0x2d, 0xce, 0xfa }, + // 168 + { 0x19, 0xe4, 0x21, 0x35, 0x0f, 0x81, 0xc1, 0xba, 0x14, 0xd2, 0xd3, 0x6b, 0xe8, 0x31, 0x8c, 0x74, 0xde, 0x61, 0xe6, 0x25, 0x9b, 0xa5, 0x8e, 0x9a, 0x3f, 0xf2, 0xed, 0xc9, 0x27, 0xe5, 0xbb, 0xfc }, + // 169 + { 0x16, 0x5a, 0x59, 0x15, 0x6e, 0x5e, 0xa1, 0xc9, 0xe5, 0x5a, 0x95, 0xc0, 0x8c, 0x7c, 0x2f, 0x54, 0xcd, 0x2b, 0xc5, 0x3d, 0x32, 0xbe, 0x9d, 0x51, 0x07, 0x8c, 0x8d, 0x6e, 0xcd, 0x73, 0x39, 0x96 }, + // 170 + { 0x4f, 0x55, 0x4e, 0xed, 0xfa, 0x74, 0x27, 0x0f, 0xd3, 0xd9, 0xe7, 0xaa, 0xc5, 0xa6, 0x47, 0xc5, 0x97, 0xd2, 0x63, 0x63, 0x80, 0xf3, 0x40, 0xa1, 0x0d, 0xd1, 0x18, 0xfa, 0x40, 0x3b, 0xdc, 0x92 }, + // 171 + { 0xb0, 0xd6, 0x7f, 0x9a, 0x90, 0xc4, 0x77, 0xf5, 0x0c, 0xbc, 0x78, 0x9a, 0x11, 0x94, 0x9e, 0xdf, 0x29, 0x50, 0x86, 0x1a, 0xaa, 0x7e, 0x01, 0xcd, 0xc0, 0x85, 0xba, 0x8d, 0x22, 0xf0, 0x00, 0xbb }, + // 172 + { 0x67, 0x4b, 0x05, 0x21, 0xd5, 0x63, 0x37, 0xee, 0x8b, 0x69, 0xba, 0x1f, 0xb8, 0xa1, 0xe3, 0x6e, 0x47, 0xf0, 0x2d, 0x4d, 0x58, 0x54, 0xaa, 0x4d, 0xf8, 0x7f, 0xf3, 0xec, 0x45, 0x38, 0x87, 0x72 }, + // 173 + { 0xde, 0x81, 0x0a, 0xea, 0xf7, 0xa6, 0x63, 0x93, 0x54, 0x31, 0xb8, 0x1f, 0x57, 0x6a, 0x74, 0x6a, 0xb3, 0xbc, 0x49, 0xd0, 0x22, 0x53, 0xe0, 0x8d, 0x8d, 0x36, 0x2e, 0x40, 0x4e, 0x1f, 0x42, 0xbe }, + // 174 + { 0xdc, 0xb0, 0x28, 0x4e, 0x8c, 0xc6, 0xf1, 0x59, 0x41, 0xff, 0xc3, 0x6d, 0xf7, 0x7d, 0x1e, 0xfa, 0x90, 0xea, 0x8f, 0x8a, 0x6c, 0x5a, 0x37, 0x9e, 0xe6, 0x87, 0x65, 0x36, 0x1a, 0x9a, 0xb4, 0xbe }, + // 175 + { 0x40, 0xf8, 0xbe, 0x21, 0x39, 0xf0, 0xaf, 0xf0, 0x57, 0x1f, 0x68, 0x09, 0xfb, 0x48, 0x1b, 0xf3, 0x2e, 0x5f, 0x03, 0x8f, 0xc5, 0x4c, 0x82, 0x2b, 0x4b, 0x21, 0x29, 0x32, 0xab, 0xbd, 0x6e, 0xc5 }, + // 176 + { 0xf0, 0xed, 0xa1, 0xc5, 0xce, 0xd8, 0x11, 0xaf, 0x5a, 0x0d, 0x84, 0xec, 0x62, 0xb3, 0xb5, 0xa8, 0x6d, 0xb0, 0xaa, 0x94, 0x2f, 0x17, 0x58, 0xd8, 0xe4, 0x87, 0x6b, 0x1c, 0x38, 0xf0, 0x2e, 0x9a }, + // 177 + { 0xf5, 0xc5, 0xc5, 0x22, 0xd1, 0x4a, 0x4c, 0xee, 0xa3, 0xa2, 0x76, 0x4a, 0x88, 0x3e, 0xdb, 0x75, 0xf8, 0x9b, 0x2c, 0xe8, 0xb6, 0xf4, 0xd9, 0x71, 0x95, 0x1d, 0xd2, 0xae, 0x9d, 0x5a, 0x4d, 0x6f }, + // 178 + { 0x0a, 0x73, 0xc7, 0x11, 0x0a, 0x6d, 0xa1, 0x0e, 0x38, 0x70, 0xe5, 0x17, 0x3c, 0x9b, 0x62, 0xe3, 0x49, 0xcf, 0x36, 0xc4, 0xf6, 0x83, 0x3b, 0xab, 0x56, 0xb4, 0xb4, 0x06, 0x49, 0x59, 0x27, 0x85 }, + // 179 + { 0x8c, 0x27, 0xeb, 0xbb, 0xee, 0x4b, 0x48, 0x17, 0x98, 0x5c, 0x0c, 0xd1, 0xf8, 0xc3, 0xaf, 0x72, 0x9a, 0xd0, 0x4d, 0x0e, 0xea, 0xa3, 0x0b, 0xb0, 0x53, 0x3c, 0x5e, 0x41, 0x96, 0x86, 0xde, 0x17 }, + // 180 + { 0x19, 0x4a, 0x23, 0x38, 0x93, 0x23, 0x86, 0x43, 0x5e, 0x45, 0x77, 0x35, 0x0b, 0x1e, 0x8b, 0x7f, 0xe5, 0xfb, 0x4a, 0xa4, 0x2c, 0xf0, 0x59, 0x75, 0x7e, 0x81, 0xd4, 0x90, 0xc7, 0x93, 0x73, 0xbc }, + // 181 + { 0x95, 0xa6, 0xb2, 0x20, 0x6e, 0xa8, 0x75, 0xbd, 0xd5, 0x7c, 0xe0, 0xa6, 0xae, 0x0a, 0x7b, 0x77, 0x24, 0xef, 0xe2, 0x63, 0x5b, 0xdb, 0x21, 0xa3, 0xdf, 0xca, 0x0f, 0xde, 0x23, 0x9c, 0x46, 0x9b }, + // 182 + { 0xbf, 0x80, 0x60, 0xc7, 0x1a, 0xaa, 0xd7, 0x74, 0xd3, 0x56, 0xd5, 0x0f, 0x48, 0x9a, 0x51, 0x84, 0xd3, 0xd2, 0xf7, 0x45, 0x10, 0x53, 0x40, 0xd3, 0x86, 0xe0, 0x9a, 0x25, 0xcf, 0x59, 0xb8, 0xf3 }, + // 183 + { 0x67, 0xbe, 0xcd, 0x70, 0x10, 0x9e, 0x2b, 0x70, 0xee, 0xfd, 0x86, 0xdf, 0x9a, 0x30, 0x72, 0xfd, 0xaa, 0x9b, 0x30, 0xd6, 0x02, 0x7c, 0xdd, 0x84, 0x6f, 0x44, 0x63, 0x28, 0x63, 0xb1, 0xbb, 0x02 }, + // 184 + { 0x07, 0x4a, 0x1b, 0xb9, 0xf3, 0x09, 0x02, 0xeb, 0x65, 0xed, 0xa7, 0x06, 0x62, 0x85, 0x38, 0x1f, 0x92, 0x95, 0x27, 0x3a, 0x17, 0xbc, 0xab, 0xb0, 0x57, 0x8c, 0xc4, 0xca, 0x40, 0x4c, 0xc8, 0x5e }, + // 185 + { 0x0c, 0x52, 0x02, 0x72, 0xc2, 0x5c, 0xa8, 0x70, 0xac, 0x1e, 0x96, 0xe8, 0xc8, 0x0c, 0x2b, 0xc8, 0xa9, 0x59, 0x35, 0x8c, 0xad, 0x72, 0x38, 0xc6, 0xf0, 0xf1, 0x48, 0x92, 0x8e, 0x5a, 0xd3, 0xea }, + // 186 + { 0x86, 0xc8, 0x8c, 0x18, 0x4f, 0xb6, 0x6f, 0xf7, 0xfa, 0x38, 0x9e, 0xa8, 0x1f, 0xfd, 0x15, 0xf4, 0x39, 0x27, 0x6a, 0x3e, 0x46, 0x37, 0x0c, 0x43, 0x94, 0x6a, 0x2d, 0x1d, 0x36, 0xe9, 0x3c, 0xb5 }, + // 187 + { 0x4a, 0xe6, 0x3d, 0x00, 0xe6, 0xda, 0x51, 0xb9, 0xba, 0x7b, 0xdb, 0xf7, 0x09, 0x6b, 0xbc, 0xd2, 0x91, 0xae, 0x94, 0xbd, 0x86, 0xed, 0x69, 0x8d, 0x25, 0x01, 0x33, 0xde, 0x41, 0xa5, 0xd2, 0x1f }, + // 188 + { 0x2d, 0x13, 0x87, 0xa3, 0x00, 0xd7, 0x03, 0x97, 0x77, 0x59, 0x47, 0xe7, 0x1b, 0x76, 0x3d, 0x4a, 0x5d, 0x36, 0x3d, 0x1a, 0xf2, 0x67, 0x61, 0x31, 0x3f, 0x8a, 0xf8, 0x58, 0x25, 0xb4, 0x6b, 0x40 }, + // 189 + { 0xbd, 0x75, 0x4e, 0x74, 0x38, 0xf2, 0xfd, 0x8a, 0xc1, 0x53, 0x70, 0xe7, 0x3f, 0xaf, 0xd5, 0x5c, 0xa3, 0xc7, 0xdc, 0x40, 0xc7, 0x80, 0xe4, 0x58, 0x1f, 0x17, 0x18, 0xb1, 0x30, 0x1b, 0xf6, 0x26 }, + // 190 + { 0xb3, 0x51, 0xfd, 0x0d, 0xc1, 0x44, 0xb7, 0xa2, 0x03, 0xdc, 0xea, 0x73, 0x2b, 0xac, 0xfe, 0xc6, 0xc3, 0x42, 0x53, 0x3f, 0x72, 0x84, 0xf6, 0xbd, 0x49, 0x19, 0xa7, 0x83, 0xb3, 0xe6, 0xdd, 0xbc }, + // 191 + { 0xe3, 0x7b, 0x56, 0xeb, 0x7a, 0x35, 0x87, 0x8c, 0x86, 0xaa, 0x1e, 0x31, 0x5c, 0xe1, 0x6f, 0x13, 0xe6, 0x34, 0xc8, 0xf5, 0x77, 0xd4, 0x96, 0x85, 0xec, 0x5a, 0x2c, 0x91, 0x0f, 0xcd, 0x4a, 0x66 }, + // 192 + { 0xf3, 0xef, 0xf1, 0x7e, 0x9d, 0xc2, 0xdc, 0x16, 0xd7, 0xd9, 0x66, 0xf7, 0x55, 0xfa, 0x24, 0x0f, 0xde, 0x18, 0x98, 0x4e, 0xe5, 0x58, 0x5a, 0x44, 0xa5, 0x86, 0xa4, 0x08, 0xff, 0x2c, 0xd9, 0x26 }, + // 193 + { 0xd2, 0x56, 0x88, 0x56, 0x0a, 0x17, 0x19, 0xe2, 0x1d, 0x0f, 0xad, 0xd5, 0x70, 0xf0, 0xf9, 0x38, 0xca, 0xb5, 0x49, 0x88, 0xdb, 0xff, 0x9f, 0xc8, 0x31, 0xbc, 0xe5, 0x80, 0xbb, 0x8a, 0xb0, 0x3f }, + // 194 + { 0x14, 0xb9, 0x6c, 0x51, 0xb1, 0x55, 0x8b, 0xb1, 0x4b, 0x01, 0x0c, 0x63, 0x66, 0xf0, 0x77, 0x07, 0x07, 0xd1, 0xcd, 0x1f, 0xdb, 0xf0, 0xa1, 0x97, 0x03, 0x8a, 0xe3, 0x6f, 0x22, 0x15, 0x36, 0x3d }, + // 195 + { 0x08, 0x7e, 0x0f, 0xe6, 0xb3, 0x9f, 0x40, 0xcd, 0x85, 0x2d, 0xff, 0x0d, 0xc4, 0xf4, 0x8b, 0x2a, 0xf0, 0x35, 0x23, 0xd1, 0x5e, 0x5b, 0xa0, 0xec, 0xd4, 0x03, 0x9e, 0x20, 0x07, 0x47, 0x9d, 0x5e }, + // 196 + { 0x95, 0x45, 0x53, 0xd2, 0x73, 0x38, 0xae, 0xc7, 0x34, 0xd3, 0x87, 0xe7, 0xba, 0xeb, 0xa5, 0xe7, 0x0d, 0xbd, 0x62, 0xa8, 0xed, 0x5e, 0x91, 0x67, 0x3c, 0x23, 0x42, 0xd5, 0x7c, 0x43, 0x44, 0x1c }, + // 197 + { 0x84, 0xfc, 0x7f, 0x19, 0xd8, 0x72, 0xf9, 0x89, 0xbf, 0xa0, 0x9d, 0x9e, 0x85, 0x03, 0x5e, 0xdb, 0x82, 0x23, 0xfc, 0x13, 0xfd, 0x66, 0x35, 0xcb, 0x7c, 0x47, 0xbb, 0xdd, 0x10, 0xa8, 0x5d, 0x13 }, + // 198 + { 0x23, 0x08, 0x9f, 0x31, 0xc4, 0xaf, 0x0e, 0xe5, 0xc6, 0x98, 0xc3, 0x55, 0x1c, 0x77, 0x59, 0x10, 0x66, 0xc2, 0x3c, 0x27, 0xdd, 0xae, 0xd3, 0x60, 0x0a, 0x3a, 0x92, 0x19, 0xea, 0x93, 0x03, 0x2a }, + // 199 + { 0x31, 0x62, 0x66, 0xb9, 0xc0, 0xf4, 0x5a, 0x25, 0xf5, 0x2d, 0x36, 0x2b, 0x7a, 0xdf, 0xdb, 0x1a, 0xec, 0xd1, 0x04, 0xc2, 0x96, 0xf9, 0x38, 0x04, 0x05, 0x80, 0xff, 0xf7, 0x4a, 0x33, 0xdf, 0x02 }, + // 200 + { 0xae, 0x62, 0x4c, 0x17, 0xfb, 0xd9, 0x62, 0x0b, 0x88, 0x11, 0xf0, 0x2e, 0x1e, 0x4d, 0x00, 0x6c, 0xb8, 0xf0, 0xdc, 0xa5, 0xf9, 0x6a, 0x14, 0xbe, 0xb5, 0xea, 0x13, 0x5d, 0x1d, 0xf5, 0xc9, 0xef }, + // 201 + { 0x3f, 0xa4, 0xe6, 0x42, 0xb7, 0xf6, 0xaa, 0x9f, 0x63, 0x57, 0x16, 0x8d, 0xd7, 0x5f, 0x5e, 0x3e, 0x11, 0x4e, 0x02, 0x6b, 0x46, 0xa3, 0xd7, 0x5d, 0xe2, 0xf3, 0xd5, 0xa0, 0xe2, 0x31, 0x7e, 0x54 }, + // 202 + { 0x68, 0xd3, 0xe6, 0xea, 0x92, 0x83, 0xc6, 0xe4, 0x77, 0x97, 0x9d, 0x32, 0x22, 0xfb, 0x15, 0x31, 0x18, 0x55, 0x33, 0xa8, 0x9f, 0x43, 0x3e, 0xd4, 0x1a, 0x0f, 0xa0, 0xbc, 0xec, 0x9e, 0x0d, 0x15 }, + // 203 + { 0x39, 0xee, 0x8d, 0x4e, 0xab, 0x74, 0x22, 0x24, 0x71, 0x6b, 0x2e, 0x66, 0xc9, 0xf9, 0x85, 0x32, 0xb4, 0x39, 0xb0, 0x27, 0x3c, 0xfd, 0xbe, 0x02, 0x0b, 0xe6, 0x4c, 0x04, 0x87, 0x9e, 0x67, 0x87 }, + // 204 + { 0xda, 0x77, 0x3c, 0x43, 0x56, 0x15, 0xf0, 0x51, 0xa1, 0x37, 0xc2, 0xb1, 0x56, 0x0f, 0x15, 0xc3, 0x63, 0xe8, 0xbc, 0x5a, 0x9b, 0x7b, 0x96, 0x30, 0xb8, 0xad, 0x81, 0x4a, 0x0b, 0x13, 0x24, 0x80 }, + // 205 + { 0xcc, 0xf5, 0x94, 0x15, 0x5a, 0xff, 0x2f, 0xb0, 0xfe, 0x76, 0xf7, 0x15, 0xe6, 0xaa, 0x76, 0x1b, 0x6d, 0xe3, 0x19, 0xd3, 0xcc, 0x52, 0xf9, 0xb3, 0x4a, 0xad, 0x04, 0xdc, 0x41, 0xeb, 0x2f, 0xeb }, + // 206 + { 0x24, 0xcb, 0x9a, 0xda, 0x6c, 0x3b, 0xff, 0x8e, 0x91, 0xc3, 0x98, 0x3b, 0xc5, 0x9d, 0x66, 0xf0, 0x59, 0xb6, 0xe2, 0x4f, 0xe2, 0x5e, 0x57, 0x72, 0xb8, 0x92, 0x90, 0xb5, 0x25, 0x0f, 0x23, 0x2d }, + // 207 + { 0x6d, 0x02, 0xcd, 0x3d, 0x1f, 0xe2, 0xd2, 0xfb, 0xa9, 0x23, 0x27, 0xb3, 0x6b, 0x53, 0x8f, 0x49, 0xa4, 0xb0, 0x47, 0x37, 0x5e, 0xc4, 0x44, 0x77, 0x02, 0x3f, 0xea, 0xdd, 0x40, 0x59, 0xd5, 0x6e }, + // 208 + { 0x4e, 0xf1, 0x9b, 0x67, 0x70, 0x3e, 0xc8, 0xae, 0xa4, 0xbb, 0x73, 0x94, 0xee, 0xca, 0x0d, 0xa2, 0x81, 0x50, 0xad, 0x9b, 0xb3, 0x00, 0x36, 0x38, 0x73, 0x40, 0x63, 0xb5, 0xae, 0x93, 0x21, 0x86 }, + // 209 + { 0x9f, 0x76, 0x1e, 0xce, 0xd1, 0x3c, 0xa4, 0x5a, 0xdd, 0x32, 0x70, 0x3f, 0x76, 0xd9, 0x2a, 0x75, 0xc2, 0x72, 0x2e, 0x5a, 0x4e, 0x87, 0x68, 0xa8, 0x54, 0xcf, 0x87, 0x61, 0xc9, 0x51, 0xc6, 0xc6 }, + // 210 + { 0xef, 0x97, 0x1b, 0x56, 0xa9, 0x79, 0x3c, 0x99, 0x62, 0x17, 0x8c, 0x8d, 0x73, 0x51, 0x9d, 0x2c, 0x98, 0xba, 0x4f, 0x4e, 0x3a, 0x6e, 0xab, 0xc8, 0x6a, 0xc1, 0x71, 0xee, 0xbe, 0x71, 0xc5, 0xd5 }, + // 211 + { 0x58, 0x08, 0x1a, 0x13, 0xe6, 0xe0, 0xc4, 0x97, 0x57, 0x2f, 0xf7, 0xeb, 0x1f, 0xa6, 0x5c, 0x80, 0x32, 0x19, 0x8c, 0x83, 0x44, 0xeb, 0x68, 0x60, 0x6e, 0x3a, 0x61, 0x83, 0xcb, 0x43, 0x63, 0xe0 }, + // 212 + { 0x18, 0xd7, 0x2c, 0xaa, 0x3e, 0xe3, 0x7b, 0x0a, 0x36, 0xaa, 0xd8, 0x35, 0x22, 0x8d, 0x98, 0xa0, 0x3d, 0xcb, 0xf4, 0x82, 0x94, 0xff, 0x65, 0xae, 0x9c, 0xb2, 0xb5, 0xaa, 0x1e, 0x93, 0x53, 0xa8 }, + // 213 + { 0xc3, 0x48, 0x5b, 0xa6, 0xe1, 0x47, 0x01, 0x0d, 0xc3, 0x2c, 0x00, 0xfc, 0x83, 0xf5, 0xd3, 0xa3, 0xdd, 0x0b, 0xc2, 0xea, 0x72, 0x9b, 0xb1, 0x5a, 0x8f, 0x09, 0x6f, 0x48, 0xd9, 0xe6, 0x0c, 0x21 }, + // 214 + { 0x78, 0xdb, 0x66, 0xcd, 0x0c, 0x43, 0x9e, 0xf8, 0xfd, 0x1f, 0xf5, 0x38, 0x33, 0xec, 0x74, 0xf9, 0xf2, 0x79, 0x5c, 0x63, 0xba, 0x73, 0x6b, 0xee, 0xc6, 0xae, 0x2d, 0xa9, 0xf6, 0x3a, 0x18, 0x3f }, + // 215 + { 0xfe, 0x5a, 0xf5, 0xe1, 0x2b, 0xe3, 0xf4, 0x51, 0xab, 0x5d, 0x20, 0x6b, 0xee, 0xbc, 0x83, 0xaf, 0x1a, 0xe7, 0xc9, 0xc1, 0x2f, 0xac, 0xc3, 0x73, 0xc8, 0x49, 0x99, 0x69, 0xc2, 0x34, 0x1e, 0xa1 }, + // 216 + { 0xcc, 0x01, 0x0f, 0xc7, 0xd8, 0x55, 0x19, 0x22, 0x18, 0x90, 0x64, 0xc5, 0x80, 0x5c, 0x4b, 0xd7, 0xee, 0xf0, 0xe1, 0x24, 0xe0, 0x04, 0xf9, 0x09, 0x91, 0x9d, 0xb3, 0x85, 0xd8, 0xbb, 0xa2, 0x83 }, + // 217 + { 0x54, 0xe7, 0x92, 0xcb, 0x3d, 0x39, 0x35, 0xa9, 0x1b, 0x5d, 0xb6, 0xf8, 0x85, 0xf1, 0xc3, 0x4e, 0x3f, 0x71, 0xdf, 0xa4, 0xc6, 0xb6, 0x68, 0xe2, 0xe5, 0x38, 0xc4, 0x0c, 0x0e, 0x1d, 0xa2, 0xe2 }, + // 218 + { 0x96, 0x63, 0x15, 0x3b, 0xe2, 0x52, 0x03, 0xa7, 0xf2, 0xc1, 0x17, 0x9a, 0x38, 0x74, 0xc7, 0x62, 0x42, 0x77, 0x4e, 0xf4, 0x4b, 0xce, 0x90, 0x51, 0x1d, 0x1d, 0x78, 0x42, 0xf7, 0xde, 0x58, 0xab }, + // 219 + { 0xfa, 0x78, 0x6d, 0x04, 0x8c, 0x43, 0xde, 0xbc, 0xf5, 0x54, 0xb8, 0x53, 0xce, 0x5d, 0xc7, 0x97, 0xb0, 0x20, 0xa2, 0x4b, 0x88, 0x8c, 0xa9, 0x79, 0x33, 0x7e, 0xfa, 0xb4, 0x73, 0xef, 0x86, 0xdf }, + // 220 + { 0xe9, 0x83, 0x25, 0x91, 0xbc, 0x85, 0x0d, 0xe9, 0x9a, 0xc1, 0x24, 0x9f, 0xd7, 0xc8, 0x93, 0x63, 0xcf, 0x44, 0x4e, 0xce, 0xe7, 0xcb, 0xf3, 0xa8, 0x91, 0x92, 0xd9, 0xa1, 0xb4, 0xae, 0xa0, 0xbd }, + // 221 + { 0x10, 0xa9, 0x4e, 0x35, 0x03, 0xcc, 0xe7, 0x67, 0x75, 0x74, 0x1c, 0x2a, 0x82, 0xaf, 0x43, 0xee, 0x06, 0x42, 0x20, 0x75, 0xc5, 0xb3, 0xb6, 0x51, 0xe4, 0x2d, 0xe8, 0xd8, 0x2f, 0xc5, 0xc9, 0x38 }, + // 222 + { 0xc9, 0x7a, 0x23, 0x5d, 0xe0, 0xb6, 0x21, 0x5c, 0xdf, 0xd9, 0xb5, 0xff, 0xe7, 0xad, 0x45, 0x77, 0x55, 0x30, 0xb7, 0x18, 0xcb, 0x54, 0x89, 0xa3, 0x61, 0x88, 0x83, 0x26, 0x83, 0x3c, 0xac, 0x13 }, + // 223 + { 0xe5, 0x6f, 0x66, 0x7d, 0xb8, 0xc7, 0xd2, 0x71, 0xda, 0x7c, 0x0f, 0x11, 0xd2, 0xc7, 0x5b, 0xc7, 0x06, 0xbe, 0xd2, 0xb2, 0xf8, 0x66, 0x1a, 0x1f, 0xb6, 0xf2, 0x9d, 0xeb, 0x78, 0xc2, 0xcd, 0x5f }, + // 224 + { 0xe0, 0xdc, 0xa7, 0xc4, 0x48, 0xe4, 0x6a, 0x50, 0x6b, 0x16, 0x75, 0x06, 0x41, 0x46, 0x89, 0xef, 0x2d, 0xc8, 0x50, 0xd2, 0xee, 0x0b, 0x57, 0x67, 0xdb, 0x7a, 0xeb, 0xa6, 0xcf, 0xb9, 0xe8, 0x50 }, + // 225 + { 0x81, 0xef, 0x43, 0x64, 0x2d, 0xf9, 0x2f, 0x91, 0xa0, 0x51, 0xf0, 0xa4, 0x9d, 0xe5, 0x65, 0x31, 0x9a, 0xaa, 0x03, 0x50, 0x13, 0x44, 0xaf, 0x3c, 0xd0, 0x51, 0x83, 0x40, 0xa4, 0x76, 0x99, 0x75 }, + // 226 + { 0xb1, 0x1c, 0x25, 0xc1, 0x85, 0x08, 0xdb, 0x61, 0x7e, 0x00, 0x7f, 0xd6, 0xda, 0x1f, 0x52, 0x6a, 0x8a, 0x4c, 0x35, 0x1b, 0xa7, 0x8a, 0x09, 0xcf, 0xc0, 0xbf, 0xd1, 0x75, 0xc2, 0x4d, 0xbb, 0xc9 }, + // 227 + { 0x65, 0x7d, 0xc9, 0x98, 0x1d, 0xc1, 0x6f, 0xca, 0x11, 0x70, 0xed, 0x35, 0xa5, 0xb2, 0x7e, 0x96, 0x0c, 0x53, 0x95, 0x52, 0x1d, 0x7d, 0x9d, 0xf3, 0x25, 0x57, 0x63, 0xe2, 0xfb, 0xf2, 0x2a, 0xd7 }, + // 228 + { 0x29, 0x34, 0xc5, 0xf6, 0xe7, 0x1f, 0x6e, 0x39, 0x04, 0x81, 0x88, 0x39, 0x27, 0xa0, 0xd9, 0xd6, 0xeb, 0x93, 0xc5, 0xba, 0xd4, 0xf1, 0xa5, 0xff, 0x5b, 0x09, 0x7c, 0xff, 0x5e, 0x08, 0x1d, 0x67 }, + // 229 + { 0x1b, 0xc4, 0x7f, 0xac, 0xbd, 0x45, 0xfd, 0x59, 0xc7, 0x00, 0x31, 0x94, 0x96, 0xa0, 0x23, 0x14, 0xf3, 0x8a, 0xef, 0x86, 0xb9, 0x1c, 0x37, 0xac, 0x47, 0xbc, 0x7d, 0x2a, 0x17, 0xcc, 0x2a, 0x0f }, + // 230 + { 0x7c, 0x04, 0x49, 0xae, 0xe6, 0x69, 0x06, 0x44, 0xeb, 0x9a, 0x67, 0x3e, 0xda, 0x8d, 0xfa, 0xd6, 0x5d, 0x1f, 0xef, 0x8d, 0xab, 0x2c, 0xc4, 0x1d, 0x8e, 0x52, 0xe6, 0xf7, 0xaa, 0xbd, 0xda, 0x36 }, + // 231 + { 0x19, 0x75, 0x61, 0xfb, 0x26, 0x0b, 0x09, 0xfd, 0x29, 0xe7, 0x74, 0x44, 0x42, 0x27, 0x40, 0xa5, 0xfa, 0x8d, 0x17, 0xbc, 0xf6, 0x0a, 0x34, 0xd7, 0x4b, 0x63, 0x49, 0x2d, 0xc3, 0xd4, 0x54, 0x14 }, + // 232 + { 0xc9, 0xf0, 0xed, 0x80, 0x1e, 0xfc, 0xd0, 0x01, 0xf0, 0x0b, 0xcc, 0x4e, 0xd2, 0xff, 0x2e, 0x76, 0xfb, 0xd6, 0xac, 0x91, 0xd3, 0x89, 0x92, 0x0d, 0xab, 0x9e, 0x12, 0xd5, 0xeb, 0x63, 0x60, 0x18 }, + // 233 + { 0x46, 0x5e, 0x55, 0x03, 0x02, 0x92, 0xd0, 0x21, 0x53, 0xbf, 0xe3, 0xc5, 0x2f, 0x67, 0x36, 0x91, 0x27, 0xd8, 0xae, 0xc5, 0xb5, 0x77, 0x8a, 0x0b, 0x06, 0x43, 0x00, 0x08, 0xbb, 0xa0, 0xc5, 0xda }, + // 234 + { 0x0e, 0x44, 0x3f, 0x10, 0x30, 0xdc, 0xbc, 0x18, 0xd8, 0xf2, 0x99, 0x7a, 0xe2, 0x1d, 0x29, 0xe8, 0x91, 0xd0, 0x48, 0x7a, 0x79, 0x09, 0x89, 0x67, 0x72, 0x9e, 0xd3, 0xe5, 0xef, 0x61, 0x93, 0xfe }, + // 235 + { 0x61, 0xda, 0xf8, 0x42, 0x13, 0xc2, 0xe7, 0xa5, 0x5f, 0x8d, 0xbb, 0xcd, 0x3c, 0x87, 0x23, 0xf6, 0xef, 0xdc, 0x7e, 0x81, 0xfc, 0x8b, 0x79, 0x8a, 0xcc, 0x4c, 0xa5, 0xc8, 0x25, 0xf9, 0x1c, 0x6d }, + // 236 + { 0x2c, 0x1b, 0x5b, 0x64, 0xe9, 0x9a, 0x37, 0xee, 0x1c, 0xa8, 0xdc, 0xd4, 0x49, 0xa4, 0x77, 0x88, 0x29, 0x60, 0x88, 0x74, 0xaf, 0xae, 0x35, 0x2a, 0xe9, 0xa3, 0xb0, 0xaa, 0xfb, 0xab, 0x2b, 0x65 }, + // 237 + { 0x68, 0x4f, 0xca, 0x80, 0x09, 0x53, 0x1a, 0x9d, 0xa1, 0xed, 0x81, 0xb3, 0xda, 0x96, 0xa3, 0x9e, 0x86, 0x2f, 0x1a, 0xd7, 0x31, 0x0e, 0x18, 0xf5, 0xf9, 0x60, 0xc5, 0xb0, 0xff, 0xd6, 0x36, 0x5d }, + // 238 + { 0xda, 0x78, 0x5f, 0x50, 0x37, 0xe5, 0x91, 0x89, 0x72, 0x90, 0xec, 0x30, 0x6e, 0x5b, 0x5c, 0x3a, 0xd7, 0x1a, 0x68, 0x7f, 0x58, 0xd7, 0x2e, 0xe9, 0xb0, 0xa1, 0xfb, 0x92, 0xe8, 0xf6, 0xfa, 0xb6 }, + // 239 + { 0xa9, 0xc5, 0xc7, 0x66, 0x49, 0x0a, 0xaf, 0xd6, 0x2e, 0x4d, 0x28, 0x14, 0x82, 0x85, 0xcf, 0x91, 0x41, 0x82, 0xbc, 0x78, 0x33, 0x13, 0x90, 0xf8, 0xd1, 0x2a, 0xa2, 0xe2, 0xcd, 0xcf, 0xe2, 0x85 }, + // 240 + { 0x24, 0x91, 0xdd, 0xa5, 0xef, 0x34, 0x97, 0xf3, 0x17, 0x2d, 0x9a, 0xd6, 0xb9, 0x43, 0x38, 0xdd, 0x9b, 0x00, 0x33, 0x30, 0xeb, 0xdc, 0xf3, 0xd2, 0xd2, 0xef, 0x93, 0x4b, 0x56, 0x87, 0x2a, 0xc2 }, + // 241 + { 0x77, 0x5a, 0xc5, 0x10, 0x4a, 0x23, 0x49, 0x57, 0xa5, 0xd9, 0x5b, 0x3f, 0x6a, 0x66, 0xc9, 0x55, 0x4c, 0x72, 0xeb, 0xb8, 0x1d, 0x79, 0x05, 0xe0, 0x22, 0x97, 0x5d, 0x1c, 0xea, 0x4b, 0xfb, 0x1b }, + // 242 + { 0x5d, 0x53, 0x12, 0x8c, 0xa0, 0x64, 0x60, 0x6e, 0xb9, 0x5a, 0x49, 0x6d, 0x67, 0x4b, 0x20, 0x5c, 0x23, 0xa3, 0x07, 0xcc, 0x0d, 0x49, 0xf0, 0x2e, 0xfc, 0xc3, 0x00, 0xcd, 0x5c, 0x74, 0xac, 0x38 }, + // 243 + { 0x30, 0x4f, 0xa6, 0xbc, 0x45, 0x5d, 0xee, 0x95, 0x77, 0xca, 0x55, 0x5d, 0xe5, 0x5c, 0xf0, 0xeb, 0xd9, 0x38, 0xaf, 0xbe, 0xed, 0x8e, 0x7e, 0xd8, 0x57, 0x2a, 0xb7, 0x07, 0xff, 0x4e, 0x56, 0x23 }, + // 244 + { 0xa8, 0x7c, 0xca, 0x54, 0x3b, 0xcc, 0xe9, 0x80, 0xac, 0xce, 0x17, 0x62, 0x00, 0xd2, 0xc1, 0x71, 0x95, 0xc0, 0xc9, 0x0c, 0xd5, 0x0b, 0xaf, 0x0a, 0x46, 0x99, 0xc8, 0xc4, 0x5a, 0xb1, 0x18, 0x20 }, + // 245 + { 0x5c, 0xd2, 0x7f, 0x0e, 0x3b, 0x80, 0xeb, 0x1a, 0xcd, 0x65, 0x14, 0xd5, 0x4e, 0x03, 0x95, 0x40, 0x99, 0x52, 0xd2, 0xe1, 0xed, 0xf9, 0xb1, 0x88, 0x11, 0x37, 0xed, 0x01, 0x47, 0xa9, 0xa1, 0xc1 }, + // 246 + { 0xc2, 0x44, 0xcd, 0xe0, 0x2f, 0x02, 0x12, 0xf0, 0xb6, 0x37, 0x9a, 0x91, 0x23, 0x16, 0x77, 0x36, 0x7d, 0x6c, 0xfd, 0xaf, 0x25, 0x60, 0xd5, 0x98, 0x63, 0xa1, 0x85, 0xf8, 0xaf, 0x3d, 0x56, 0x7b }, + // 247 + { 0xa7, 0x87, 0x64, 0x76, 0x7e, 0xda, 0x2b, 0xd4, 0xac, 0x8c, 0xd5, 0x91, 0xa0, 0xf9, 0xf2, 0xf2, 0x41, 0x83, 0x38, 0xda, 0xa9, 0x63, 0xe3, 0x91, 0xe0, 0x34, 0xfd, 0x87, 0xbe, 0xf5, 0x39, 0x58 }, + // 248 + { 0x4f, 0x8f, 0x58, 0xd9, 0xa4, 0xe8, 0xbf, 0x0a, 0x23, 0x48, 0x0c, 0xc0, 0x06, 0x0a, 0x54, 0x82, 0x2d, 0x04, 0x78, 0xd2, 0x63, 0x13, 0x9b, 0x75, 0x3d, 0x47, 0x41, 0xd1, 0xe6, 0x65, 0xfe, 0xb7 }, + // 249 + { 0xb8, 0x5f, 0xd3, 0x4e, 0x1c, 0x1a, 0x8c, 0x06, 0x9b, 0x47, 0x4d, 0x67, 0x06, 0xbe, 0x56, 0xe5, 0xfd, 0x66, 0xe4, 0x7a, 0x31, 0x6d, 0x4f, 0x05, 0x20, 0xf4, 0x4a, 0x6a, 0xc4, 0xf8, 0x69, 0x88 }, + // 250 + { 0x03, 0xe6, 0x91, 0x51, 0x38, 0xa2, 0x2f, 0x5a, 0x97, 0x0b, 0x2c, 0xdb, 0xa5, 0x0a, 0x55, 0x17, 0x19, 0xf9, 0x13, 0x6f, 0x1c, 0x18, 0xc4, 0xce, 0x2b, 0x73, 0x8e, 0x2a, 0xe1, 0x86, 0x8b, 0xee }, + // 251 + { 0xd3, 0xed, 0xa9, 0xd6, 0xdc, 0x8b, 0xe0, 0xad, 0xb5, 0x13, 0x43, 0xb8, 0xb3, 0x00, 0x3d, 0xb5, 0x9c, 0xb0, 0x28, 0x4b, 0xbc, 0x50, 0x4e, 0x74, 0xbf, 0xf3, 0xc0, 0x49, 0x63, 0x6a, 0x0b, 0xb7 }, + // 252 + { 0x21, 0x13, 0x71, 0x98, 0xb5, 0x06, 0x06, 0x03, 0x22, 0x4a, 0x74, 0x94, 0x9b, 0x1d, 0x42, 0x91, 0x32, 0x13, 0xb2, 0xb6, 0x49, 0xb2, 0x8a, 0xaf, 0xb8, 0xc0, 0xca, 0x18, 0xe2, 0x7f, 0x94, 0xf0 }, + // 253 + { 0xd5, 0x25, 0x71, 0x5b, 0x56, 0xa6, 0xc3, 0xb6, 0x8d, 0xd6, 0xb9, 0xf3, 0x13, 0x1e, 0x41, 0x2d, 0xfb, 0x1f, 0x83, 0x20, 0xd1, 0x3f, 0x47, 0x30, 0x72, 0xc7, 0xa2, 0xf7, 0x23, 0xc3, 0xad, 0x08 }, + // 254 + { 0x87, 0x1a, 0x9e, 0x83, 0x8a, 0xbd, 0x11, 0x24, 0x22, 0xa5, 0x20, 0x1f, 0x6c, 0x5b, 0xb8, 0x53, 0x6a, 0x57, 0x57, 0x1a, 0x5c, 0xc2, 0x61, 0x1e, 0x5f, 0x03, 0x53, 0x2b, 0x81, 0xaf, 0x4b, 0x92 }, + // 255 + { 0xeb, 0xe8, 0x11, 0x0a, 0x3d, 0x2d, 0x07, 0x4b, 0x85, 0x49, 0x56, 0x76, 0xbb, 0x0d, 0x98, 0x16, 0x16, 0x07, 0xb5, 0x5d, 0xb6, 0x19, 0x15, 0x40, 0xfe, 0x4d, 0x53, 0x5a, 0xc3, 0x8a, 0xaf, 0xb1 }, +}; diff --git a/lib/blake2/blake2s_selftest.cc b/lib/blake2/blake2s_selftest.cc new file mode 100644 index 0000000..420544d --- /dev/null +++ b/lib/blake2/blake2s_selftest.cc @@ -0,0 +1,113 @@ +// Self test Modules for BLAKE2s +#include "blake2s_kat.h" +#include + +extern "C" { +#include "blake2s.h" +} + +static_assert(sizeof(BLAKE2s_param) == (8 * sizeof(uint32_t)), "sizeof struct BLAKE2s_param"); + +// Deterministic sequences (Fibonacci generator). +static void +selftest_seq(uint8_t *out, size_t len, uint32_t seed) +{ + size_t i; + uint32_t t, a, b; + + a = 0xDEAD4BAD * seed; // prime + b = 1; + + for (i = 0; i < len; i++) { // fill the buf + t = a + b; + a = b; + b = t; + out[i] = (t >> 24) & 0xFF; + } +} + +// BLAKE2s self-test validation. Return 0 when OK. +int +blake2s_selftest() +{ + // Grand hash of hash results. + const uint8_t blake2s_res[32] = {0x6A, 0x41, 0x1F, 0x08, 0xCE, 0x25, 0xAD, 0xCD, 0xFB, 0x02, 0xAB, + 0xA6, 0x41, 0x45, 0x1C, 0xEC, 0x53, 0xC5, 0x98, 0xB2, 0x4F, 0x4F, + 0xC7, 0x87, 0xFB, 0xDC, 0x88, 0x79, 0x7F, 0x4C, 0x1D, 0xFE}; + // Parameter sets. + const size_t b2s_md_len[4] = {16, 20, 28, 32}; + const size_t b2s_in_len[6] = {0, 3, 64, 65, 255, 1024}; + + size_t i, j, outlen, inlen; + uint8_t in[1024], md[32], key[32]; + struct BLAKE2s_ctx ctx; + + // 256-bit hash for testing. + if (BLAKE2s_init(&ctx, 32, NULL, 0)) return -1; + + for (i = 0; i < 4; i++) { + outlen = b2s_md_len[i]; + for (j = 0; j < 6; j++) { + inlen = b2s_in_len[j]; + + selftest_seq(in, inlen, inlen); // unkeyed hash + BLAKE2s(md, outlen, NULL, 0, in, inlen); + BLAKE2s_update(&ctx, md, outlen); // hash the hash + + selftest_seq(key, outlen, outlen); // keyed hash + BLAKE2s(md, outlen, key, outlen, in, inlen); + BLAKE2s_update(&ctx, md, outlen); // hash the hash + } + } + + // Compute and compare the hash of hashes. + BLAKE2s_final(&ctx, md); + for (i = 0; i < 32; i++) { + if (md[i] != blake2s_res[i]) return -1; + } + + return 0; +} + +TEST(blake2s, selftest) { EXPECT_EQ(blake2s_selftest(), 0); } + +TEST(blake2s, selftestAllInOne) +{ + const char *in = "abc"; + size_t inlen = 3; + + uint8_t out[32]; + BLAKE2s(out, 32, NULL, 0, in, inlen); + + const uint8_t blake2s_res[32] = {0x50, 0x8C, 0x5E, 0x8C, 0x32, 0x7C, 0x14, 0xE2, 0xE1, 0xA7, 0x2B, + 0xA3, 0x4E, 0xEB, 0x45, 0x2F, 0x37, 0x45, 0x8B, 0x20, 0x9E, 0xD6, + 0x3A, 0x29, 0x4D, 0x99, 0x9B, 0x4C, 0x86, 0x67, 0x59, 0x82}; + + for (unsigned i = 0; i < 32; i++) { + EXPECT_EQ(out[i], blake2s_res[i]) << "position=" << i; + } +} + +TEST(blake2s, KnownAnswerTest) +{ + uint8_t in[256]; + for (int i = 0; i < 256; ++i) in[i] = i; + uint8_t out[32]; + + for (unsigned i = 0; i < KATs_len; ++i) { + EXPECT_EQ(BLAKE2s(out, 32, NULL, 0, in, i), 0); + for (unsigned j = 0; j < 32; ++j) EXPECT_EQ(out[j], KATs[i][j]) << "on test=" << i << " pos=" << j; + } +} + +TEST(blake2s, KnownAnswerTestKeyed) +{ + uint8_t in[256]; + for (int i = 0; i < 256; ++i) in[i] = i; + uint8_t out[32]; + + for (unsigned i = 0; i < KATs_len; ++i) { + EXPECT_EQ(BLAKE2s(out, 32, KAT_secret, 32, in, i), 0); + for (unsigned j = 0; j < 32; ++j) EXPECT_EQ(out[j], secret_KATs[i][j]) << "on test=" << i << " pos=" << j; + } +} diff --git a/lib/blake2/meson.build b/lib/blake2/meson.build deleted file mode 100644 index dc06f3e..0000000 --- a/lib/blake2/meson.build +++ /dev/null @@ -1,24 +0,0 @@ - -blake2s_srcs = files('blake2s.c') -blake2s_incl = include_directories('include') - -blake2s = declare_dependency( - link_with: static_library('blake2s', blake2s_srcs, - include_directories: blake2s_incl, - dependencies: libk), - include_directories: blake2s_incl, -) - -# tests -blake2s_sut = declare_dependency( - link_with: library('blake2s_sut', blake2s_srcs, - include_directories: blake2s_incl, - native: true), - include_directories: blake2s_incl, -) - -test('blake2s selftest', - executable('test_blake2s_selftest', 'tests/blake2s_selftest.cc', - dependencies: [ blake2s_sut, gtest ], - native: true) -) diff --git a/lib/blake2/tests/blake2s_kat.h b/lib/blake2/tests/blake2s_kat.h deleted file mode 100644 index dec250a..0000000 --- a/lib/blake2/tests/blake2s_kat.h +++ /dev/null @@ -1,1034 +0,0 @@ -#pragma once - -#include - -static const unsigned KATs_len = 256; -static const uint8_t KAT_secret[32] = { 0xba, 0x80, 0xfb, 0x8f, 0x1b, 0x7b, 0xa1, 0x49, 0x3c, 0x6a, 0xe8, 0x8f, 0xd, 0x66, 0xa1, 0xae, 0xff, 0xa2, 0x5c, 0x8a, 0x7d, 0x4c, 0x1f, 0xb6, 0x81, 0x1, 0xb5, 0xe4, 0xc2, 0x8e, 0x37, 0x3 }; -static const uint8_t KATs[256][32] = { - // 0 - { 0x69, 0x21, 0x7a, 0x30, 0x79, 0x90, 0x80, 0x94, 0xe1, 0x11, 0x21, 0xd0, 0x42, 0x35, 0x4a, 0x7c, 0x1f, 0x55, 0xb6, 0x48, 0x2c, 0xa1, 0xa5, 0x1e, 0x1b, 0x25, 0x0d, 0xfd, 0x1e, 0xd0, 0xee, 0xf9 }, - // 1 - { 0xe3, 0x4d, 0x74, 0xdb, 0xaf, 0x4f, 0xf4, 0xc6, 0xab, 0xd8, 0x71, 0xcc, 0x22, 0x04, 0x51, 0xd2, 0xea, 0x26, 0x48, 0x84, 0x6c, 0x77, 0x57, 0xfb, 0xaa, 0xc8, 0x2f, 0xe5, 0x1a, 0xd6, 0x4b, 0xea }, - // 2 - { 0xdd, 0xad, 0x9a, 0xb1, 0x5d, 0xac, 0x45, 0x49, 0xba, 0x42, 0xf4, 0x9d, 0x26, 0x24, 0x96, 0xbe, 0xf6, 0xc0, 0xba, 0xe1, 0xdd, 0x34, 0x2a, 0x88, 0x08, 0xf8, 0xea, 0x26, 0x7c, 0x6e, 0x21, 0x0c }, - // 3 - { 0xe8, 0xf9, 0x1c, 0x6e, 0xf2, 0x32, 0xa0, 0x41, 0x45, 0x2a, 0xb0, 0xe1, 0x49, 0x07, 0x0c, 0xdd, 0x7d, 0xd1, 0x76, 0x9e, 0x75, 0xb3, 0xa5, 0x92, 0x1b, 0xe3, 0x78, 0x76, 0xc4, 0x5c, 0x99, 0x00 }, - // 4 - { 0x0c, 0xc7, 0x0e, 0x00, 0x34, 0x8b, 0x86, 0xba, 0x29, 0x44, 0xd0, 0xc3, 0x20, 0x38, 0xb2, 0x5c, 0x55, 0x58, 0x4f, 0x90, 0xdf, 0x23, 0x04, 0xf5, 0x5f, 0xa3, 0x32, 0xaf, 0x5f, 0xb0, 0x1e, 0x20 }, - // 5 - { 0xec, 0x19, 0x64, 0x19, 0x10, 0x87, 0xa4, 0xfe, 0x9d, 0xf1, 0xc7, 0x95, 0x34, 0x2a, 0x02, 0xff, 0xc1, 0x91, 0xa5, 0xb2, 0x51, 0x76, 0x48, 0x56, 0xae, 0x5b, 0x8b, 0x57, 0x69, 0xf0, 0xc6, 0xcd }, - // 6 - { 0xe1, 0xfa, 0x51, 0x61, 0x8d, 0x7d, 0xf4, 0xeb, 0x70, 0xcf, 0x0d, 0x5a, 0x9e, 0x90, 0x6f, 0x80, 0x6e, 0x9d, 0x19, 0xf7, 0xf4, 0xf0, 0x1e, 0x3b, 0x62, 0x12, 0x88, 0xe4, 0x12, 0x04, 0x05, 0xd6 }, - // 7 - { 0x59, 0x80, 0x01, 0xfa, 0xfb, 0xe8, 0xf9, 0x4e, 0xc6, 0x6d, 0xc8, 0x27, 0xd0, 0x12, 0xcf, 0xcb, 0xba, 0x22, 0x28, 0x56, 0x9f, 0x44, 0x8e, 0x89, 0xea, 0x22, 0x08, 0xc8, 0xbf, 0x76, 0x92, 0x93 }, - // 8 - { 0xc7, 0xe8, 0x87, 0xb5, 0x46, 0x62, 0x36, 0x35, 0xe9, 0x3e, 0x04, 0x95, 0x59, 0x8f, 0x17, 0x26, 0x82, 0x19, 0x96, 0xc2, 0x37, 0x77, 0x05, 0xb9, 0x3a, 0x1f, 0x63, 0x6f, 0x87, 0x2b, 0xfa, 0x2d }, - // 9 - { 0xc3, 0x15, 0xa4, 0x37, 0xdd, 0x28, 0x06, 0x2a, 0x77, 0x0d, 0x48, 0x19, 0x67, 0x13, 0x6b, 0x1b, 0x5e, 0xb8, 0x8b, 0x21, 0xee, 0x53, 0xd0, 0x32, 0x9c, 0x58, 0x97, 0x12, 0x6e, 0x9d, 0xb0, 0x2c }, - // 10 - { 0xbb, 0x47, 0x3d, 0xed, 0xdc, 0x05, 0x5f, 0xea, 0x62, 0x28, 0xf2, 0x07, 0xda, 0x57, 0x53, 0x47, 0xbb, 0x00, 0x40, 0x4c, 0xd3, 0x49, 0xd3, 0x8c, 0x18, 0x02, 0x63, 0x07, 0xa2, 0x24, 0xcb, 0xff }, - // 11 - { 0x68, 0x7e, 0x18, 0x73, 0xa8, 0x27, 0x75, 0x91, 0xbb, 0x33, 0xd9, 0xad, 0xf9, 0xa1, 0x39, 0x12, 0xef, 0xef, 0xe5, 0x57, 0xca, 0xfc, 0x39, 0xa7, 0x95, 0x26, 0x23, 0xe4, 0x72, 0x55, 0xf1, 0x6d }, - // 12 - { 0x1a, 0xc7, 0xba, 0x75, 0x4d, 0x6e, 0x2f, 0x94, 0xe0, 0xe8, 0x6c, 0x46, 0xbf, 0xb2, 0x62, 0xab, 0xbb, 0x74, 0xf4, 0x50, 0xef, 0x45, 0x6d, 0x6b, 0x4d, 0x97, 0xaa, 0x80, 0xce, 0x6d, 0xa7, 0x67 }, - // 13 - { 0x01, 0x2c, 0x97, 0x80, 0x96, 0x14, 0x81, 0x6b, 0x5d, 0x94, 0x94, 0x47, 0x7d, 0x4b, 0x68, 0x7d, 0x15, 0xb9, 0x6e, 0xb6, 0x9c, 0x0e, 0x80, 0x74, 0xa8, 0x51, 0x6f, 0x31, 0x22, 0x4b, 0x5c, 0x98 }, - // 14 - { 0x91, 0xff, 0xd2, 0x6c, 0xfa, 0x4d, 0xa5, 0x13, 0x4c, 0x7e, 0xa2, 0x62, 0xf7, 0x88, 0x9c, 0x32, 0x9f, 0x61, 0xf6, 0xa6, 0x57, 0x22, 0x5c, 0xc2, 0x12, 0xf4, 0x00, 0x56, 0xd9, 0x86, 0xb3, 0xf4 }, - // 15 - { 0xd9, 0x7c, 0x82, 0x8d, 0x81, 0x82, 0xa7, 0x21, 0x80, 0xa0, 0x6a, 0x78, 0x26, 0x83, 0x30, 0x67, 0x3f, 0x7c, 0x4e, 0x06, 0x35, 0x94, 0x7c, 0x04, 0xc0, 0x23, 0x23, 0xfd, 0x45, 0xc0, 0xa5, 0x2d }, - // 16 - { 0xef, 0xc0, 0x4c, 0xdc, 0x39, 0x1c, 0x7e, 0x91, 0x19, 0xbd, 0x38, 0x66, 0x8a, 0x53, 0x4e, 0x65, 0xfe, 0x31, 0x03, 0x6d, 0x6a, 0x62, 0x11, 0x2e, 0x44, 0xeb, 0xeb, 0x11, 0xf9, 0xc5, 0x70, 0x80 }, - // 17 - { 0x99, 0x2c, 0xf5, 0xc0, 0x53, 0x44, 0x2a, 0x5f, 0xbc, 0x4f, 0xaf, 0x58, 0x3e, 0x04, 0xe5, 0x0b, 0xb7, 0x0d, 0x2f, 0x39, 0xfb, 0xb6, 0xa5, 0x03, 0xf8, 0x9e, 0x56, 0xa6, 0x3e, 0x18, 0x57, 0x8a }, - // 18 - { 0x38, 0x64, 0x0e, 0x9f, 0x21, 0x98, 0x3e, 0x67, 0xb5, 0x39, 0xca, 0xcc, 0xae, 0x5e, 0xcf, 0x61, 0x5a, 0xe2, 0x76, 0x4f, 0x75, 0xa0, 0x9c, 0x9c, 0x59, 0xb7, 0x64, 0x83, 0xc1, 0xfb, 0xc7, 0x35 }, - // 19 - { 0x21, 0x3d, 0xd3, 0x4c, 0x7e, 0xfe, 0x4f, 0xb2, 0x7a, 0x6b, 0x35, 0xf6, 0xb4, 0x00, 0x0d, 0x1f, 0xe0, 0x32, 0x81, 0xaf, 0x3c, 0x72, 0x3e, 0x5c, 0x9f, 0x94, 0x74, 0x7a, 0x5f, 0x31, 0xcd, 0x3b }, - // 20 - { 0xec, 0x24, 0x6e, 0xee, 0xb9, 0xce, 0xd3, 0xf7, 0xad, 0x33, 0xed, 0x28, 0x66, 0x0d, 0xd9, 0xbb, 0x07, 0x32, 0x51, 0x3d, 0xb4, 0xe2, 0xfa, 0x27, 0x8b, 0x60, 0xcd, 0xe3, 0x68, 0x2a, 0x4c, 0xcd }, - // 21 - { 0xac, 0x9b, 0x61, 0xd4, 0x46, 0x64, 0x8c, 0x30, 0x05, 0xd7, 0x89, 0x2b, 0xf3, 0xa8, 0x71, 0x9f, 0x4c, 0x81, 0x81, 0xcf, 0xdc, 0xbc, 0x2b, 0x79, 0xfe, 0xf1, 0x0a, 0x27, 0x9b, 0x91, 0x10, 0x95 }, - // 22 - { 0x7b, 0xf8, 0xb2, 0x29, 0x59, 0xe3, 0x4e, 0x3a, 0x43, 0xf7, 0x07, 0x92, 0x23, 0xe8, 0x3a, 0x97, 0x54, 0x61, 0x7d, 0x39, 0x1e, 0x21, 0x3d, 0xfd, 0x80, 0x8e, 0x41, 0xb9, 0xbe, 0xad, 0x4c, 0xe7 }, - // 23 - { 0x68, 0xd4, 0xb5, 0xd4, 0xfa, 0x0e, 0x30, 0x2b, 0x64, 0xcc, 0xc5, 0xaf, 0x79, 0x29, 0x13, 0xac, 0x4c, 0x88, 0xec, 0x95, 0xc0, 0x7d, 0xdf, 0x40, 0x69, 0x42, 0x56, 0xeb, 0x88, 0xce, 0x9f, 0x3d }, - // 24 - { 0xb2, 0xc2, 0x42, 0x0f, 0x05, 0xf9, 0xab, 0xe3, 0x63, 0x15, 0x91, 0x93, 0x36, 0xb3, 0x7e, 0x4e, 0x0f, 0xa3, 0x3f, 0xf7, 0xe7, 0x6a, 0x49, 0x27, 0x67, 0x00, 0x6f, 0xdb, 0x5d, 0x93, 0x54, 0x62 }, - // 25 - { 0x13, 0x4f, 0x61, 0xbb, 0xd0, 0xbb, 0xb6, 0x9a, 0xed, 0x53, 0x43, 0x90, 0x45, 0x51, 0xa3, 0xe6, 0xc1, 0xaa, 0x7d, 0xcd, 0xd7, 0x7e, 0x90, 0x3e, 0x70, 0x23, 0xeb, 0x7c, 0x60, 0x32, 0x0a, 0xa7 }, - // 26 - { 0x46, 0x93, 0xf9, 0xbf, 0xf7, 0xd4, 0xf3, 0x98, 0x6a, 0x7d, 0x17, 0x6e, 0x6e, 0x06, 0xf7, 0x2a, 0xd1, 0x49, 0x0d, 0x80, 0x5c, 0x99, 0xe2, 0x53, 0x47, 0xb8, 0xde, 0x77, 0xb4, 0xdb, 0x6d, 0x9b }, - // 27 - { 0x85, 0x3e, 0x26, 0xf7, 0x41, 0x95, 0x3b, 0x0f, 0xd5, 0xbd, 0xb4, 0x24, 0xe8, 0xab, 0x9e, 0x8b, 0x37, 0x50, 0xea, 0xa8, 0xef, 0x61, 0xe4, 0x79, 0x02, 0xc9, 0x1e, 0x55, 0x4e, 0x9c, 0x73, 0xb9 }, - // 28 - { 0xf7, 0xde, 0x53, 0x63, 0x61, 0xab, 0xaa, 0x0e, 0x15, 0x81, 0x56, 0xcf, 0x0e, 0xa4, 0xf6, 0x3a, 0x99, 0xb5, 0xe4, 0x05, 0x4f, 0x8f, 0xa4, 0xc9, 0xd4, 0x5f, 0x62, 0x85, 0xca, 0xd5, 0x56, 0x94 }, - // 29 - { 0x4c, 0x23, 0x06, 0x08, 0x86, 0x0a, 0x99, 0xae, 0x8d, 0x7b, 0xd5, 0xc2, 0xcc, 0x17, 0xfa, 0x52, 0x09, 0x6b, 0x9a, 0x61, 0xbe, 0xdb, 0x17, 0xcb, 0x76, 0x17, 0x86, 0x4a, 0xd2, 0x9c, 0xa7, 0xa6 }, - // 30 - { 0xae, 0xb9, 0x20, 0xea, 0x87, 0x95, 0x2d, 0xad, 0xb1, 0xfb, 0x75, 0x92, 0x91, 0xe3, 0x38, 0x81, 0x39, 0xa8, 0x72, 0x86, 0x50, 0x01, 0x88, 0x6e, 0xd8, 0x47, 0x52, 0xe9, 0x3c, 0x25, 0x0c, 0x2a }, - // 31 - { 0xab, 0xa4, 0xad, 0x9b, 0x48, 0x0b, 0x9d, 0xf3, 0xd0, 0x8c, 0xa5, 0xe8, 0x7b, 0x0c, 0x24, 0x40, 0xd4, 0xe4, 0xea, 0x21, 0x22, 0x4c, 0x2e, 0xb4, 0x2c, 0xba, 0xe4, 0x69, 0xd0, 0x89, 0xb9, 0x31 }, - // 32 - { 0x05, 0x82, 0x56, 0x07, 0xd7, 0xfd, 0xf2, 0xd8, 0x2e, 0xf4, 0xc3, 0xc8, 0xc2, 0xae, 0xa9, 0x61, 0xad, 0x98, 0xd6, 0x0e, 0xdf, 0xf7, 0xd0, 0x18, 0x98, 0x3e, 0x21, 0x20, 0x4c, 0x0d, 0x93, 0xd1 }, - // 33 - { 0xa7, 0x42, 0xf8, 0xb6, 0xaf, 0x82, 0xd8, 0xa6, 0xca, 0x23, 0x57, 0xc5, 0xf1, 0xcf, 0x91, 0xde, 0xfb, 0xd0, 0x66, 0x26, 0x7d, 0x75, 0xc0, 0x48, 0xb3, 0x52, 0x36, 0x65, 0x85, 0x02, 0x59, 0x62 }, - // 34 - { 0x2b, 0xca, 0xc8, 0x95, 0x99, 0x00, 0x0b, 0x42, 0xc9, 0x5a, 0xe2, 0x38, 0x35, 0xa7, 0x13, 0x70, 0x4e, 0xd7, 0x97, 0x89, 0xc8, 0x4f, 0xef, 0x14, 0x9a, 0x87, 0x4f, 0xf7, 0x33, 0xf0, 0x17, 0xa2 }, - // 35 - { 0xac, 0x1e, 0xd0, 0x7d, 0x04, 0x8f, 0x10, 0x5a, 0x9e, 0x5b, 0x7a, 0xb8, 0x5b, 0x09, 0xa4, 0x92, 0xd5, 0xba, 0xff, 0x14, 0xb8, 0xbf, 0xb0, 0xe9, 0xfd, 0x78, 0x94, 0x86, 0xee, 0xa2, 0xb9, 0x74 }, - // 36 - { 0xe4, 0x8d, 0x0e, 0xcf, 0xaf, 0x49, 0x7d, 0x5b, 0x27, 0xc2, 0x5d, 0x99, 0xe1, 0x56, 0xcb, 0x05, 0x79, 0xd4, 0x40, 0xd6, 0xe3, 0x1f, 0xb6, 0x24, 0x73, 0x69, 0x6d, 0xbf, 0x95, 0xe0, 0x10, 0xe4 }, - // 37 - { 0x12, 0xa9, 0x1f, 0xad, 0xf8, 0xb2, 0x16, 0x44, 0xfd, 0x0f, 0x93, 0x4f, 0x3c, 0x4a, 0x8f, 0x62, 0xba, 0x86, 0x2f, 0xfd, 0x20, 0xe8, 0xe9, 0x61, 0x15, 0x4c, 0x15, 0xc1, 0x38, 0x84, 0xed, 0x3d }, - // 38 - { 0x7c, 0xbe, 0xe9, 0x6e, 0x13, 0x98, 0x97, 0xdc, 0x98, 0xfb, 0xef, 0x3b, 0xe8, 0x1a, 0xd4, 0xd9, 0x64, 0xd2, 0x35, 0xcb, 0x12, 0x14, 0x1f, 0xb6, 0x67, 0x27, 0xe6, 0xe5, 0xdf, 0x73, 0xa8, 0x78 }, - // 39 - { 0xeb, 0xf6, 0x6a, 0xbb, 0x59, 0x7a, 0xe5, 0x72, 0xa7, 0x29, 0x7c, 0xb0, 0x87, 0x1e, 0x35, 0x5a, 0xcc, 0xaf, 0xad, 0x83, 0x77, 0xb8, 0xe7, 0x8b, 0xf1, 0x64, 0xce, 0x2a, 0x18, 0xde, 0x4b, 0xaf }, - // 40 - { 0x71, 0xb9, 0x33, 0xb0, 0x7e, 0x4f, 0xf7, 0x81, 0x8c, 0xe0, 0x59, 0xd0, 0x08, 0x82, 0x9e, 0x45, 0x3c, 0x6f, 0xf0, 0x2e, 0xc0, 0xa7, 0xdb, 0x39, 0x3f, 0xc2, 0xd8, 0x70, 0xf3, 0x7a, 0x72, 0x86 }, - // 41 - { 0x7c, 0xf7, 0xc5, 0x13, 0x31, 0x22, 0x0b, 0x8d, 0x3e, 0xba, 0xed, 0x9c, 0x29, 0x39, 0x8a, 0x16, 0xd9, 0x81, 0x56, 0xe2, 0x61, 0x3c, 0xb0, 0x88, 0xf2, 0xb0, 0xe0, 0x8a, 0x1b, 0xe4, 0xcf, 0x4f }, - // 42 - { 0x3e, 0x41, 0xa1, 0x08, 0xe0, 0xf6, 0x4a, 0xd2, 0x76, 0xb9, 0x79, 0xe1, 0xce, 0x06, 0x82, 0x79, 0xe1, 0x6f, 0x7b, 0xc7, 0xe4, 0xaa, 0x1d, 0x21, 0x1e, 0x17, 0xb8, 0x11, 0x61, 0xdf, 0x16, 0x02 }, - // 43 - { 0x88, 0x65, 0x02, 0xa8, 0x2a, 0xb4, 0x7b, 0xa8, 0xd8, 0x67, 0x10, 0xaa, 0x9d, 0xe3, 0xd4, 0x6e, 0xa6, 0x5c, 0x47, 0xaf, 0x6e, 0xe8, 0xde, 0x45, 0x0c, 0xce, 0xb8, 0xb1, 0x1b, 0x04, 0x5f, 0x50 }, - // 44 - { 0xc0, 0x21, 0xbc, 0x5f, 0x09, 0x54, 0xfe, 0xe9, 0x4f, 0x46, 0xea, 0x09, 0x48, 0x7e, 0x10, 0xa8, 0x48, 0x40, 0xd0, 0x2f, 0x64, 0x81, 0x0b, 0xc0, 0x8d, 0x9e, 0x55, 0x1f, 0x7d, 0x41, 0x68, 0x14 }, - // 45 - { 0x20, 0x30, 0x51, 0x6e, 0x8a, 0x5f, 0xe1, 0x9a, 0xe7, 0x9c, 0x33, 0x6f, 0xce, 0x26, 0x38, 0x2a, 0x74, 0x9d, 0x3f, 0xd0, 0xec, 0x91, 0xe5, 0x37, 0xd4, 0xbd, 0x23, 0x58, 0xc1, 0x2d, 0xfb, 0x22 }, - // 46 - { 0x55, 0x66, 0x98, 0xda, 0xc8, 0x31, 0x7f, 0xd3, 0x6d, 0xfb, 0xdf, 0x25, 0xa7, 0x9c, 0xb1, 0x12, 0xd5, 0x42, 0x58, 0x60, 0x60, 0x5c, 0xba, 0xf5, 0x07, 0xf2, 0x3b, 0xf7, 0xe9, 0xf4, 0x2a, 0xfe }, - // 47 - { 0x2f, 0x86, 0x7b, 0xa6, 0x77, 0x73, 0xfd, 0xc3, 0xe9, 0x2f, 0xce, 0xd9, 0x9a, 0x64, 0x09, 0xad, 0x39, 0xd0, 0xb8, 0x80, 0xfd, 0xe8, 0xf1, 0x09, 0xa8, 0x17, 0x30, 0xc4, 0x45, 0x1d, 0x01, 0x78 }, - // 48 - { 0x17, 0x2e, 0xc2, 0x18, 0xf1, 0x19, 0xdf, 0xae, 0x98, 0x89, 0x6d, 0xff, 0x29, 0xdd, 0x98, 0x76, 0xc9, 0x4a, 0xf8, 0x74, 0x17, 0xf9, 0xae, 0x4c, 0x70, 0x14, 0xbb, 0x4e, 0x4b, 0x96, 0xaf, 0xc7 }, - // 49 - { 0x3f, 0x85, 0x81, 0x4a, 0x18, 0x19, 0x5f, 0x87, 0x9a, 0xa9, 0x62, 0xf9, 0x5d, 0x26, 0xbd, 0x82, 0xa2, 0x78, 0xf2, 0xb8, 0x23, 0x20, 0x21, 0x8f, 0x6b, 0x3b, 0xd6, 0xf7, 0xf6, 0x67, 0xa6, 0xd9 }, - // 50 - { 0x1b, 0x61, 0x8f, 0xba, 0xa5, 0x66, 0xb3, 0xd4, 0x98, 0xc1, 0x2e, 0x98, 0x2c, 0x9e, 0xc5, 0x2e, 0x4d, 0xa8, 0x5a, 0x8c, 0x54, 0xf3, 0x8f, 0x34, 0xc0, 0x90, 0x39, 0x4f, 0x23, 0xc1, 0x84, 0xc1 }, - // 51 - { 0x0c, 0x75, 0x8f, 0xb5, 0x69, 0x2f, 0xfd, 0x41, 0xa3, 0x57, 0x5d, 0x0a, 0xf0, 0x0c, 0xc7, 0xfb, 0xf2, 0xcb, 0xe5, 0x90, 0x5a, 0x58, 0x32, 0x3a, 0x88, 0xae, 0x42, 0x44, 0xf6, 0xe4, 0xc9, 0x93 }, - // 52 - { 0xa9, 0x31, 0x36, 0x0c, 0xad, 0x62, 0x8c, 0x7f, 0x12, 0xa6, 0xc1, 0xc4, 0xb7, 0x53, 0xb0, 0xf4, 0x06, 0x2a, 0xef, 0x3c, 0xe6, 0x5a, 0x1a, 0xe3, 0xf1, 0x93, 0x69, 0xda, 0xdf, 0x3a, 0xe2, 0x3d }, - // 53 - { 0xcb, 0xac, 0x7d, 0x77, 0x3b, 0x1e, 0x3b, 0x3c, 0x66, 0x91, 0xd7, 0xab, 0xb7, 0xe9, 0xdf, 0x04, 0x5c, 0x8b, 0xa1, 0x92, 0x68, 0xde, 0xd1, 0x53, 0x20, 0x7f, 0x5e, 0x80, 0x43, 0x52, 0xec, 0x5d }, - // 54 - { 0x23, 0xa1, 0x96, 0xd3, 0x80, 0x2e, 0xd3, 0xc1, 0xb3, 0x84, 0x01, 0x9a, 0x82, 0x32, 0x58, 0x40, 0xd3, 0x2f, 0x71, 0x95, 0x0c, 0x45, 0x80, 0xb0, 0x34, 0x45, 0xe0, 0x89, 0x8e, 0x14, 0x05, 0x3c }, - // 55 - { 0xf4, 0x49, 0x54, 0x70, 0xf2, 0x26, 0xc8, 0xc2, 0x14, 0xbe, 0x08, 0xfd, 0xfa, 0xd4, 0xbc, 0x4a, 0x2a, 0x9d, 0xbe, 0xa9, 0x13, 0x6a, 0x21, 0x0d, 0xf0, 0xd4, 0xb6, 0x49, 0x29, 0xe6, 0xfc, 0x14 }, - // 56 - { 0xe2, 0x90, 0xdd, 0x27, 0x0b, 0x46, 0x7f, 0x34, 0xab, 0x1c, 0x00, 0x2d, 0x34, 0x0f, 0xa0, 0x16, 0x25, 0x7f, 0xf1, 0x9e, 0x58, 0x33, 0xfd, 0xbb, 0xf2, 0xcb, 0x40, 0x1c, 0x3b, 0x28, 0x17, 0xde }, - // 57 - { 0x9f, 0xc7, 0xb5, 0xde, 0xd3, 0xc1, 0x50, 0x42, 0xb2, 0xa6, 0x58, 0x2d, 0xc3, 0x9b, 0xe0, 0x16, 0xd2, 0x4a, 0x68, 0x2d, 0x5e, 0x61, 0xad, 0x1e, 0xff, 0x9c, 0x63, 0x30, 0x98, 0x48, 0xf7, 0x06 }, - // 58 - { 0x8c, 0xca, 0x67, 0xa3, 0x6d, 0x17, 0xd5, 0xe6, 0x34, 0x1c, 0xb5, 0x92, 0xfd, 0x7b, 0xef, 0x99, 0x26, 0xc9, 0xe3, 0xaa, 0x10, 0x27, 0xea, 0x11, 0xa7, 0xd8, 0xbd, 0x26, 0x0b, 0x57, 0x6e, 0x04 }, - // 59 - { 0x40, 0x93, 0x92, 0xf5, 0x60, 0xf8, 0x68, 0x31, 0xda, 0x43, 0x73, 0xee, 0x5e, 0x00, 0x74, 0x26, 0x05, 0x95, 0xd7, 0xbc, 0x24, 0x18, 0x3b, 0x60, 0xed, 0x70, 0x0d, 0x45, 0x83, 0xd3, 0xf6, 0xf0 }, - // 60 - { 0x28, 0x02, 0x16, 0x5d, 0xe0, 0x90, 0x91, 0x55, 0x46, 0xf3, 0x39, 0x8c, 0xd8, 0x49, 0x16, 0x4a, 0x19, 0xf9, 0x2a, 0xdb, 0xc3, 0x61, 0xad, 0xc9, 0x9b, 0x0f, 0x20, 0xc8, 0xea, 0x07, 0x10, 0x54 }, - // 61 - { 0xad, 0x83, 0x91, 0x68, 0xd9, 0xf8, 0xa4, 0xbe, 0x95, 0xba, 0x9e, 0xf9, 0xa6, 0x92, 0xf0, 0x72, 0x56, 0xae, 0x43, 0xfe, 0x6f, 0x98, 0x64, 0xe2, 0x90, 0x69, 0x1b, 0x02, 0x56, 0xce, 0x50, 0xa9 }, - // 62 - { 0x75, 0xfd, 0xaa, 0x50, 0x38, 0xc2, 0x84, 0xb8, 0x6d, 0x6e, 0x8a, 0xff, 0xe8, 0xb2, 0x80, 0x7e, 0x46, 0x7b, 0x86, 0x60, 0x0e, 0x79, 0xaf, 0x36, 0x89, 0xfb, 0xc0, 0x63, 0x28, 0xcb, 0xf8, 0x94 }, - // 63 - { 0xe5, 0x7c, 0xb7, 0x94, 0x87, 0xdd, 0x57, 0x90, 0x24, 0x32, 0xb2, 0x50, 0x73, 0x38, 0x13, 0xbd, 0x96, 0xa8, 0x4e, 0xfc, 0xe5, 0x9f, 0x65, 0x0f, 0xac, 0x26, 0xe6, 0x69, 0x6a, 0xef, 0xaf, 0xc3 }, - // 64 - { 0x56, 0xf3, 0x4e, 0x8b, 0x96, 0x55, 0x7e, 0x90, 0xc1, 0xf2, 0x4b, 0x52, 0xd0, 0xc8, 0x9d, 0x51, 0x08, 0x6a, 0xcf, 0x1b, 0x00, 0xf6, 0x34, 0xcf, 0x1d, 0xde, 0x92, 0x33, 0xb8, 0xea, 0xaa, 0x3e }, - // 65 - { 0x1b, 0x53, 0xee, 0x94, 0xaa, 0xf3, 0x4e, 0x4b, 0x15, 0x9d, 0x48, 0xde, 0x35, 0x2c, 0x7f, 0x06, 0x61, 0xd0, 0xa4, 0x0e, 0xdf, 0xf9, 0x5a, 0x0b, 0x16, 0x39, 0xb4, 0x09, 0x0e, 0x97, 0x44, 0x72 }, - // 66 - { 0x05, 0x70, 0x5e, 0x2a, 0x81, 0x75, 0x7c, 0x14, 0xbd, 0x38, 0x3e, 0xa9, 0x8d, 0xda, 0x54, 0x4e, 0xb1, 0x0e, 0x6b, 0xc0, 0x7b, 0xae, 0x43, 0x5e, 0x25, 0x18, 0xdb, 0xe1, 0x33, 0x52, 0x53, 0x75 }, - // 67 - { 0xd8, 0xb2, 0x86, 0x6e, 0x8a, 0x30, 0x9d, 0xb5, 0x3e, 0x52, 0x9e, 0xc3, 0x29, 0x11, 0xd8, 0x2f, 0x5c, 0xa1, 0x6c, 0xff, 0x76, 0x21, 0x68, 0x91, 0xa9, 0x67, 0x6a, 0xa3, 0x1a, 0xaa, 0x6c, 0x42 }, - // 68 - { 0xf5, 0x04, 0x1c, 0x24, 0x12, 0x70, 0xeb, 0x04, 0xc7, 0x1e, 0xc2, 0xc9, 0x5d, 0x4c, 0x38, 0xd8, 0x03, 0xb1, 0x23, 0x7b, 0x0f, 0x29, 0xfd, 0x4d, 0xb3, 0xeb, 0x39, 0x76, 0x69, 0xe8, 0x86, 0x99 }, - // 69 - { 0x9a, 0x4c, 0xe0, 0x77, 0xc3, 0x49, 0x32, 0x2f, 0x59, 0x5e, 0x0e, 0xe7, 0x9e, 0xd0, 0xda, 0x5f, 0xab, 0x66, 0x75, 0x2c, 0xbf, 0xef, 0x8f, 0x87, 0xd0, 0xe9, 0xd0, 0x72, 0x3c, 0x75, 0x30, 0xdd }, - // 70 - { 0x65, 0x7b, 0x09, 0xf3, 0xd0, 0xf5, 0x2b, 0x5b, 0x8f, 0x2f, 0x97, 0x16, 0x3a, 0x0e, 0xdf, 0x0c, 0x04, 0xf0, 0x75, 0x40, 0x8a, 0x07, 0xbb, 0xeb, 0x3a, 0x41, 0x01, 0xa8, 0x91, 0x99, 0x0d, 0x62 }, - // 71 - { 0x1e, 0x3f, 0x7b, 0xd5, 0xa5, 0x8f, 0xa5, 0x33, 0x34, 0x4a, 0xa8, 0xed, 0x3a, 0xc1, 0x22, 0xbb, 0x9e, 0x70, 0xd4, 0xef, 0x50, 0xd0, 0x04, 0x53, 0x08, 0x21, 0x94, 0x8f, 0x5f, 0xe6, 0x31, 0x5a }, - // 72 - { 0x80, 0xdc, 0xcf, 0x3f, 0xd8, 0x3d, 0xfd, 0x0d, 0x35, 0xaa, 0x28, 0x58, 0x59, 0x22, 0xab, 0x89, 0xd5, 0x31, 0x39, 0x97, 0x67, 0x3e, 0xaf, 0x90, 0x5c, 0xea, 0x9c, 0x0b, 0x22, 0x5c, 0x7b, 0x5f }, - // 73 - { 0x8a, 0x0d, 0x0f, 0xbf, 0x63, 0x77, 0xd8, 0x3b, 0xb0, 0x8b, 0x51, 0x4b, 0x4b, 0x1c, 0x43, 0xac, 0xc9, 0x5d, 0x75, 0x17, 0x14, 0xf8, 0x92, 0x56, 0x45, 0xcb, 0x6b, 0xc8, 0x56, 0xca, 0x15, 0x0a }, - // 74 - { 0x9f, 0xa5, 0xb4, 0x87, 0x73, 0x8a, 0xd2, 0x84, 0x4c, 0xc6, 0x34, 0x8a, 0x90, 0x19, 0x18, 0xf6, 0x59, 0xa3, 0xb8, 0x9e, 0x9c, 0x0d, 0xfe, 0xea, 0xd3, 0x0d, 0xd9, 0x4b, 0xcf, 0x42, 0xef, 0x8e }, - // 75 - { 0x80, 0x83, 0x2c, 0x4a, 0x16, 0x77, 0xf5, 0xea, 0x25, 0x60, 0xf6, 0x68, 0xe9, 0x35, 0x4d, 0xd3, 0x69, 0x97, 0xf0, 0x37, 0x28, 0xcf, 0xa5, 0x5e, 0x1b, 0x38, 0x33, 0x7c, 0x0c, 0x9e, 0xf8, 0x18 }, - // 76 - { 0xab, 0x37, 0xdd, 0xb6, 0x83, 0x13, 0x7e, 0x74, 0x08, 0x0d, 0x02, 0x6b, 0x59, 0x0b, 0x96, 0xae, 0x9b, 0xb4, 0x47, 0x72, 0x2f, 0x30, 0x5a, 0x5a, 0xc5, 0x70, 0xec, 0x1d, 0xf9, 0xb1, 0x74, 0x3c }, - // 77 - { 0x3e, 0xe7, 0x35, 0xa6, 0x94, 0xc2, 0x55, 0x9b, 0x69, 0x3a, 0xa6, 0x86, 0x29, 0x36, 0x1e, 0x15, 0xd1, 0x22, 0x65, 0xad, 0x6a, 0x3d, 0xed, 0xf4, 0x88, 0xb0, 0xb0, 0x0f, 0xac, 0x97, 0x54, 0xba }, - // 78 - { 0xd6, 0xfc, 0xd2, 0x32, 0x19, 0xb6, 0x47, 0xe4, 0xcb, 0xd5, 0xeb, 0x2d, 0x0a, 0xd0, 0x1e, 0xc8, 0x83, 0x8a, 0x4b, 0x29, 0x01, 0xfc, 0x32, 0x5c, 0xc3, 0x70, 0x19, 0x81, 0xca, 0x6c, 0x88, 0x8b }, - // 79 - { 0x05, 0x20, 0xec, 0x2f, 0x5b, 0xf7, 0xa7, 0x55, 0xda, 0xcb, 0x50, 0xc6, 0xbf, 0x23, 0x3e, 0x35, 0x15, 0x43, 0x47, 0x63, 0xdb, 0x01, 0x39, 0xcc, 0xd9, 0xfa, 0xef, 0xbb, 0x82, 0x07, 0x61, 0x2d }, - // 80 - { 0xaf, 0xf3, 0xb7, 0x5f, 0x3f, 0x58, 0x12, 0x64, 0xd7, 0x66, 0x16, 0x62, 0xb9, 0x2f, 0x5a, 0xd3, 0x7c, 0x1d, 0x32, 0xbd, 0x45, 0xff, 0x81, 0xa4, 0xed, 0x8a, 0xdc, 0x9e, 0xf3, 0x0d, 0xd9, 0x89 }, - // 81 - { 0xd0, 0xdd, 0x65, 0x0b, 0xef, 0xd3, 0xba, 0x63, 0xdc, 0x25, 0x10, 0x2c, 0x62, 0x7c, 0x92, 0x1b, 0x9c, 0xbe, 0xb0, 0xb1, 0x30, 0x68, 0x69, 0x35, 0xb5, 0xc9, 0x27, 0xcb, 0x7c, 0xcd, 0x5e, 0x3b }, - // 82 - { 0xe1, 0x14, 0x98, 0x16, 0xb1, 0x0a, 0x85, 0x14, 0xfb, 0x3e, 0x2c, 0xab, 0x2c, 0x08, 0xbe, 0xe9, 0xf7, 0x3c, 0xe7, 0x62, 0x21, 0x70, 0x12, 0x46, 0xa5, 0x89, 0xbb, 0xb6, 0x73, 0x02, 0xd8, 0xa9 }, - // 83 - { 0x7d, 0xa3, 0xf4, 0x41, 0xde, 0x90, 0x54, 0x31, 0x7e, 0x72, 0xb5, 0xdb, 0xf9, 0x79, 0xda, 0x01, 0xe6, 0xbc, 0xee, 0xbb, 0x84, 0x78, 0xea, 0xe6, 0xa2, 0x28, 0x49, 0xd9, 0x02, 0x92, 0x63, 0x5c }, - // 84 - { 0x12, 0x30, 0xb1, 0xfc, 0x8a, 0x7d, 0x92, 0x15, 0xed, 0xc2, 0xd4, 0xa2, 0xde, 0xcb, 0xdd, 0x0a, 0x6e, 0x21, 0x6c, 0x92, 0x42, 0x78, 0xc9, 0x1f, 0xc5, 0xd1, 0x0e, 0x7d, 0x60, 0x19, 0x2d, 0x94 }, - // 85 - { 0x57, 0x50, 0xd7, 0x16, 0xb4, 0x80, 0x8f, 0x75, 0x1f, 0xeb, 0xc3, 0x88, 0x06, 0xba, 0x17, 0x0b, 0xf6, 0xd5, 0x19, 0x9a, 0x78, 0x16, 0xbe, 0x51, 0x4e, 0x3f, 0x93, 0x2f, 0xbe, 0x0c, 0xb8, 0x71 }, - // 86 - { 0x6f, 0xc5, 0x9b, 0x2f, 0x10, 0xfe, 0xba, 0x95, 0x4a, 0xa6, 0x82, 0x0b, 0x3c, 0xa9, 0x87, 0xee, 0x81, 0xd5, 0xcc, 0x1d, 0xa3, 0xc6, 0x3c, 0xe8, 0x27, 0x30, 0x1c, 0x56, 0x9d, 0xfb, 0x39, 0xce }, - // 87 - { 0xc7, 0xc3, 0xfe, 0x1e, 0xeb, 0xdc, 0x7b, 0x5a, 0x93, 0x93, 0x26, 0xe8, 0xdd, 0xb8, 0x3e, 0x8b, 0xf2, 0xb7, 0x80, 0xb6, 0x56, 0x78, 0xcb, 0x62, 0xf2, 0x08, 0xb0, 0x40, 0xab, 0xdd, 0x35, 0xe2 }, - // 88 - { 0x0c, 0x75, 0xc1, 0xa1, 0x5c, 0xf3, 0x4a, 0x31, 0x4e, 0xe4, 0x78, 0xf4, 0xa5, 0xce, 0x0b, 0x8a, 0x6b, 0x36, 0x52, 0x8e, 0xf7, 0xa8, 0x20, 0x69, 0x6c, 0x3e, 0x42, 0x46, 0xc5, 0xa1, 0x58, 0x64 }, - // 89 - { 0x21, 0x6d, 0xc1, 0x2a, 0x10, 0x85, 0x69, 0xa3, 0xc7, 0xcd, 0xde, 0x4a, 0xed, 0x43, 0xa6, 0xc3, 0x30, 0x13, 0x9d, 0xda, 0x3c, 0xcc, 0x4a, 0x10, 0x89, 0x05, 0xdb, 0x38, 0x61, 0x89, 0x90, 0x50 }, - // 90 - { 0xa5, 0x7b, 0xe6, 0xae, 0x67, 0x56, 0xf2, 0x8b, 0x02, 0xf5, 0x9d, 0xad, 0xf7, 0xe0, 0xd7, 0xd8, 0x80, 0x7f, 0x10, 0xfa, 0x15, 0xce, 0xd1, 0xad, 0x35, 0x85, 0x52, 0x1a, 0x1d, 0x99, 0x5a, 0x89 }, - // 91 - { 0x81, 0x6a, 0xef, 0x87, 0x59, 0x53, 0x71, 0x6c, 0xd7, 0xa5, 0x81, 0xf7, 0x32, 0xf5, 0x3d, 0xd4, 0x35, 0xda, 0xb6, 0x6d, 0x09, 0xc3, 0x61, 0xd2, 0xd6, 0x59, 0x2d, 0xe1, 0x77, 0x55, 0xd8, 0xa8 }, - // 92 - { 0x9a, 0x76, 0x89, 0x32, 0x26, 0x69, 0x3b, 0x6e, 0xa9, 0x7e, 0x6a, 0x73, 0x8f, 0x9d, 0x10, 0xfb, 0x3d, 0x0b, 0x43, 0xae, 0x0e, 0x8b, 0x7d, 0x81, 0x23, 0xea, 0x76, 0xce, 0x97, 0x98, 0x9c, 0x7e }, - // 93 - { 0x8d, 0xae, 0xdb, 0x9a, 0x27, 0x15, 0x29, 0xdb, 0xb7, 0xdc, 0x3b, 0x60, 0x7f, 0xe5, 0xeb, 0x2d, 0x32, 0x11, 0x77, 0x07, 0x58, 0xdd, 0x3b, 0x0a, 0x35, 0x93, 0xd2, 0xd7, 0x95, 0x4e, 0x2d, 0x5b }, - // 94 - { 0x16, 0xdb, 0xc0, 0xaa, 0x5d, 0xd2, 0xc7, 0x74, 0xf5, 0x05, 0x10, 0x0f, 0x73, 0x37, 0x86, 0xd8, 0xa1, 0x75, 0xfc, 0xbb, 0xb5, 0x9c, 0x43, 0xe1, 0xfb, 0xff, 0x3e, 0x1e, 0xaf, 0x31, 0xcb, 0x4a }, - // 95 - { 0x86, 0x06, 0xcb, 0x89, 0x9c, 0x6a, 0xea, 0xf5, 0x1b, 0x9d, 0xb0, 0xfe, 0x49, 0x24, 0xa9, 0xfd, 0x5d, 0xab, 0xc1, 0x9f, 0x88, 0x26, 0xf2, 0xbc, 0x1c, 0x1d, 0x7d, 0xa1, 0x4d, 0x2c, 0x2c, 0x99 }, - // 96 - { 0x84, 0x79, 0x73, 0x1a, 0xed, 0xa5, 0x7b, 0xd3, 0x7e, 0xad, 0xb5, 0x1a, 0x50, 0x7e, 0x30, 0x7f, 0x3b, 0xd9, 0x5e, 0x69, 0xdb, 0xca, 0x94, 0xf3, 0xbc, 0x21, 0x72, 0x60, 0x66, 0xad, 0x6d, 0xfd }, - // 97 - { 0x58, 0x47, 0x3a, 0x9e, 0xa8, 0x2e, 0xfa, 0x3f, 0x3b, 0x3d, 0x8f, 0xc8, 0x3e, 0xd8, 0x86, 0x31, 0x27, 0xb3, 0x3a, 0xe8, 0xde, 0xae, 0x63, 0x07, 0x20, 0x1e, 0xdb, 0x6d, 0xde, 0x61, 0xde, 0x29 }, - // 98 - { 0x9a, 0x92, 0x55, 0xd5, 0x3a, 0xf1, 0x16, 0xde, 0x8b, 0xa2, 0x7c, 0xe3, 0x5b, 0x4c, 0x7e, 0x15, 0x64, 0x06, 0x57, 0xa0, 0xfc, 0xb8, 0x88, 0xc7, 0x0d, 0x95, 0x43, 0x1d, 0xac, 0xd8, 0xf8, 0x30 }, - // 99 - { 0x9e, 0xb0, 0x5f, 0xfb, 0xa3, 0x9f, 0xd8, 0x59, 0x6a, 0x45, 0x49, 0x3e, 0x18, 0xd2, 0x51, 0x0b, 0xf3, 0xef, 0x06, 0x5c, 0x51, 0xd6, 0xe1, 0x3a, 0xbe, 0x66, 0xaa, 0x57, 0xe0, 0x5c, 0xfd, 0xb7 }, - // 100 - { 0x81, 0xdc, 0xc3, 0xa5, 0x05, 0xea, 0xce, 0x3f, 0x87, 0x9d, 0x8f, 0x70, 0x27, 0x76, 0x77, 0x0f, 0x9d, 0xf5, 0x0e, 0x52, 0x1d, 0x14, 0x28, 0xa8, 0x5d, 0xaf, 0x04, 0xf9, 0xad, 0x21, 0x50, 0xe0 }, - // 101 - { 0xe3, 0xe3, 0xc4, 0xaa, 0x3a, 0xcb, 0xbc, 0x85, 0x33, 0x2a, 0xf9, 0xd5, 0x64, 0xbc, 0x24, 0x16, 0x5e, 0x16, 0x87, 0xf6, 0xb1, 0xad, 0xcb, 0xfa, 0xe7, 0x7a, 0x8f, 0x03, 0xc7, 0x2a, 0xc2, 0x8c }, - // 102 - { 0x67, 0x46, 0xc8, 0x0b, 0x4e, 0xb5, 0x6a, 0xea, 0x45, 0xe6, 0x4e, 0x72, 0x89, 0xbb, 0xa3, 0xed, 0xbf, 0x45, 0xec, 0xf8, 0x20, 0x64, 0x81, 0xff, 0x63, 0x02, 0x12, 0x29, 0x84, 0xcd, 0x52, 0x6a }, - // 103 - { 0x2b, 0x62, 0x8e, 0x52, 0x76, 0x4d, 0x7d, 0x62, 0xc0, 0x86, 0x8b, 0x21, 0x23, 0x57, 0xcd, 0xd1, 0x2d, 0x91, 0x49, 0x82, 0x2f, 0x4e, 0x98, 0x45, 0xd9, 0x18, 0xa0, 0x8d, 0x1a, 0xe9, 0x90, 0xc0 }, - // 104 - { 0xe4, 0xbf, 0xe8, 0x0d, 0x58, 0xc9, 0x19, 0x94, 0x61, 0x39, 0x09, 0xdc, 0x4b, 0x1a, 0x12, 0x49, 0x68, 0x96, 0xc0, 0x04, 0xaf, 0x7b, 0x57, 0x01, 0x48, 0x3d, 0xe4, 0x5d, 0x28, 0x23, 0xd7, 0x8e }, - // 105 - { 0xeb, 0xb4, 0xba, 0x15, 0x0c, 0xef, 0x27, 0x34, 0x34, 0x5b, 0x5d, 0x64, 0x1b, 0xbe, 0xd0, 0x3a, 0x21, 0xea, 0xfa, 0xe9, 0x33, 0xc9, 0x9e, 0x00, 0x92, 0x12, 0xef, 0x04, 0x57, 0x4a, 0x85, 0x30 }, - // 106 - { 0x39, 0x66, 0xec, 0x73, 0xb1, 0x54, 0xac, 0xc6, 0x97, 0xac, 0x5c, 0xf5, 0xb2, 0x4b, 0x40, 0xbd, 0xb0, 0xdb, 0x9e, 0x39, 0x88, 0x36, 0xd7, 0x6d, 0x4b, 0x88, 0x0e, 0x3b, 0x2a, 0xf1, 0xaa, 0x27 }, - // 107 - { 0xef, 0x7e, 0x48, 0x31, 0xb3, 0xa8, 0x46, 0x36, 0x51, 0x8d, 0x6e, 0x4b, 0xfc, 0xe6, 0x4a, 0x43, 0xdb, 0x2a, 0x5d, 0xda, 0x9c, 0xca, 0x2b, 0x44, 0xf3, 0x90, 0x33, 0xbd, 0xc4, 0x0d, 0x62, 0x43 }, - // 108 - { 0x7a, 0xbf, 0x6a, 0xcf, 0x5c, 0x8e, 0x54, 0x9d, 0xdb, 0xb1, 0x5a, 0xe8, 0xd8, 0xb3, 0x88, 0xc1, 0xc1, 0x97, 0xe6, 0x98, 0x73, 0x7c, 0x97, 0x85, 0x50, 0x1e, 0xd1, 0xf9, 0x49, 0x30, 0xb7, 0xd9 }, - // 109 - { 0x88, 0x01, 0x8d, 0xed, 0x66, 0x81, 0x3f, 0x0c, 0xa9, 0x5d, 0xef, 0x47, 0x4c, 0x63, 0x06, 0x92, 0x01, 0x99, 0x67, 0xb9, 0xe3, 0x68, 0x88, 0xda, 0xdd, 0x94, 0x12, 0x47, 0x19, 0xb6, 0x82, 0xf6 }, - // 110 - { 0x39, 0x30, 0x87, 0x6b, 0x9f, 0xc7, 0x52, 0x90, 0x36, 0xb0, 0x08, 0xb1, 0xb8, 0xbb, 0x99, 0x75, 0x22, 0xa4, 0x41, 0x63, 0x5a, 0x0c, 0x25, 0xec, 0x02, 0xfb, 0x6d, 0x90, 0x26, 0xe5, 0x5a, 0x97 }, - // 111 - { 0x0a, 0x40, 0x49, 0xd5, 0x7e, 0x83, 0x3b, 0x56, 0x95, 0xfa, 0xc9, 0x3d, 0xd1, 0xfb, 0xef, 0x31, 0x66, 0xb4, 0x4b, 0x12, 0xad, 0x11, 0x24, 0x86, 0x62, 0x38, 0x3a, 0xe0, 0x51, 0xe1, 0x58, 0x27 }, - // 112 - { 0x81, 0xdc, 0xc0, 0x67, 0x8b, 0xb6, 0xa7, 0x65, 0xe4, 0x8c, 0x32, 0x09, 0x65, 0x4f, 0xe9, 0x00, 0x89, 0xce, 0x44, 0xff, 0x56, 0x18, 0x47, 0x7e, 0x39, 0xab, 0x28, 0x64, 0x76, 0xdf, 0x05, 0x2b }, - // 113 - { 0xe6, 0x9b, 0x3a, 0x36, 0xa4, 0x46, 0x19, 0x12, 0xdc, 0x08, 0x34, 0x6b, 0x11, 0xdd, 0xcb, 0x9d, 0xb7, 0x96, 0xf8, 0x85, 0xfd, 0x01, 0x93, 0x6e, 0x66, 0x2f, 0xe2, 0x92, 0x97, 0xb0, 0x99, 0xa4 }, - // 114 - { 0x5a, 0xc6, 0x50, 0x3b, 0x0d, 0x8d, 0xa6, 0x91, 0x76, 0x46, 0xe6, 0xdc, 0xc8, 0x7e, 0xdc, 0x58, 0xe9, 0x42, 0x45, 0x32, 0x4c, 0xc2, 0x04, 0xf4, 0xdd, 0x4a, 0xf0, 0x15, 0x63, 0xac, 0xd4, 0x27 }, - // 115 - { 0xdf, 0x6d, 0xda, 0x21, 0x35, 0x9a, 0x30, 0xbc, 0x27, 0x17, 0x80, 0x97, 0x1c, 0x1a, 0xbd, 0x56, 0xa6, 0xef, 0x16, 0x7e, 0x48, 0x08, 0x87, 0x88, 0x8e, 0x73, 0xa8, 0x6d, 0x3b, 0xf6, 0x05, 0xe9 }, - // 116 - { 0xe8, 0xe6, 0xe4, 0x70, 0x71, 0xe7, 0xb7, 0xdf, 0x25, 0x80, 0xf2, 0x25, 0xcf, 0xbb, 0xed, 0xf8, 0x4c, 0xe6, 0x77, 0x46, 0x62, 0x66, 0x28, 0xd3, 0x30, 0x97, 0xe4, 0xb7, 0xdc, 0x57, 0x11, 0x07 }, - // 117 - { 0x53, 0xe4, 0x0e, 0xad, 0x62, 0x05, 0x1e, 0x19, 0xcb, 0x9b, 0xa8, 0x13, 0x3e, 0x3e, 0x5c, 0x1c, 0xe0, 0x0d, 0xdc, 0xad, 0x8a, 0xcf, 0x34, 0x2a, 0x22, 0x43, 0x60, 0xb0, 0xac, 0xc1, 0x47, 0x77 }, - // 118 - { 0x9c, 0xcd, 0x53, 0xfe, 0x80, 0xbe, 0x78, 0x6a, 0xa9, 0x84, 0x63, 0x84, 0x62, 0xfb, 0x28, 0xaf, 0xdf, 0x12, 0x2b, 0x34, 0xd7, 0x8f, 0x46, 0x87, 0xec, 0x63, 0x2b, 0xb1, 0x9d, 0xe2, 0x37, 0x1a }, - // 119 - { 0xcb, 0xd4, 0x80, 0x52, 0xc4, 0x8d, 0x78, 0x84, 0x66, 0xa3, 0xe8, 0x11, 0x8c, 0x56, 0xc9, 0x7f, 0xe1, 0x46, 0xe5, 0x54, 0x6f, 0xaa, 0xf9, 0x3e, 0x2b, 0xc3, 0xc4, 0x7e, 0x45, 0x93, 0x97, 0x53 }, - // 120 - { 0x25, 0x68, 0x83, 0xb1, 0x4e, 0x2a, 0xf4, 0x4d, 0xad, 0xb2, 0x8e, 0x1b, 0x34, 0xb2, 0xac, 0x0f, 0x0f, 0x4c, 0x91, 0xc3, 0x4e, 0xc9, 0x16, 0x9e, 0x29, 0x03, 0x61, 0x58, 0xac, 0xaa, 0x95, 0xb9 }, - // 121 - { 0x44, 0x71, 0xb9, 0x1a, 0xb4, 0x2d, 0xb7, 0xc4, 0xdd, 0x84, 0x90, 0xab, 0x95, 0xa2, 0xee, 0x8d, 0x04, 0xe3, 0xef, 0x5c, 0x3d, 0x6f, 0xc7, 0x1a, 0xc7, 0x4b, 0x2b, 0x26, 0x91, 0x4d, 0x16, 0x41 }, - // 122 - { 0xa5, 0xeb, 0x08, 0x03, 0x8f, 0x8f, 0x11, 0x55, 0xed, 0x86, 0xe6, 0x31, 0x90, 0x6f, 0xc1, 0x30, 0x95, 0xf6, 0xbb, 0xa4, 0x1d, 0xe5, 0xd4, 0xe7, 0x95, 0x75, 0x8e, 0xc8, 0xc8, 0xdf, 0x8a, 0xf1 }, - // 123 - { 0xdc, 0x1d, 0xb6, 0x4e, 0xd8, 0xb4, 0x8a, 0x91, 0x0e, 0x06, 0x0a, 0x6b, 0x86, 0x63, 0x74, 0xc5, 0x78, 0x78, 0x4e, 0x9a, 0xc4, 0x9a, 0xb2, 0x77, 0x40, 0x92, 0xac, 0x71, 0x50, 0x19, 0x34, 0xac }, - // 124 - { 0x28, 0x54, 0x13, 0xb2, 0xf2, 0xee, 0x87, 0x3d, 0x34, 0x31, 0x9e, 0xe0, 0xbb, 0xfb, 0xb9, 0x0f, 0x32, 0xda, 0x43, 0x4c, 0xc8, 0x7e, 0x3d, 0xb5, 0xed, 0x12, 0x1b, 0xb3, 0x98, 0xed, 0x96, 0x4b }, - // 125 - { 0x02, 0x16, 0xe0, 0xf8, 0x1f, 0x75, 0x0f, 0x26, 0xf1, 0x99, 0x8b, 0xc3, 0x93, 0x4e, 0x3e, 0x12, 0x4c, 0x99, 0x45, 0xe6, 0x85, 0xa6, 0x0b, 0x25, 0xe8, 0xfb, 0xd9, 0x62, 0x5a, 0xb6, 0xb5, 0x99 }, - // 126 - { 0x38, 0xc4, 0x10, 0xf5, 0xb9, 0xd4, 0x07, 0x20, 0x50, 0x75, 0x5b, 0x31, 0xdc, 0xa8, 0x9f, 0xd5, 0x39, 0x5c, 0x67, 0x85, 0xee, 0xb3, 0xd7, 0x90, 0xf3, 0x20, 0xff, 0x94, 0x1c, 0x5a, 0x93, 0xbf }, - // 127 - { 0xf1, 0x84, 0x17, 0xb3, 0x9d, 0x61, 0x7a, 0xb1, 0xc1, 0x8f, 0xdf, 0x91, 0xeb, 0xd0, 0xfc, 0x6d, 0x55, 0x16, 0xbb, 0x34, 0xcf, 0x39, 0x36, 0x40, 0x37, 0xbc, 0xe8, 0x1f, 0xa0, 0x4c, 0xec, 0xb1 }, - // 128 - { 0x1f, 0xa8, 0x77, 0xde, 0x67, 0x25, 0x9d, 0x19, 0x86, 0x3a, 0x2a, 0x34, 0xbc, 0xc6, 0x96, 0x2a, 0x2b, 0x25, 0xfc, 0xbf, 0x5c, 0xbe, 0xcd, 0x7e, 0xde, 0x8f, 0x1f, 0xa3, 0x66, 0x88, 0xa7, 0x96 }, - // 129 - { 0x5b, 0xd1, 0x69, 0xe6, 0x7c, 0x82, 0xc2, 0xc2, 0xe9, 0x8e, 0xf7, 0x00, 0x8b, 0xdf, 0x26, 0x1f, 0x2d, 0xdf, 0x30, 0xb1, 0xc0, 0x0f, 0x9e, 0x7f, 0x27, 0x5b, 0xb3, 0xe8, 0xa2, 0x8d, 0xc9, 0xa2 }, - // 130 - { 0xc8, 0x0a, 0xbe, 0xeb, 0xb6, 0x69, 0xad, 0x5d, 0xee, 0xb5, 0xf5, 0xec, 0x8e, 0xa6, 0xb7, 0xa0, 0x5d, 0xdf, 0x7d, 0x31, 0xec, 0x4c, 0x0a, 0x2e, 0xe2, 0x0b, 0x0b, 0x98, 0xca, 0xec, 0x67, 0x46 }, - // 131 - { 0xe7, 0x6d, 0x3f, 0xbd, 0xa5, 0xba, 0x37, 0x4e, 0x6b, 0xf8, 0xe5, 0x0f, 0xad, 0xc3, 0xbb, 0xb9, 0xba, 0x5c, 0x20, 0x6e, 0xbd, 0xec, 0x89, 0xa3, 0xa5, 0x4c, 0xf3, 0xdd, 0x84, 0xa0, 0x70, 0x16 }, - // 132 - { 0x7b, 0xba, 0x9d, 0xc5, 0xb5, 0xdb, 0x20, 0x71, 0xd1, 0x77, 0x52, 0xb1, 0x04, 0x4c, 0x1e, 0xce, 0xd9, 0x6a, 0xaf, 0x2d, 0xd4, 0x6e, 0x9b, 0x43, 0x37, 0x50, 0xe8, 0xea, 0x0d, 0xcc, 0x18, 0x70 }, - // 133 - { 0xf2, 0x9b, 0x1b, 0x1a, 0xb9, 0xba, 0xb1, 0x63, 0x01, 0x8e, 0xe3, 0xda, 0x15, 0x23, 0x2c, 0xca, 0x78, 0xec, 0x52, 0xdb, 0xc3, 0x4e, 0xda, 0x5b, 0x82, 0x2e, 0xc1, 0xd8, 0x0f, 0xc2, 0x1b, 0xd0 }, - // 134 - { 0x9e, 0xe3, 0xe3, 0xe7, 0xe9, 0x00, 0xf1, 0xe1, 0x1d, 0x30, 0x8c, 0x4b, 0x2b, 0x30, 0x76, 0xd2, 0x72, 0xcf, 0x70, 0x12, 0x4f, 0x9f, 0x51, 0xe1, 0xda, 0x60, 0xf3, 0x78, 0x46, 0xcd, 0xd2, 0xf4 }, - // 135 - { 0x70, 0xea, 0x3b, 0x01, 0x76, 0x92, 0x7d, 0x90, 0x96, 0xa1, 0x85, 0x08, 0xcd, 0x12, 0x3a, 0x29, 0x03, 0x25, 0x92, 0x0a, 0x9d, 0x00, 0xa8, 0x9b, 0x5d, 0xe0, 0x42, 0x73, 0xfb, 0xc7, 0x6b, 0x85 }, - // 136 - { 0x67, 0xde, 0x25, 0xc0, 0x2a, 0x4a, 0xab, 0xa2, 0x3b, 0xdc, 0x97, 0x3c, 0x8b, 0xb0, 0xb5, 0x79, 0x6d, 0x47, 0xcc, 0x06, 0x59, 0xd4, 0x3d, 0xff, 0x1f, 0x97, 0xde, 0x17, 0x49, 0x63, 0xb6, 0x8e }, - // 137 - { 0xb2, 0x16, 0x8e, 0x4e, 0x0f, 0x18, 0xb0, 0xe6, 0x41, 0x00, 0xb5, 0x17, 0xed, 0x95, 0x25, 0x7d, 0x73, 0xf0, 0x62, 0x0d, 0xf8, 0x85, 0xc1, 0x3d, 0x2e, 0xcf, 0x79, 0x36, 0x7b, 0x38, 0x4c, 0xee }, - // 138 - { 0x2e, 0x7d, 0xec, 0x24, 0x28, 0x85, 0x3b, 0x2c, 0x71, 0x76, 0x07, 0x45, 0x54, 0x1f, 0x7a, 0xfe, 0x98, 0x25, 0xb5, 0xdd, 0x77, 0xdf, 0x06, 0x51, 0x1d, 0x84, 0x41, 0xa9, 0x4b, 0xac, 0xc9, 0x27 }, - // 139 - { 0xca, 0x9f, 0xfa, 0xc4, 0xc4, 0x3f, 0x0b, 0x48, 0x46, 0x1d, 0xc5, 0xc2, 0x63, 0xbe, 0xa3, 0xf6, 0xf0, 0x06, 0x11, 0xce, 0xac, 0xab, 0xf6, 0xf8, 0x95, 0xba, 0x2b, 0x01, 0x01, 0xdb, 0xb6, 0x8d }, - // 140 - { 0x74, 0x10, 0xd4, 0x2d, 0x8f, 0xd1, 0xd5, 0xe9, 0xd2, 0xf5, 0x81, 0x5c, 0xb9, 0x34, 0x17, 0x99, 0x88, 0x28, 0xef, 0x3c, 0x42, 0x30, 0xbf, 0xbd, 0x41, 0x2d, 0xf0, 0xa4, 0xa7, 0xa2, 0x50, 0x7a }, - // 141 - { 0x50, 0x10, 0xf6, 0x84, 0x51, 0x6d, 0xcc, 0xd0, 0xb6, 0xee, 0x08, 0x52, 0xc2, 0x51, 0x2b, 0x4d, 0xc0, 0x06, 0x6c, 0xf0, 0xd5, 0x6f, 0x35, 0x30, 0x29, 0x78, 0xdb, 0x8a, 0xe3, 0x2c, 0x6a, 0x81 }, - // 142 - { 0xac, 0xaa, 0xb5, 0x85, 0xf7, 0xb7, 0x9b, 0x71, 0x99, 0x35, 0xce, 0xb8, 0x95, 0x23, 0xdd, 0xc5, 0x48, 0x27, 0xf7, 0x5c, 0x56, 0x88, 0x38, 0x56, 0x15, 0x4a, 0x56, 0xcd, 0xcd, 0x5e, 0xe9, 0x88 }, - // 143 - { 0x66, 0x6d, 0xe5, 0xd1, 0x44, 0x0f, 0xee, 0x73, 0x31, 0xaa, 0xf0, 0x12, 0x3a, 0x62, 0xef, 0x2d, 0x8b, 0xa5, 0x74, 0x53, 0xa0, 0x76, 0x96, 0x35, 0xac, 0x6c, 0xd0, 0x1e, 0x63, 0x3f, 0x77, 0x12 }, - // 144 - { 0xa6, 0xf9, 0x86, 0x58, 0xf6, 0xea, 0xba, 0xf9, 0x02, 0xd8, 0xb3, 0x87, 0x1a, 0x4b, 0x10, 0x1d, 0x16, 0x19, 0x6e, 0x8a, 0x4b, 0x24, 0x1e, 0x15, 0x58, 0xfe, 0x29, 0x96, 0x6e, 0x10, 0x3e, 0x8d }, - // 145 - { 0x89, 0x15, 0x46, 0xa8, 0xb2, 0x9f, 0x30, 0x47, 0xdd, 0xcf, 0xe5, 0xb0, 0x0e, 0x45, 0xfd, 0x55, 0x75, 0x63, 0x73, 0x10, 0x5e, 0xa8, 0x63, 0x7d, 0xfc, 0xff, 0x54, 0x7b, 0x6e, 0xa9, 0x53, 0x5f }, - // 146 - { 0x18, 0xdf, 0xbc, 0x1a, 0xc5, 0xd2, 0x5b, 0x07, 0x61, 0x13, 0x7d, 0xbd, 0x22, 0xc1, 0x7c, 0x82, 0x9d, 0x0f, 0x0e, 0xf1, 0xd8, 0x23, 0x44, 0xe9, 0xc8, 0x9c, 0x28, 0x66, 0x94, 0xda, 0x24, 0xe8 }, - // 147 - { 0xb5, 0x4b, 0x9b, 0x67, 0xf8, 0xfe, 0xd5, 0x4b, 0xbf, 0x5a, 0x26, 0x66, 0xdb, 0xdf, 0x4b, 0x23, 0xcf, 0xf1, 0xd1, 0xb6, 0xf4, 0xaf, 0xc9, 0x85, 0xb2, 0xe6, 0xd3, 0x30, 0x5a, 0x9f, 0xf8, 0x0f }, - // 148 - { 0x7d, 0xb4, 0x42, 0xe1, 0x32, 0xba, 0x59, 0xbc, 0x12, 0x89, 0xaa, 0x98, 0xb0, 0xd3, 0xe8, 0x06, 0x00, 0x4f, 0x8e, 0xc1, 0x28, 0x11, 0xaf, 0x1e, 0x2e, 0x33, 0xc6, 0x9b, 0xfd, 0xe7, 0x29, 0xe1 }, - // 149 - { 0x25, 0x0f, 0x37, 0xcd, 0xc1, 0x5e, 0x81, 0x7d, 0x2f, 0x16, 0x0d, 0x99, 0x56, 0xc7, 0x1f, 0xe3, 0xeb, 0x5d, 0xb7, 0x45, 0x56, 0xe4, 0xad, 0xf9, 0xa4, 0xff, 0xaf, 0xba, 0x74, 0x01, 0x03, 0x96 }, - // 150 - { 0x4a, 0xb8, 0xa3, 0xdd, 0x1d, 0xdf, 0x8a, 0xd4, 0x3d, 0xab, 0x13, 0xa2, 0x7f, 0x66, 0xa6, 0x54, 0x4f, 0x29, 0x05, 0x97, 0xfa, 0x96, 0x04, 0x0e, 0x0e, 0x1d, 0xb9, 0x26, 0x3a, 0xa4, 0x79, 0xf8 }, - // 151 - { 0xee, 0x61, 0x72, 0x7a, 0x07, 0x66, 0xdf, 0x93, 0x9c, 0xcd, 0xc8, 0x60, 0x33, 0x40, 0x44, 0xc7, 0x9a, 0x3c, 0x9b, 0x15, 0x62, 0x00, 0xbc, 0x3a, 0xa3, 0x29, 0x73, 0x48, 0x3d, 0x83, 0x41, 0xae }, - // 152 - { 0x3f, 0x68, 0xc7, 0xec, 0x63, 0xac, 0x11, 0xeb, 0xb9, 0x8f, 0x94, 0xb3, 0x39, 0xb0, 0x5c, 0x10, 0x49, 0x84, 0xfd, 0xa5, 0x01, 0x03, 0x06, 0x01, 0x44, 0xe5, 0xa2, 0xbf, 0xcc, 0xc9, 0xda, 0x95 }, - // 153 - { 0x05, 0x6f, 0x29, 0x81, 0x6b, 0x8a, 0xf8, 0xf5, 0x66, 0x82, 0xbc, 0x4d, 0x7c, 0xf0, 0x94, 0x11, 0x1d, 0xa7, 0x73, 0x3e, 0x72, 0x6c, 0xd1, 0x3d, 0x6b, 0x3e, 0x8e, 0xa0, 0x3e, 0x92, 0xa0, 0xd5 }, - // 154 - { 0xf5, 0xec, 0x43, 0xa2, 0x8a, 0xcb, 0xef, 0xf1, 0xf3, 0x31, 0x8a, 0x5b, 0xca, 0xc7, 0xc6, 0x6d, 0xdb, 0x52, 0x30, 0xb7, 0x9d, 0xb2, 0xd1, 0x05, 0xbc, 0xbe, 0x15, 0xf3, 0xc1, 0x14, 0x8d, 0x69 }, - // 155 - { 0x2a, 0x69, 0x60, 0xad, 0x1d, 0x8d, 0xd5, 0x47, 0x55, 0x5c, 0xfb, 0xd5, 0xe4, 0x60, 0x0f, 0x1e, 0xaa, 0x1c, 0x8e, 0xda, 0x34, 0xde, 0x03, 0x74, 0xec, 0x4a, 0x26, 0xea, 0xaa, 0xa3, 0x3b, 0x4e }, - // 156 - { 0xdc, 0xc1, 0xea, 0x7b, 0xaa, 0xb9, 0x33, 0x84, 0xf7, 0x6b, 0x79, 0x68, 0x66, 0x19, 0x97, 0x54, 0x74, 0x2f, 0x7b, 0x96, 0xd6, 0xb4, 0xc1, 0x20, 0x16, 0x5c, 0x04, 0xa6, 0xc4, 0xf5, 0xce, 0x10 }, - // 157 - { 0x13, 0xd5, 0xdf, 0x17, 0x92, 0x21, 0x37, 0x9c, 0x6a, 0x78, 0xc0, 0x7c, 0x79, 0x3f, 0xf5, 0x34, 0x87, 0xca, 0xe6, 0xbf, 0x9f, 0xe8, 0x82, 0x54, 0x1a, 0xb0, 0xe7, 0x35, 0xe3, 0xea, 0xda, 0x3b }, - // 158 - { 0x8c, 0x59, 0xe4, 0x40, 0x76, 0x41, 0xa0, 0x1e, 0x8f, 0xf9, 0x1f, 0x99, 0x80, 0xdc, 0x23, 0x6f, 0x4e, 0xcd, 0x6f, 0xcf, 0x52, 0x58, 0x9a, 0x09, 0x9a, 0x96, 0x16, 0x33, 0x96, 0x77, 0x14, 0xe1 }, - // 159 - { 0x83, 0x3b, 0x1a, 0xc6, 0xa2, 0x51, 0xfd, 0x08, 0xfd, 0x6d, 0x90, 0x8f, 0xea, 0x2a, 0x4e, 0xe1, 0xe0, 0x40, 0xbc, 0xa9, 0x3f, 0xc1, 0xa3, 0x8e, 0xc3, 0x82, 0x0e, 0x0c, 0x10, 0xbd, 0x82, 0xea }, - // 160 - { 0xa2, 0x44, 0xf9, 0x27, 0xf3, 0xb4, 0x0b, 0x8f, 0x6c, 0x39, 0x15, 0x70, 0xc7, 0x65, 0x41, 0x8f, 0x2f, 0x6e, 0x70, 0x8e, 0xac, 0x90, 0x06, 0xc5, 0x1a, 0x7f, 0xef, 0xf4, 0xaf, 0x3b, 0x2b, 0x9e }, - // 161 - { 0x3d, 0x99, 0xed, 0x95, 0x50, 0xcf, 0x11, 0x96, 0xe6, 0xc4, 0xd2, 0x0c, 0x25, 0x96, 0x20, 0xf8, 0x58, 0xc3, 0xd7, 0x03, 0x37, 0x4c, 0x12, 0x8c, 0xe7, 0xb5, 0x90, 0x31, 0x0c, 0x83, 0x04, 0x6d }, - // 162 - { 0x2b, 0x35, 0xc4, 0x7d, 0x7b, 0x87, 0x76, 0x1f, 0x0a, 0xe4, 0x3a, 0xc5, 0x6a, 0xc2, 0x7b, 0x9f, 0x25, 0x83, 0x03, 0x67, 0xb5, 0x95, 0xbe, 0x8c, 0x24, 0x0e, 0x94, 0x60, 0x0c, 0x6e, 0x33, 0x12 }, - // 163 - { 0x5d, 0x11, 0xed, 0x37, 0xd2, 0x4d, 0xc7, 0x67, 0x30, 0x5c, 0xb7, 0xe1, 0x46, 0x7d, 0x87, 0xc0, 0x65, 0xac, 0x4b, 0xc8, 0xa4, 0x26, 0xde, 0x38, 0x99, 0x1f, 0xf5, 0x9a, 0xa8, 0x73, 0x5d, 0x02 }, - // 164 - { 0xb8, 0x36, 0x47, 0x8e, 0x1c, 0xa0, 0x64, 0x0d, 0xce, 0x6f, 0xd9, 0x10, 0xa5, 0x09, 0x62, 0x72, 0xc8, 0x33, 0x09, 0x90, 0xcd, 0x97, 0x86, 0x4a, 0xc2, 0xbf, 0x14, 0xef, 0x6b, 0x23, 0x91, 0x4a }, - // 165 - { 0x91, 0x00, 0xf9, 0x46, 0xd6, 0xcc, 0xde, 0x3a, 0x59, 0x7f, 0x90, 0xd3, 0x9f, 0xc1, 0x21, 0x5b, 0xad, 0xdc, 0x74, 0x13, 0x64, 0x3d, 0x85, 0xc2, 0x1c, 0x3e, 0xee, 0x5d, 0x2d, 0xd3, 0x28, 0x94 }, - // 166 - { 0xda, 0x70, 0xee, 0xdd, 0x23, 0xe6, 0x63, 0xaa, 0x1a, 0x74, 0xb9, 0x76, 0x69, 0x35, 0xb4, 0x79, 0x22, 0x2a, 0x72, 0xaf, 0xba, 0x5c, 0x79, 0x51, 0x58, 0xda, 0xd4, 0x1a, 0x3b, 0xd7, 0x7e, 0x40 }, - // 167 - { 0xf0, 0x67, 0xed, 0x6a, 0x0d, 0xbd, 0x43, 0xaa, 0x0a, 0x92, 0x54, 0xe6, 0x9f, 0xd6, 0x6b, 0xdd, 0x8a, 0xcb, 0x87, 0xde, 0x93, 0x6c, 0x25, 0x8c, 0xfb, 0x02, 0x28, 0x5f, 0x2c, 0x11, 0xfa, 0x79 }, - // 168 - { 0x71, 0x5c, 0x99, 0xc7, 0xd5, 0x75, 0x80, 0xcf, 0x97, 0x53, 0xb4, 0xc1, 0xd7, 0x95, 0xe4, 0x5a, 0x83, 0xfb, 0xb2, 0x28, 0xc0, 0xd3, 0x6f, 0xbe, 0x20, 0xfa, 0xf3, 0x9b, 0xdd, 0x6d, 0x4e, 0x85 }, - // 169 - { 0xe4, 0x57, 0xd6, 0xad, 0x1e, 0x67, 0xcb, 0x9b, 0xbd, 0x17, 0xcb, 0xd6, 0x98, 0xfa, 0x6d, 0x7d, 0xae, 0x0c, 0x9b, 0x7a, 0xd6, 0xcb, 0xd6, 0x53, 0x96, 0x34, 0xe3, 0x2a, 0x71, 0x9c, 0x84, 0x92 }, - // 170 - { 0xec, 0xe3, 0xea, 0x81, 0x03, 0xe0, 0x24, 0x83, 0xc6, 0x4a, 0x70, 0xa4, 0xbd, 0xce, 0xe8, 0xce, 0xb6, 0x27, 0x8f, 0x25, 0x33, 0xf3, 0xf4, 0x8d, 0xbe, 0xed, 0xfb, 0xa9, 0x45, 0x31, 0xd4, 0xae }, - // 171 - { 0x38, 0x8a, 0xa5, 0xd3, 0x66, 0x7a, 0x97, 0xc6, 0x8d, 0x3d, 0x56, 0xf8, 0xf3, 0xee, 0x8d, 0x3d, 0x36, 0x09, 0x1f, 0x17, 0xfe, 0x5d, 0x1b, 0x0d, 0x5d, 0x84, 0xc9, 0x3b, 0x2f, 0xfe, 0x40, 0xbd }, - // 172 - { 0x8b, 0x6b, 0x31, 0xb9, 0xad, 0x7c, 0x3d, 0x5c, 0xd8, 0x4b, 0xf9, 0x89, 0x47, 0xb9, 0xcd, 0xb5, 0x9d, 0xf8, 0xa2, 0x5f, 0xf7, 0x38, 0x10, 0x10, 0x13, 0xbe, 0x4f, 0xd6, 0x5e, 0x1d, 0xd1, 0xa3 }, - // 173 - { 0x06, 0x62, 0x91, 0xf6, 0xbb, 0xd2, 0x5f, 0x3c, 0x85, 0x3d, 0xb7, 0xd8, 0xb9, 0x5c, 0x9a, 0x1c, 0xfb, 0x9b, 0xf1, 0xc1, 0xc9, 0x9f, 0xb9, 0x5a, 0x9b, 0x78, 0x69, 0xd9, 0x0f, 0x1c, 0x29, 0x03 }, - // 174 - { 0xa7, 0x07, 0xef, 0xbc, 0xcd, 0xce, 0xed, 0x42, 0x96, 0x7a, 0x66, 0xf5, 0x53, 0x9b, 0x93, 0xed, 0x75, 0x60, 0xd4, 0x67, 0x30, 0x40, 0x16, 0xc4, 0x78, 0x0d, 0x77, 0x55, 0xa5, 0x65, 0xd4, 0xc4 }, - // 175 - { 0x38, 0xc5, 0x3d, 0xfb, 0x70, 0xbe, 0x7e, 0x79, 0x2b, 0x07, 0xa6, 0xa3, 0x5b, 0x8a, 0x6a, 0x0a, 0xba, 0x02, 0xc5, 0xc5, 0xf3, 0x8b, 0xaf, 0x5c, 0x82, 0x3f, 0xdf, 0xd9, 0xe4, 0x2d, 0x65, 0x7e }, - // 176 - { 0xf2, 0x91, 0x13, 0x86, 0x50, 0x1d, 0x9a, 0xb9, 0xd7, 0x20, 0xcf, 0x8a, 0xd1, 0x05, 0x03, 0xd5, 0x63, 0x4b, 0xf4, 0xb7, 0xd1, 0x2b, 0x56, 0xdf, 0xb7, 0x4f, 0xec, 0xc6, 0xe4, 0x09, 0x3f, 0x68 }, - // 177 - { 0xc6, 0xf2, 0xbd, 0xd5, 0x2b, 0x81, 0xe6, 0xe4, 0xf6, 0x59, 0x5a, 0xbd, 0x4d, 0x7f, 0xb3, 0x1f, 0x65, 0x11, 0x69, 0xd0, 0x0f, 0xf3, 0x26, 0x92, 0x6b, 0x34, 0x94, 0x7b, 0x28, 0xa8, 0x39, 0x59 }, - // 178 - { 0x29, 0x3d, 0x94, 0xb1, 0x8c, 0x98, 0xbb, 0x32, 0x23, 0x36, 0x6b, 0x8c, 0xe7, 0x4c, 0x28, 0xfb, 0xdf, 0x28, 0xe1, 0xf8, 0x4a, 0x33, 0x50, 0xb0, 0xeb, 0x2d, 0x18, 0x04, 0xa5, 0x77, 0x57, 0x9b }, - // 179 - { 0x2c, 0x2f, 0xa5, 0xc0, 0xb5, 0x15, 0x33, 0x16, 0x5b, 0xc3, 0x75, 0xc2, 0x2e, 0x27, 0x81, 0x76, 0x82, 0x70, 0xa3, 0x83, 0x98, 0x5d, 0x13, 0xbd, 0x6b, 0x67, 0xb6, 0xfd, 0x67, 0xf8, 0x89, 0xeb }, - // 180 - { 0xca, 0xa0, 0x9b, 0x82, 0xb7, 0x25, 0x62, 0xe4, 0x3f, 0x4b, 0x22, 0x75, 0xc0, 0x91, 0x91, 0x8e, 0x62, 0x4d, 0x91, 0x16, 0x61, 0xcc, 0x81, 0x1b, 0xb5, 0xfa, 0xec, 0x51, 0xf6, 0x08, 0x8e, 0xf7 }, - // 181 - { 0x24, 0x76, 0x1e, 0x45, 0xe6, 0x74, 0x39, 0x53, 0x79, 0xfb, 0x17, 0x72, 0x9c, 0x78, 0xcb, 0x93, 0x9e, 0x6f, 0x74, 0xc5, 0xdf, 0xfb, 0x9c, 0x96, 0x1f, 0x49, 0x59, 0x82, 0xc3, 0xed, 0x1f, 0xe3 }, - // 182 - { 0x55, 0xb7, 0x0a, 0x82, 0x13, 0x1e, 0xc9, 0x48, 0x88, 0xd7, 0xab, 0x54, 0xa7, 0xc5, 0x15, 0x25, 0x5c, 0x39, 0x38, 0xbb, 0x10, 0xbc, 0x78, 0x4d, 0xc9, 0xb6, 0x7f, 0x07, 0x6e, 0x34, 0x1a, 0x73 }, - // 183 - { 0x6a, 0xb9, 0x05, 0x7b, 0x97, 0x7e, 0xbc, 0x3c, 0xa4, 0xd4, 0xce, 0x74, 0x50, 0x6c, 0x25, 0xcc, 0xcd, 0xc5, 0x66, 0x49, 0x7c, 0x45, 0x0b, 0x54, 0x15, 0xa3, 0x94, 0x86, 0xf8, 0x65, 0x7a, 0x03 }, - // 184 - { 0x24, 0x06, 0x6d, 0xee, 0xe0, 0xec, 0xee, 0x15, 0xa4, 0x5f, 0x0a, 0x32, 0x6d, 0x0f, 0x8d, 0xbc, 0x79, 0x76, 0x1e, 0xbb, 0x93, 0xcf, 0x8c, 0x03, 0x77, 0xaf, 0x44, 0x09, 0x78, 0xfc, 0xf9, 0x94 }, - // 185 - { 0x20, 0x00, 0x0d, 0x3f, 0x66, 0xba, 0x76, 0x86, 0x0d, 0x5a, 0x95, 0x06, 0x88, 0xb9, 0xaa, 0x0d, 0x76, 0xcf, 0xea, 0x59, 0xb0, 0x05, 0xd8, 0x59, 0x91, 0x4b, 0x1a, 0x46, 0x65, 0x3a, 0x93, 0x9b }, - // 186 - { 0xb9, 0x2d, 0xaa, 0x79, 0x60, 0x3e, 0x3b, 0xdb, 0xc3, 0xbf, 0xe0, 0xf4, 0x19, 0xe4, 0x09, 0xb2, 0xea, 0x10, 0xdc, 0x43, 0x5b, 0xee, 0xfe, 0x29, 0x59, 0xda, 0x16, 0x89, 0x5d, 0x5d, 0xca, 0x1c }, - // 187 - { 0xe9, 0x47, 0x94, 0x87, 0x05, 0xb2, 0x06, 0xd5, 0x72, 0xb0, 0xe8, 0xf6, 0x2f, 0x66, 0xa6, 0x55, 0x1c, 0xbd, 0x6b, 0xc3, 0x05, 0xd2, 0x6c, 0xe7, 0x53, 0x9a, 0x12, 0xf9, 0xaa, 0xdf, 0x75, 0x71 }, - // 188 - { 0x3d, 0x67, 0xc1, 0xb3, 0xf9, 0xb2, 0x39, 0x10, 0xe3, 0xd3, 0x5e, 0x6b, 0x0f, 0x2c, 0xcf, 0x44, 0xa0, 0xb5, 0x40, 0xa4, 0x5c, 0x18, 0xba, 0x3c, 0x36, 0x26, 0x4d, 0xd4, 0x8e, 0x96, 0xaf, 0x6a }, - // 189 - { 0xc7, 0x55, 0x8b, 0xab, 0xda, 0x04, 0xbc, 0xcb, 0x76, 0x4d, 0x0b, 0xbf, 0x33, 0x58, 0x42, 0x51, 0x41, 0x90, 0x2d, 0x22, 0x39, 0x1d, 0x9f, 0x8c, 0x59, 0x15, 0x9f, 0xec, 0x9e, 0x49, 0xb1, 0x51 }, - // 190 - { 0x0b, 0x73, 0x2b, 0xb0, 0x35, 0x67, 0x5a, 0x50, 0xff, 0x58, 0xf2, 0xc2, 0x42, 0xe4, 0x71, 0x0a, 0xec, 0xe6, 0x46, 0x70, 0x07, 0x9c, 0x13, 0x04, 0x4c, 0x79, 0xc9, 0xb7, 0x49, 0x1f, 0x70, 0x00 }, - // 191 - { 0xd1, 0x20, 0xb5, 0xef, 0x6d, 0x57, 0xeb, 0xf0, 0x6e, 0xaf, 0x96, 0xbc, 0x93, 0x3c, 0x96, 0x7b, 0x16, 0xcb, 0xe6, 0xe2, 0xbf, 0x00, 0x74, 0x1c, 0x30, 0xaa, 0x1c, 0x54, 0xba, 0x64, 0x80, 0x1f }, - // 192 - { 0x58, 0xd2, 0x12, 0xad, 0x6f, 0x58, 0xae, 0xf0, 0xf8, 0x01, 0x16, 0xb4, 0x41, 0xe5, 0x7f, 0x61, 0x95, 0xbf, 0xef, 0x26, 0xb6, 0x14, 0x63, 0xed, 0xec, 0x11, 0x83, 0xcd, 0xb0, 0x4f, 0xe7, 0x6d }, - // 193 - { 0xb8, 0x83, 0x6f, 0x51, 0xd1, 0xe2, 0x9b, 0xdf, 0xdb, 0xa3, 0x25, 0x56, 0x53, 0x60, 0x26, 0x8b, 0x8f, 0xad, 0x62, 0x74, 0x73, 0xed, 0xec, 0xef, 0x7e, 0xae, 0xfe, 0xe8, 0x37, 0xc7, 0x40, 0x03 }, - // 194 - { 0xc5, 0x47, 0xa3, 0xc1, 0x24, 0xae, 0x56, 0x85, 0xff, 0xa7, 0xb8, 0xed, 0xaf, 0x96, 0xec, 0x86, 0xf8, 0xb2, 0xd0, 0xd5, 0x0c, 0xee, 0x8b, 0xe3, 0xb1, 0xf0, 0xc7, 0x67, 0x63, 0x06, 0x9d, 0x9c }, - // 195 - { 0x5d, 0x16, 0x8b, 0x76, 0x9a, 0x2f, 0x67, 0x85, 0x3d, 0x62, 0x95, 0xf7, 0x56, 0x8b, 0xe4, 0x0b, 0xb7, 0xa1, 0x6b, 0x8d, 0x65, 0xba, 0x87, 0x63, 0x5d, 0x19, 0x78, 0xd2, 0xab, 0x11, 0xba, 0x2a }, - // 196 - { 0xa2, 0xf6, 0x75, 0xdc, 0x73, 0x02, 0x63, 0x8c, 0xb6, 0x02, 0x01, 0x06, 0x4c, 0xa5, 0x50, 0x77, 0x71, 0x4d, 0x71, 0xfe, 0x09, 0x6a, 0x31, 0x5f, 0x2f, 0xe7, 0x40, 0x12, 0x77, 0xca, 0xa5, 0xaf }, - // 197 - { 0xc8, 0xaa, 0xb5, 0xcd, 0x01, 0x60, 0xae, 0x78, 0xcd, 0x2e, 0x8a, 0xc5, 0xfb, 0x0e, 0x09, 0x3c, 0xdb, 0x5c, 0x4b, 0x60, 0x52, 0xa0, 0xa9, 0x7b, 0xb0, 0x42, 0x16, 0x82, 0x6f, 0xa7, 0xa4, 0x37 }, - // 198 - { 0xff, 0x68, 0xca, 0x40, 0x35, 0xbf, 0xeb, 0x43, 0xfb, 0xf1, 0x45, 0xfd, 0xdd, 0x5e, 0x43, 0xf1, 0xce, 0xa5, 0x4f, 0x11, 0xf7, 0xbe, 0xe1, 0x30, 0x58, 0xf0, 0x27, 0x32, 0x9a, 0x4a, 0x5f, 0xa4 }, - // 199 - { 0x1d, 0x4e, 0x54, 0x87, 0xae, 0x3c, 0x74, 0x0f, 0x2b, 0xa6, 0xe5, 0x41, 0xac, 0x91, 0xbc, 0x2b, 0xfc, 0xd2, 0x99, 0x9c, 0x51, 0x8d, 0x80, 0x7b, 0x42, 0x67, 0x48, 0x80, 0x3a, 0x35, 0x0f, 0xd4 }, - // 200 - { 0x6d, 0x24, 0x4e, 0x1a, 0x06, 0xce, 0x4e, 0xf5, 0x78, 0xdd, 0x0f, 0x63, 0xaf, 0xf0, 0x93, 0x67, 0x06, 0x73, 0x51, 0x19, 0xca, 0x9c, 0x8d, 0x22, 0xd8, 0x6c, 0x80, 0x14, 0x14, 0xab, 0x97, 0x41 }, - // 201 - { 0xde, 0xcf, 0x73, 0x29, 0xdb, 0xcc, 0x82, 0x7b, 0x8f, 0xc5, 0x24, 0xc9, 0x43, 0x1e, 0x89, 0x98, 0x02, 0x9e, 0xce, 0x12, 0xce, 0x93, 0xb7, 0xb2, 0xf3, 0xe7, 0x69, 0xa9, 0x41, 0xfb, 0x8c, 0xea }, - // 202 - { 0x2f, 0xaf, 0xcc, 0x0f, 0x2e, 0x63, 0xcb, 0xd0, 0x77, 0x55, 0xbe, 0x7b, 0x75, 0xec, 0xea, 0x0a, 0xdf, 0xf9, 0xaa, 0x5e, 0xde, 0x2a, 0x52, 0xfd, 0xab, 0x4d, 0xfd, 0x03, 0x74, 0xcd, 0x48, 0x3f }, - // 203 - { 0xaa, 0x85, 0x01, 0x0d, 0xd4, 0x6a, 0x54, 0x6b, 0x53, 0x5e, 0xf4, 0xcf, 0x5f, 0x07, 0xd6, 0x51, 0x61, 0xe8, 0x98, 0x28, 0xf3, 0xa7, 0x7d, 0xb7, 0xb9, 0xb5, 0x6f, 0x0d, 0xf5, 0x9a, 0xae, 0x45 }, - // 204 - { 0x07, 0xe8, 0xe1, 0xee, 0x73, 0x2c, 0xb0, 0xd3, 0x56, 0xc9, 0xc0, 0xd1, 0x06, 0x9c, 0x89, 0xd1, 0x7a, 0xdf, 0x6a, 0x9a, 0x33, 0x4f, 0x74, 0x5e, 0xc7, 0x86, 0x73, 0x32, 0x54, 0x8c, 0xa8, 0xe9 }, - // 205 - { 0x0e, 0x01, 0xe8, 0x1c, 0xad, 0xa8, 0x16, 0x2b, 0xfd, 0x5f, 0x8a, 0x8c, 0x81, 0x8a, 0x6c, 0x69, 0xfe, 0xdf, 0x02, 0xce, 0xb5, 0x20, 0x85, 0x23, 0xcb, 0xe5, 0x31, 0x3b, 0x89, 0xca, 0x10, 0x53 }, - // 206 - { 0x6b, 0xb6, 0xc6, 0x47, 0x26, 0x55, 0x08, 0x43, 0x99, 0x85, 0x2e, 0x00, 0x24, 0x9f, 0x8c, 0xb2, 0x47, 0x89, 0x6d, 0x39, 0x2b, 0x02, 0xd7, 0x3b, 0x7f, 0x0d, 0xd8, 0x18, 0xe1, 0xe2, 0x9b, 0x07 }, - // 207 - { 0x42, 0xd4, 0x63, 0x6e, 0x20, 0x60, 0xf0, 0x8f, 0x41, 0xc8, 0x82, 0xe7, 0x6b, 0x39, 0x6b, 0x11, 0x2e, 0xf6, 0x27, 0xcc, 0x24, 0xc4, 0x3d, 0xd5, 0xf8, 0x3a, 0x1d, 0x1a, 0x7e, 0xad, 0x71, 0x1a }, - // 208 - { 0x48, 0x58, 0xc9, 0xa1, 0x88, 0xb0, 0x23, 0x4f, 0xb9, 0xa8, 0xd4, 0x7d, 0x0b, 0x41, 0x33, 0x65, 0x0a, 0x03, 0x0b, 0xd0, 0x61, 0x1b, 0x87, 0xc3, 0x89, 0x2e, 0x94, 0x95, 0x1f, 0x8d, 0xf8, 0x52 }, - // 209 - { 0x3f, 0xab, 0x3e, 0x36, 0x98, 0x8d, 0x44, 0x5a, 0x51, 0xc8, 0x78, 0x3e, 0x53, 0x1b, 0xe3, 0xa0, 0x2b, 0xe4, 0x0c, 0xd0, 0x47, 0x96, 0xcf, 0xb6, 0x1d, 0x40, 0x34, 0x74, 0x42, 0xd3, 0xf7, 0x94 }, - // 210 - { 0xeb, 0xab, 0xc4, 0x96, 0x36, 0xbd, 0x43, 0x3d, 0x2e, 0xc8, 0xf0, 0xe5, 0x18, 0x73, 0x2e, 0xf8, 0xfa, 0x21, 0xd4, 0xd0, 0x71, 0xcc, 0x3b, 0xc4, 0x6c, 0xd7, 0x9f, 0xa3, 0x8a, 0x28, 0xb8, 0x10 }, - // 211 - { 0xa1, 0xd0, 0x34, 0x35, 0x23, 0xb8, 0x93, 0xfc, 0xa8, 0x4f, 0x47, 0xfe, 0xb4, 0xa6, 0x4d, 0x35, 0x0a, 0x17, 0xd8, 0xee, 0xf5, 0x49, 0x7e, 0xce, 0x69, 0x7d, 0x02, 0xd7, 0x91, 0x78, 0xb5, 0x91 }, - // 212 - { 0x26, 0x2e, 0xbf, 0xd9, 0x13, 0x0b, 0x7d, 0x28, 0x76, 0x0d, 0x08, 0xef, 0x8b, 0xfd, 0x3b, 0x86, 0xcd, 0xd3, 0xb2, 0x11, 0x3d, 0x2c, 0xae, 0xf7, 0xea, 0x95, 0x1a, 0x30, 0x3d, 0xfa, 0x38, 0x46 }, - // 213 - { 0xf7, 0x61, 0x58, 0xed, 0xd5, 0x0a, 0x15, 0x4f, 0xa7, 0x82, 0x03, 0xed, 0x23, 0x62, 0x93, 0x2f, 0xcb, 0x82, 0x53, 0xaa, 0xe3, 0x78, 0x90, 0x3e, 0xde, 0xd1, 0xe0, 0x3f, 0x70, 0x21, 0xa2, 0x57 }, - // 214 - { 0x26, 0x17, 0x8e, 0x95, 0x0a, 0xc7, 0x22, 0xf6, 0x7a, 0xe5, 0x6e, 0x57, 0x1b, 0x28, 0x4c, 0x02, 0x07, 0x68, 0x4a, 0x63, 0x34, 0xa1, 0x77, 0x48, 0xa9, 0x4d, 0x26, 0x0b, 0xc5, 0xf5, 0x52, 0x74 }, - // 215 - { 0xc3, 0x78, 0xd1, 0xe4, 0x93, 0xb4, 0x0e, 0xf1, 0x1f, 0xe6, 0xa1, 0x5d, 0x9c, 0x27, 0x37, 0xa3, 0x78, 0x09, 0x63, 0x4c, 0x5a, 0xba, 0xd5, 0xb3, 0x3d, 0x7e, 0x39, 0x3b, 0x4a, 0xe0, 0x5d, 0x03 }, - // 216 - { 0x98, 0x4b, 0xd8, 0x37, 0x91, 0x01, 0xbe, 0x8f, 0xd8, 0x06, 0x12, 0xd8, 0xea, 0x29, 0x59, 0xa7, 0x86, 0x5e, 0xc9, 0x71, 0x85, 0x23, 0x55, 0x01, 0x07, 0xae, 0x39, 0x38, 0xdf, 0x32, 0x01, 0x1b }, - // 217 - { 0xc6, 0xf2, 0x5a, 0x81, 0x2a, 0x14, 0x48, 0x58, 0xac, 0x5c, 0xed, 0x37, 0xa9, 0x3a, 0x9f, 0x47, 0x59, 0xba, 0x0b, 0x1c, 0x0f, 0xdc, 0x43, 0x1d, 0xce, 0x35, 0xf9, 0xec, 0x1f, 0x1f, 0x4a, 0x99 }, - // 218 - { 0x92, 0x4c, 0x75, 0xc9, 0x44, 0x24, 0xff, 0x75, 0xe7, 0x4b, 0x8b, 0x4e, 0x94, 0x35, 0x89, 0x58, 0xb0, 0x27, 0xb1, 0x71, 0xdf, 0x5e, 0x57, 0x89, 0x9a, 0xd0, 0xd4, 0xda, 0xc3, 0x73, 0x53, 0xb6 }, - // 219 - { 0x0a, 0xf3, 0x58, 0x92, 0xa6, 0x3f, 0x45, 0x93, 0x1f, 0x68, 0x46, 0xed, 0x19, 0x03, 0x61, 0xcd, 0x07, 0x30, 0x89, 0xe0, 0x77, 0x16, 0x57, 0x14, 0xb5, 0x0b, 0x81, 0xa2, 0xe3, 0xdd, 0x9b, 0xa1 }, - // 220 - { 0xcc, 0x80, 0xce, 0xfb, 0x26, 0xc3, 0xb2, 0xb0, 0xda, 0xef, 0x23, 0x3e, 0x60, 0x6d, 0x5f, 0xfc, 0x80, 0xfa, 0x17, 0x42, 0x7d, 0x18, 0xe3, 0x04, 0x89, 0x67, 0x3e, 0x06, 0xef, 0x4b, 0x87, 0xf7 }, - // 221 - { 0xc2, 0xf8, 0xc8, 0x11, 0x74, 0x47, 0xf3, 0x97, 0x8b, 0x08, 0x18, 0xdc, 0xf6, 0xf7, 0x01, 0x16, 0xac, 0x56, 0xfd, 0x18, 0x4d, 0xd1, 0x27, 0x84, 0x94, 0xe1, 0x03, 0xfc, 0x6d, 0x74, 0xa8, 0x87 }, - // 222 - { 0xbd, 0xec, 0xf6, 0xbf, 0xc1, 0xba, 0x0d, 0xf6, 0xe8, 0x62, 0xc8, 0x31, 0x99, 0x22, 0x07, 0x79, 0x6a, 0xcc, 0x79, 0x79, 0x68, 0x35, 0x88, 0x28, 0xc0, 0x6e, 0x7a, 0x51, 0xe0, 0x90, 0x09, 0x8f }, - // 223 - { 0x24, 0xd1, 0xa2, 0x6e, 0x3d, 0xab, 0x02, 0xfe, 0x45, 0x72, 0xd2, 0xaa, 0x7d, 0xbd, 0x3e, 0xc3, 0x0f, 0x06, 0x93, 0xdb, 0x26, 0xf2, 0x73, 0xd0, 0xab, 0x2c, 0xb0, 0xc1, 0x3b, 0x5e, 0x64, 0x51 }, - // 224 - { 0xec, 0x56, 0xf5, 0x8b, 0x09, 0x29, 0x9a, 0x30, 0x0b, 0x14, 0x05, 0x65, 0xd7, 0xd3, 0xe6, 0x87, 0x82, 0xb6, 0xe2, 0xfb, 0xeb, 0x4b, 0x7e, 0xa9, 0x7a, 0xc0, 0x57, 0x98, 0x90, 0x61, 0xdd, 0x3f }, - // 225 - { 0x11, 0xa4, 0x37, 0xc1, 0xab, 0xa3, 0xc1, 0x19, 0xdd, 0xfa, 0xb3, 0x1b, 0x3e, 0x8c, 0x84, 0x1d, 0xee, 0xeb, 0x91, 0x3e, 0xf5, 0x7f, 0x7e, 0x48, 0xf2, 0xc9, 0xcf, 0x5a, 0x28, 0xfa, 0x42, 0xbc }, - // 226 - { 0x53, 0xc7, 0xe6, 0x11, 0x4b, 0x85, 0x0a, 0x2c, 0xb4, 0x96, 0xc9, 0xb3, 0xc6, 0x9a, 0x62, 0x3e, 0xae, 0xa2, 0xcb, 0x1d, 0x33, 0xdd, 0x81, 0x7e, 0x47, 0x65, 0xed, 0xaa, 0x68, 0x23, 0xc2, 0x28 }, - // 227 - { 0x15, 0x4c, 0x3e, 0x96, 0xfe, 0xe5, 0xdb, 0x14, 0xf8, 0x77, 0x3e, 0x18, 0xaf, 0x14, 0x85, 0x79, 0x13, 0x50, 0x9d, 0xa9, 0x99, 0xb4, 0x6c, 0xdd, 0x3d, 0x4c, 0x16, 0x97, 0x60, 0xc8, 0x3a, 0xd2 }, - // 228 - { 0x40, 0xb9, 0x91, 0x6f, 0x09, 0x3e, 0x02, 0x7a, 0x87, 0x86, 0x64, 0x18, 0x18, 0x92, 0x06, 0x20, 0x47, 0x2f, 0xbc, 0xf6, 0x8f, 0x70, 0x1d, 0x1b, 0x68, 0x06, 0x32, 0xe6, 0x99, 0x6b, 0xde, 0xd3 }, - // 229 - { 0x24, 0xc4, 0xcb, 0xba, 0x07, 0x11, 0x98, 0x31, 0xa7, 0x26, 0xb0, 0x53, 0x05, 0xd9, 0x6d, 0xa0, 0x2f, 0xf8, 0xb1, 0x48, 0xf0, 0xda, 0x44, 0x0f, 0xe2, 0x33, 0xbc, 0xaa, 0x32, 0xc7, 0x2f, 0x6f }, - // 230 - { 0x5d, 0x20, 0x15, 0x10, 0x25, 0x00, 0x20, 0xb7, 0x83, 0x68, 0x96, 0x88, 0xab, 0xbf, 0x8e, 0xcf, 0x25, 0x94, 0xa9, 0x6a, 0x08, 0xf2, 0xbf, 0xec, 0x6c, 0xe0, 0x57, 0x44, 0x65, 0xdd, 0xed, 0x71 }, - // 231 - { 0x04, 0x3b, 0x97, 0xe3, 0x36, 0xee, 0x6f, 0xdb, 0xbe, 0x2b, 0x50, 0xf2, 0x2a, 0xf8, 0x32, 0x75, 0xa4, 0x08, 0x48, 0x05, 0xd2, 0xd5, 0x64, 0x59, 0x62, 0x45, 0x4b, 0x6c, 0x9b, 0x80, 0x53, 0xa0 }, - // 232 - { 0x56, 0x48, 0x35, 0xcb, 0xae, 0xa7, 0x74, 0x94, 0x85, 0x68, 0xbe, 0x36, 0xcf, 0x52, 0xfc, 0xdd, 0x83, 0x93, 0x4e, 0xb0, 0xa2, 0x75, 0x12, 0xdb, 0xe3, 0xe2, 0xdb, 0x47, 0xb9, 0xe6, 0x63, 0x5a }, - // 233 - { 0xf2, 0x1c, 0x33, 0xf4, 0x7b, 0xde, 0x40, 0xa2, 0xa1, 0x01, 0xc9, 0xcd, 0xe8, 0x02, 0x7a, 0xaf, 0x61, 0xa3, 0x13, 0x7d, 0xe2, 0x42, 0x2b, 0x30, 0x03, 0x5a, 0x04, 0xc2, 0x70, 0x89, 0x41, 0x83 }, - // 234 - { 0x9d, 0xb0, 0xef, 0x74, 0xe6, 0x6c, 0xbb, 0x84, 0x2e, 0xb0, 0xe0, 0x73, 0x43, 0xa0, 0x3c, 0x5c, 0x56, 0x7e, 0x37, 0x2b, 0x3f, 0x23, 0xb9, 0x43, 0xc7, 0x88, 0xa4, 0xf2, 0x50, 0xf6, 0x78, 0x91 }, - // 235 - { 0xab, 0x8d, 0x08, 0x65, 0x5f, 0xf1, 0xd3, 0xfe, 0x87, 0x58, 0xd5, 0x62, 0x23, 0x5f, 0xd2, 0x3e, 0x7c, 0xf9, 0xdc, 0xaa, 0xd6, 0x58, 0x87, 0x2a, 0x49, 0xe5, 0xd3, 0x18, 0x3b, 0x6c, 0xce, 0xbd }, - // 236 - { 0x6f, 0x27, 0xf7, 0x7e, 0x7b, 0xcf, 0x46, 0xa1, 0xe9, 0x63, 0xad, 0xe0, 0x30, 0x97, 0x33, 0x54, 0x30, 0x31, 0xdc, 0xcd, 0xd4, 0x7c, 0xaa, 0xc1, 0x74, 0xd7, 0xd2, 0x7c, 0xe8, 0x07, 0x7e, 0x8b }, - // 237 - { 0xe3, 0xcd, 0x54, 0xda, 0x7e, 0x44, 0x4c, 0xaa, 0x62, 0x07, 0x56, 0x95, 0x25, 0xa6, 0x70, 0xeb, 0xae, 0x12, 0x78, 0xde, 0x4e, 0x3f, 0xe2, 0x68, 0x4b, 0x3e, 0x33, 0xf5, 0xef, 0x90, 0xcc, 0x1b }, - // 238 - { 0xb2, 0xc3, 0xe3, 0x3a, 0x51, 0xd2, 0x2c, 0x4c, 0x08, 0xfc, 0x09, 0x89, 0xc8, 0x73, 0xc9, 0xcc, 0x41, 0x50, 0x57, 0x9b, 0x1e, 0x61, 0x63, 0xfa, 0x69, 0x4a, 0xd5, 0x1d, 0x53, 0xd7, 0x12, 0xdc }, - // 239 - { 0xbe, 0x7f, 0xda, 0x98, 0x3e, 0x13, 0x18, 0x9b, 0x4c, 0x77, 0xe0, 0xa8, 0x09, 0x20, 0xb6, 0xe0, 0xe0, 0xea, 0x80, 0xc3, 0xb8, 0x4d, 0xbe, 0x7e, 0x71, 0x17, 0xd2, 0x53, 0xf4, 0x81, 0x12, 0xf4 }, - // 240 - { 0xb6, 0x00, 0x8c, 0x28, 0xfa, 0xe0, 0x8a, 0xa4, 0x27, 0xe5, 0xbd, 0x3a, 0xad, 0x36, 0xf1, 0x00, 0x21, 0xf1, 0x6c, 0x77, 0xcf, 0xea, 0xbe, 0xd0, 0x7f, 0x97, 0xcc, 0x7d, 0xc1, 0xf1, 0x28, 0x4a }, - // 241 - { 0x6e, 0x4e, 0x67, 0x60, 0xc5, 0x38, 0xf2, 0xe9, 0x7b, 0x3a, 0xdb, 0xfb, 0xbc, 0xde, 0x57, 0xf8, 0x96, 0x6b, 0x7e, 0xa8, 0xfc, 0xb5, 0xbf, 0x7e, 0xfe, 0xc9, 0x13, 0xfd, 0x2a, 0x2b, 0x0c, 0x55 }, - // 242 - { 0x4a, 0xe5, 0x1f, 0xd1, 0x83, 0x4a, 0xa5, 0xbd, 0x9a, 0x6f, 0x7e, 0xc3, 0x9f, 0xc6, 0x63, 0x33, 0x8d, 0xc5, 0xd2, 0xe2, 0x07, 0x61, 0x56, 0x6d, 0x90, 0xcc, 0x68, 0xb1, 0xcb, 0x87, 0x5e, 0xd8 }, - // 243 - { 0xb6, 0x73, 0xaa, 0xd7, 0x5a, 0xb1, 0xfd, 0xb5, 0x40, 0x1a, 0xbf, 0xa1, 0xbf, 0x89, 0xf3, 0xad, 0xd2, 0xeb, 0xc4, 0x68, 0xdf, 0x36, 0x24, 0xa4, 0x78, 0xf4, 0xfe, 0x85, 0x9d, 0x8d, 0x55, 0xe2 }, - // 244 - { 0x13, 0xc9, 0x47, 0x1a, 0x98, 0x55, 0x91, 0x35, 0x39, 0x83, 0x66, 0x60, 0x39, 0x8d, 0xa0, 0xf3, 0xf9, 0x9a, 0xda, 0x08, 0x47, 0x9c, 0x69, 0xd1, 0xb7, 0xfc, 0xaa, 0x34, 0x61, 0xdd, 0x7e, 0x59 }, - // 245 - { 0x2c, 0x11, 0xf4, 0xa7, 0xf9, 0x9a, 0x1d, 0x23, 0xa5, 0x8b, 0xb6, 0x36, 0x35, 0x0f, 0xe8, 0x49, 0xf2, 0x9c, 0xba, 0xc1, 0xb2, 0xa1, 0x11, 0x2d, 0x9f, 0x1e, 0xd5, 0xbc, 0x5b, 0x31, 0x3c, 0xcd }, - // 246 - { 0xc7, 0xd3, 0xc0, 0x70, 0x6b, 0x11, 0xae, 0x74, 0x1c, 0x05, 0xa1, 0xef, 0x15, 0x0d, 0xd6, 0x5b, 0x54, 0x94, 0xd6, 0xd5, 0x4c, 0x9a, 0x86, 0xe2, 0x61, 0x78, 0x54, 0xe6, 0xae, 0xee, 0xbb, 0xd9 }, - // 247 - { 0x19, 0x4e, 0x10, 0xc9, 0x38, 0x93, 0xaf, 0xa0, 0x64, 0xc3, 0xac, 0x04, 0xc0, 0xdd, 0x80, 0x8d, 0x79, 0x1c, 0x3d, 0x4b, 0x75, 0x56, 0xe8, 0x9d, 0x8d, 0x9c, 0xb2, 0x25, 0xc4, 0xb3, 0x33, 0x39 }, - // 248 - { 0x6f, 0xc4, 0x98, 0x8b, 0x8f, 0x78, 0x54, 0x6b, 0x16, 0x88, 0x99, 0x18, 0x45, 0x90, 0x8f, 0x13, 0x4b, 0x6a, 0x48, 0x2e, 0x69, 0x94, 0xb3, 0xd4, 0x83, 0x17, 0xbf, 0x08, 0xdb, 0x29, 0x21, 0x85 }, - // 249 - { 0x56, 0x65, 0xbe, 0xb8, 0xb0, 0x95, 0x55, 0x25, 0x81, 0x3b, 0x59, 0x81, 0xcd, 0x14, 0x2e, 0xd4, 0xd0, 0x3f, 0xba, 0x38, 0xa6, 0xf3, 0xe5, 0xad, 0x26, 0x8e, 0x0c, 0xc2, 0x70, 0xd1, 0xcd, 0x11 }, - // 250 - { 0xb8, 0x83, 0xd6, 0x8f, 0x5f, 0xe5, 0x19, 0x36, 0x43, 0x1b, 0xa4, 0x25, 0x67, 0x38, 0x05, 0x3b, 0x1d, 0x04, 0x26, 0xd4, 0xcb, 0x64, 0xb1, 0x6e, 0x83, 0xba, 0xdc, 0x5e, 0x9f, 0xbe, 0x3b, 0x81 }, - // 251 - { 0x53, 0xe7, 0xb2, 0x7e, 0xa5, 0x9c, 0x2f, 0x6d, 0xbb, 0x50, 0x76, 0x9e, 0x43, 0x55, 0x4d, 0xf3, 0x5a, 0xf8, 0x9f, 0x48, 0x22, 0xd0, 0x46, 0x6b, 0x00, 0x7d, 0xd6, 0xf6, 0xde, 0xaf, 0xff, 0x02 }, - // 252 - { 0x1f, 0x1a, 0x02, 0x29, 0xd4, 0x64, 0x0f, 0x01, 0x90, 0x15, 0x88, 0xd9, 0xde, 0xc2, 0x2d, 0x13, 0xfc, 0x3e, 0xb3, 0x4a, 0x61, 0xb3, 0x29, 0x38, 0xef, 0xbf, 0x53, 0x34, 0xb2, 0x80, 0x0a, 0xfa }, - // 253 - { 0xc2, 0xb4, 0x05, 0xaf, 0xa0, 0xfa, 0x66, 0x68, 0x85, 0x2a, 0xee, 0x4d, 0x88, 0x04, 0x08, 0x53, 0xfa, 0xb8, 0x00, 0xe7, 0x2b, 0x57, 0x58, 0x14, 0x18, 0xe5, 0x50, 0x6f, 0x21, 0x4c, 0x7d, 0x1f }, - // 254 - { 0xc0, 0x8a, 0xa1, 0xc2, 0x86, 0xd7, 0x09, 0xfd, 0xc7, 0x47, 0x37, 0x44, 0x97, 0x71, 0x88, 0xc8, 0x95, 0xba, 0x01, 0x10, 0x14, 0x24, 0x7e, 0x4e, 0xfa, 0x8d, 0x07, 0xe7, 0x8f, 0xec, 0x69, 0x5c }, - // 255 - { 0xf0, 0x3f, 0x57, 0x89, 0xd3, 0x33, 0x6b, 0x80, 0xd0, 0x02, 0xd5, 0x9f, 0xdf, 0x91, 0x8b, 0xdb, 0x77, 0x5b, 0x00, 0x95, 0x6e, 0xd5, 0x52, 0x8e, 0x86, 0xaa, 0x99, 0x4a, 0xcb, 0x38, 0xfe, 0x2d }, -}; -static const uint8_t secret_KATs[256][32] = { - // 0 - { 0xc2, 0x46, 0x11, 0x1b, 0x7f, 0xd2, 0xad, 0x01, 0x78, 0xfa, 0x71, 0xa3, 0x2d, 0xd6, 0xc3, 0x85, 0x3f, 0x0b, 0xb5, 0x27, 0xbb, 0x7e, 0x7f, 0x43, 0x11, 0x31, 0xe5, 0xea, 0xd8, 0x44, 0x98, 0x09 }, - // 1 - { 0xea, 0x7d, 0x63, 0x3f, 0xd6, 0x97, 0x31, 0xbd, 0x1c, 0xff, 0x95, 0x42, 0xe9, 0x11, 0xdf, 0x43, 0xa2, 0x2a, 0x32, 0x8c, 0x59, 0x25, 0x73, 0x23, 0xd0, 0x62, 0x9a, 0xa2, 0xb7, 0x25, 0x61, 0x85 }, - // 2 - { 0x2b, 0x12, 0x3b, 0x56, 0x40, 0x76, 0xc9, 0xbd, 0xfe, 0xd5, 0x16, 0x21, 0x38, 0xe3, 0xd5, 0xfa, 0x9e, 0x7b, 0x79, 0xc6, 0xd2, 0xfc, 0x1c, 0xf0, 0x14, 0x31, 0x1e, 0xbb, 0xd3, 0x8d, 0x32, 0x32 }, - // 3 - { 0x0d, 0x93, 0xb5, 0xb5, 0x26, 0xc7, 0x2b, 0xd9, 0x8e, 0xc1, 0x20, 0xe9, 0xd8, 0x50, 0x18, 0x00, 0x86, 0x7a, 0x60, 0x98, 0x5a, 0x91, 0xeb, 0x53, 0x92, 0x02, 0x5b, 0x3e, 0x57, 0xe4, 0x30, 0x8b }, - // 4 - { 0x24, 0x6c, 0x1e, 0x43, 0x3f, 0xfc, 0x88, 0x36, 0x05, 0x6d, 0x86, 0xa5, 0xef, 0xa4, 0x83, 0x10, 0x7a, 0x5f, 0xb7, 0x6b, 0x15, 0xcd, 0xdd, 0x41, 0x75, 0x49, 0x8e, 0xb5, 0x52, 0x8f, 0x09, 0x7a }, - // 5 - { 0x9a, 0x3d, 0xbe, 0xcc, 0x68, 0x23, 0x3c, 0x75, 0x33, 0x7f, 0x13, 0xe7, 0xce, 0x2a, 0x67, 0x61, 0x8d, 0xcd, 0x9e, 0x12, 0xf6, 0x17, 0xaa, 0xb1, 0xae, 0x0d, 0xaa, 0xac, 0xa7, 0xdf, 0x16, 0xaa }, - // 6 - { 0xd9, 0x97, 0xf9, 0x97, 0x8a, 0x46, 0x52, 0x67, 0xc5, 0xef, 0x9f, 0xad, 0x38, 0x62, 0xca, 0x5a, 0x40, 0x59, 0xa6, 0xd7, 0xf1, 0x41, 0x92, 0x34, 0xa8, 0xf3, 0xd2, 0x2b, 0xa2, 0xaa, 0x96, 0x79 }, - // 7 - { 0x1d, 0xcc, 0xda, 0x90, 0x6c, 0xa9, 0x1e, 0xcd, 0xbb, 0x17, 0x55, 0x70, 0xd9, 0xcb, 0xe3, 0x4c, 0x32, 0xd5, 0x68, 0xb0, 0x98, 0x23, 0x25, 0xb9, 0x54, 0xa0, 0x2a, 0x77, 0x37, 0x13, 0xd6, 0x9a }, - // 8 - { 0x92, 0x33, 0x0f, 0x59, 0x33, 0x77, 0xd1, 0x7a, 0x93, 0x4f, 0x14, 0x7e, 0x7e, 0x7d, 0xff, 0x42, 0xf4, 0x23, 0xf7, 0x6c, 0xc3, 0x3c, 0xd0, 0xb6, 0x93, 0xe6, 0xa7, 0x8d, 0xea, 0x25, 0xb3, 0x67 }, - // 9 - { 0xa3, 0xc6, 0xe0, 0x9c, 0x34, 0xd7, 0x15, 0x50, 0x22, 0xd9, 0xd8, 0xc7, 0xe8, 0x83, 0x81, 0x08, 0xf5, 0xd8, 0xf8, 0xc9, 0x48, 0xc3, 0xa3, 0x91, 0xe9, 0x75, 0x3f, 0x17, 0xf8, 0x37, 0x32, 0x0a }, - // 10 - { 0x35, 0x50, 0xd0, 0xbe, 0x66, 0xa1, 0x17, 0x48, 0x7a, 0x6b, 0x09, 0x2e, 0x85, 0x29, 0xce, 0x85, 0x4c, 0x03, 0x83, 0xc5, 0xfb, 0xc5, 0xcc, 0x8f, 0x25, 0x9b, 0xc7, 0x35, 0x24, 0xde, 0x8e, 0x95 }, - // 11 - { 0x39, 0xe9, 0xfc, 0x92, 0x42, 0x33, 0x42, 0xa4, 0xf9, 0xbf, 0x07, 0xbb, 0x19, 0x4c, 0x5f, 0x82, 0x60, 0x6c, 0xe0, 0x54, 0x05, 0x2e, 0xf9, 0xff, 0xc2, 0x66, 0xe1, 0x7e, 0xf2, 0xbd, 0x7f, 0x7f }, - // 12 - { 0x13, 0xc0, 0xc0, 0x24, 0xf3, 0x58, 0x81, 0xc8, 0x38, 0xa3, 0x30, 0x4f, 0x9d, 0x5c, 0x84, 0xce, 0x29, 0x95, 0xfa, 0xe3, 0x78, 0x86, 0x47, 0x33, 0xd1, 0x2e, 0x36, 0x95, 0x9f, 0xa4, 0x19, 0xcd }, - // 13 - { 0xc0, 0xf4, 0x98, 0x5d, 0xd9, 0x82, 0xae, 0xde, 0xb4, 0xcb, 0x4e, 0x1c, 0x8e, 0x21, 0x6d, 0x30, 0xd2, 0x46, 0xdf, 0x5d, 0xd3, 0x46, 0xe3, 0xb9, 0xbe, 0xaa, 0x39, 0x99, 0xd9, 0x1c, 0xa9, 0xaf }, - // 14 - { 0xc7, 0x42, 0x6a, 0x25, 0x9f, 0xf5, 0x0c, 0x43, 0xba, 0x85, 0xe8, 0x49, 0x1d, 0x99, 0x7c, 0xc2, 0xbf, 0x69, 0x79, 0xe9, 0x45, 0xd5, 0x6d, 0xcb, 0xf8, 0x5f, 0x57, 0xfe, 0x23, 0x48, 0x97, 0x9e }, - // 15 - { 0xa0, 0x23, 0x5d, 0x3c, 0xc3, 0x69, 0x6f, 0x61, 0xc0, 0xf0, 0xea, 0xe1, 0xe9, 0x74, 0x05, 0xcb, 0xd8, 0x41, 0x01, 0x31, 0xe7, 0x35, 0xac, 0xf4, 0x8f, 0xf2, 0x40, 0x3b, 0x16, 0xa5, 0x37, 0xaa }, - // 16 - { 0xb4, 0xfc, 0xec, 0x34, 0x89, 0x1f, 0x0a, 0xd4, 0xf2, 0xce, 0x4d, 0xd3, 0xc2, 0x5e, 0x09, 0x1f, 0xe9, 0x80, 0xd0, 0xfc, 0xb1, 0x00, 0xcd, 0xdf, 0xc8, 0x63, 0x4c, 0xa1, 0x6f, 0x9b, 0x15, 0x5f }, - // 17 - { 0x7d, 0xb4, 0xe5, 0xfa, 0x52, 0xa6, 0xd9, 0x19, 0xa8, 0xd5, 0x18, 0x0e, 0xfb, 0xea, 0xe4, 0x9c, 0xf4, 0xd7, 0xbb, 0xad, 0xd3, 0x79, 0xa7, 0x0d, 0x26, 0xc9, 0x4f, 0xc9, 0xff, 0xc6, 0xd2, 0xd3 }, - // 18 - { 0xa6, 0x09, 0xee, 0x20, 0xcb, 0xda, 0xe8, 0x5d, 0xc3, 0x7c, 0x14, 0xca, 0x68, 0x15, 0x88, 0x8e, 0x97, 0xe6, 0x91, 0xb5, 0x5b, 0x2f, 0xe9, 0x5f, 0x61, 0x4d, 0x89, 0x24, 0x75, 0x94, 0xb6, 0xb9 }, - // 19 - { 0x56, 0x5e, 0xeb, 0xd2, 0xda, 0x80, 0x11, 0x43, 0x6d, 0xfd, 0xf3, 0xa4, 0x92, 0xa7, 0x76, 0xdf, 0x67, 0xef, 0x6f, 0x4c, 0xf5, 0xfa, 0x0c, 0xf4, 0x63, 0xee, 0x2e, 0x56, 0x4d, 0x71, 0x41, 0xa4 }, - // 20 - { 0x5f, 0x28, 0x99, 0x4b, 0xb2, 0x30, 0x63, 0xe6, 0x48, 0x1b, 0xf4, 0x09, 0x64, 0x77, 0x6a, 0x03, 0x0d, 0x74, 0xe8, 0xc9, 0xb0, 0x91, 0xc3, 0xd9, 0x3a, 0x06, 0xd3, 0x74, 0x00, 0x95, 0x79, 0x86 }, - // 21 - { 0xc9, 0x94, 0x5f, 0x3f, 0x70, 0xee, 0x67, 0x5f, 0x1c, 0x9a, 0xc6, 0x93, 0x7e, 0x21, 0x0a, 0x50, 0x30, 0xaa, 0x56, 0x76, 0xdd, 0x72, 0x12, 0xe9, 0x57, 0x02, 0x19, 0x01, 0x8a, 0x85, 0xd5, 0x67 }, - // 22 - { 0xca, 0xd4, 0xa9, 0x7f, 0xff, 0xcb, 0x34, 0x4d, 0xfa, 0x85, 0x95, 0x23, 0x0e, 0x12, 0xc2, 0x04, 0x66, 0x63, 0x38, 0x7b, 0xa9, 0x83, 0xd5, 0x60, 0x52, 0x16, 0xe7, 0xf4, 0xff, 0xc6, 0xe9, 0xeb }, - // 23 - { 0xb1, 0xa4, 0x50, 0xec, 0xee, 0xe0, 0x71, 0x04, 0xd8, 0x2b, 0x16, 0x29, 0x6a, 0xf5, 0xa3, 0x99, 0x8f, 0xd7, 0x33, 0x76, 0x8e, 0x63, 0xa6, 0x80, 0x69, 0x60, 0xa1, 0x8c, 0x6c, 0x52, 0x81, 0xc1 }, - // 24 - { 0x06, 0x17, 0xc8, 0x44, 0xcd, 0x2c, 0xa8, 0xe7, 0x5d, 0xfb, 0xcc, 0x79, 0x26, 0x52, 0xfc, 0x73, 0x4e, 0x7e, 0x9c, 0x5e, 0x3d, 0x45, 0x65, 0xea, 0x2d, 0xe9, 0x83, 0xcb, 0x15, 0xe5, 0x95, 0x73 }, - // 25 - { 0xac, 0xef, 0x33, 0xd2, 0x25, 0x0e, 0xfc, 0x67, 0x28, 0x29, 0x7a, 0xda, 0xba, 0xa1, 0x1f, 0xc1, 0xb8, 0xab, 0x16, 0x4c, 0x3a, 0xa6, 0xa7, 0x9b, 0xd4, 0xe5, 0x3a, 0x1a, 0x0a, 0x89, 0x2a, 0xb9 }, - // 26 - { 0x16, 0x20, 0x23, 0x53, 0xf1, 0xc9, 0x17, 0xac, 0x67, 0x69, 0x73, 0xdc, 0x20, 0x55, 0x1d, 0xe2, 0x80, 0x9f, 0x4e, 0x63, 0xe3, 0x2a, 0x98, 0xf9, 0xe5, 0xa7, 0x90, 0xde, 0x79, 0x64, 0x9c, 0xef }, - // 27 - { 0x96, 0xab, 0xbc, 0x8b, 0x77, 0xfa, 0x09, 0x07, 0x69, 0xcc, 0x11, 0x75, 0x86, 0xd9, 0x9e, 0xdc, 0x6d, 0xeb, 0xc1, 0x12, 0x21, 0x73, 0x4d, 0x61, 0xfe, 0x87, 0xdc, 0xf2, 0x30, 0xf3, 0x93, 0xef }, - // 28 - { 0xc6, 0x18, 0x1d, 0xe0, 0x78, 0x94, 0xa3, 0xba, 0x37, 0x19, 0x1f, 0x7d, 0xd9, 0xb3, 0x17, 0xf7, 0xc0, 0xbe, 0x5b, 0xb3, 0x95, 0xab, 0x34, 0xb8, 0xb1, 0x53, 0xfa, 0xd8, 0x08, 0xc6, 0x8b, 0x3f }, - // 29 - { 0x9a, 0xfa, 0x47, 0x90, 0xd6, 0x75, 0x6f, 0x5a, 0x48, 0xa0, 0xd5, 0x7f, 0x20, 0x1a, 0x18, 0x44, 0xd6, 0x8b, 0x31, 0xa6, 0x44, 0xa2, 0x5b, 0x9f, 0x18, 0x53, 0xea, 0xa9, 0xd8, 0xb3, 0xcb, 0x73 }, - // 30 - { 0x78, 0x3f, 0x50, 0x46, 0x64, 0x8c, 0x0f, 0x5b, 0x8b, 0xc1, 0xfe, 0x09, 0xa8, 0xa0, 0x11, 0x71, 0xd4, 0xad, 0x60, 0x40, 0x69, 0x70, 0xf0, 0xd8, 0xbd, 0x29, 0x7d, 0x36, 0x0c, 0xfb, 0xe7, 0x40 }, - // 31 - { 0x32, 0x5a, 0x19, 0x6e, 0xc9, 0x08, 0xa9, 0x4b, 0x54, 0x10, 0x52, 0x3c, 0x03, 0x0d, 0xf7, 0xb2, 0xed, 0x5b, 0x69, 0x3d, 0xb3, 0x8f, 0x32, 0x6c, 0x82, 0xd7, 0x00, 0x01, 0xeb, 0x14, 0xd0, 0x41 }, - // 32 - { 0x64, 0xdb, 0x7e, 0xf8, 0x98, 0x4a, 0xf4, 0x77, 0x0e, 0xaf, 0xc2, 0x01, 0xfc, 0x7b, 0xc6, 0x11, 0x06, 0xe5, 0x09, 0xc7, 0xd8, 0xc7, 0x64, 0x8b, 0x13, 0x76, 0x1a, 0x15, 0xd9, 0x73, 0x07, 0xc7 }, - // 33 - { 0xbc, 0x20, 0x71, 0x1f, 0x33, 0x8c, 0x9a, 0xb8, 0x0d, 0x3e, 0x80, 0x36, 0x6b, 0x1b, 0x96, 0xf0, 0xd2, 0x72, 0x27, 0x03, 0xc3, 0x47, 0xe1, 0xbc, 0x6a, 0x0a, 0xeb, 0xc3, 0x5b, 0x5d, 0xda, 0x05 }, - // 34 - { 0x4a, 0xc6, 0xf4, 0x2f, 0xf0, 0x92, 0xfd, 0x36, 0xa9, 0x23, 0x95, 0xa4, 0xf8, 0x8a, 0xd0, 0xb2, 0xcd, 0xd6, 0x0c, 0x94, 0x9d, 0x15, 0x27, 0xa3, 0x12, 0x28, 0xc2, 0x06, 0x85, 0xdb, 0x71, 0x70 }, - // 35 - { 0x3d, 0x7e, 0x4a, 0xc9, 0x98, 0x0d, 0x55, 0x6e, 0x31, 0x18, 0x78, 0x0e, 0xc9, 0xcc, 0x69, 0x96, 0xa1, 0xc4, 0xbd, 0x84, 0x43, 0x8b, 0xea, 0x42, 0x2b, 0x05, 0x1e, 0x8f, 0xda, 0xd3, 0x13, 0xc4 }, - // 36 - { 0x36, 0x87, 0x8f, 0xd5, 0x4d, 0x00, 0x43, 0x24, 0x1a, 0xfc, 0xa0, 0x88, 0x85, 0xe5, 0xf0, 0x89, 0x23, 0x92, 0xed, 0x26, 0xaf, 0xf1, 0xe9, 0x90, 0x13, 0x25, 0x75, 0xc0, 0x54, 0x3b, 0x2b, 0x5d }, - // 37 - { 0xb2, 0x53, 0xa4, 0x7f, 0x48, 0x01, 0xdd, 0x13, 0xd8, 0x09, 0xd0, 0xd4, 0x40, 0x34, 0xf0, 0x02, 0xac, 0xd1, 0x5a, 0x51, 0x97, 0xe7, 0x0c, 0x38, 0xc0, 0x51, 0xe6, 0xc3, 0xbb, 0xd7, 0xab, 0xa5 }, - // 38 - { 0x62, 0x29, 0x7a, 0x40, 0x4a, 0x20, 0x15, 0x80, 0x6f, 0xa5, 0x2e, 0xd4, 0x16, 0xe9, 0x5a, 0x50, 0xbf, 0x78, 0x2e, 0x39, 0x09, 0x5c, 0x2e, 0x0d, 0x6c, 0x1c, 0xb9, 0x28, 0x23, 0xdb, 0xf9, 0x0c }, - // 39 - { 0xfb, 0x2e, 0x9d, 0x06, 0xf2, 0xe7, 0x04, 0x4f, 0xf8, 0xd4, 0x6e, 0x78, 0xe2, 0xdc, 0x86, 0xee, 0x38, 0xc0, 0xd5, 0x51, 0x48, 0x03, 0xbb, 0x00, 0xfe, 0x9c, 0xc0, 0x82, 0x55, 0xcf, 0x90, 0x8f }, - // 40 - { 0x78, 0xab, 0x0d, 0x99, 0x08, 0x57, 0xec, 0xad, 0x91, 0xb9, 0x34, 0x5f, 0xe3, 0x1a, 0x74, 0x3b, 0x16, 0x26, 0x3f, 0xab, 0x7f, 0x16, 0x83, 0xfb, 0xbc, 0xae, 0x7a, 0x03, 0xc6, 0x46, 0xd3, 0x83 }, - // 41 - { 0x18, 0xfd, 0x18, 0xa5, 0xf4, 0xda, 0x12, 0xb5, 0x01, 0x6c, 0xed, 0xd2, 0x81, 0x66, 0xf9, 0x58, 0x16, 0x64, 0x02, 0x83, 0xdc, 0xa0, 0x08, 0x6e, 0x86, 0x61, 0x31, 0x2e, 0x18, 0xd4, 0xed, 0xa2 }, - // 42 - { 0xa4, 0xa2, 0x49, 0x3b, 0x02, 0x9e, 0x2f, 0x07, 0x2b, 0xa5, 0xc1, 0x2e, 0xf3, 0x1a, 0x30, 0xe1, 0xbd, 0xb3, 0x83, 0x5b, 0xf1, 0x98, 0x3f, 0xd9, 0x5d, 0x80, 0x5c, 0xa3, 0xd0, 0xf1, 0x5b, 0x54 }, - // 43 - { 0x5e, 0x31, 0x5c, 0x0d, 0x8a, 0x87, 0x55, 0x76, 0xfb, 0xe7, 0x6a, 0x9d, 0xf1, 0x5a, 0x54, 0x0b, 0xde, 0x24, 0x08, 0x9b, 0x41, 0x87, 0x58, 0xfd, 0x5a, 0x15, 0xb8, 0x3f, 0x3d, 0x87, 0x7d, 0xa9 }, - // 44 - { 0x07, 0xc8, 0x70, 0x54, 0xcb, 0x5c, 0x60, 0x13, 0x41, 0x3f, 0xe7, 0x2d, 0xfc, 0x96, 0xfc, 0x54, 0x6b, 0x2a, 0x8f, 0xba, 0x01, 0x85, 0x55, 0x6d, 0x56, 0xd6, 0xad, 0xb4, 0x14, 0x35, 0x19, 0x76 }, - // 45 - { 0x32, 0x0e, 0xcc, 0x42, 0x8f, 0xc7, 0xb3, 0xb5, 0x6c, 0x1f, 0x9f, 0x7b, 0xb2, 0x7a, 0x15, 0x0c, 0xd4, 0x04, 0x64, 0xd4, 0x3f, 0x77, 0x49, 0x06, 0x2c, 0x7e, 0xcc, 0x29, 0x2e, 0xaf, 0x5c, 0x3d }, - // 46 - { 0xcb, 0xed, 0xbd, 0xd2, 0x04, 0xb7, 0x9e, 0x23, 0x36, 0x88, 0xaf, 0x8f, 0x7e, 0xa8, 0x64, 0xd2, 0x31, 0x0a, 0x6c, 0x25, 0xcc, 0x07, 0xb9, 0x6d, 0xb3, 0x21, 0xc3, 0x24, 0xa7, 0x89, 0x78, 0x20 }, - // 47 - { 0x34, 0x33, 0x98, 0x96, 0x32, 0x42, 0x65, 0xf4, 0xfc, 0xf0, 0x5a, 0x4f, 0x46, 0xb8, 0x3f, 0x81, 0xb6, 0x81, 0xcd, 0xa2, 0xf4, 0xbc, 0x3e, 0xf7, 0x90, 0xcc, 0x00, 0x7e, 0x39, 0x3a, 0x05, 0xce }, - // 48 - { 0x8d, 0x8f, 0xaa, 0x4d, 0xd2, 0xe3, 0x83, 0x1f, 0x1d, 0x86, 0x58, 0xe7, 0xc9, 0x77, 0x2e, 0x61, 0x44, 0x3c, 0x0d, 0xde, 0x83, 0x34, 0xae, 0xba, 0xab, 0x1d, 0xd7, 0x44, 0xe5, 0xbb, 0xe1, 0x97 }, - // 49 - { 0xe3, 0x93, 0xa9, 0xd5, 0xbf, 0xd1, 0x7f, 0x71, 0x0a, 0x08, 0x5b, 0x66, 0x5f, 0x39, 0x0c, 0x75, 0xd2, 0xc5, 0x3c, 0xe6, 0xa8, 0xbe, 0xfa, 0x75, 0x82, 0xf0, 0xbd, 0xbc, 0x33, 0x9f, 0x4e, 0x19 }, - // 50 - { 0x3c, 0xb1, 0xaf, 0xca, 0x1b, 0x82, 0xe9, 0xe0, 0x38, 0x3a, 0x55, 0x2b, 0x18, 0x2f, 0xdf, 0x73, 0x27, 0xa1, 0xf8, 0x1b, 0x11, 0x57, 0x20, 0x85, 0xb5, 0x22, 0x09, 0x75, 0x67, 0x9a, 0x60, 0xb3 }, - // 51 - { 0xa6, 0xae, 0x0f, 0x6b, 0x88, 0xc9, 0x6d, 0x39, 0xce, 0x38, 0x46, 0xfa, 0x49, 0xb1, 0xfb, 0x86, 0xb5, 0x81, 0xba, 0xae, 0x82, 0xfa, 0x5f, 0x07, 0x69, 0xd0, 0x6a, 0x9c, 0x87, 0x40, 0xc7, 0x14 }, - // 52 - { 0xd7, 0x50, 0xa2, 0x22, 0x98, 0xd7, 0x4e, 0xdf, 0xe7, 0xb9, 0x79, 0x93, 0x19, 0x4d, 0x77, 0xc2, 0x7c, 0x9c, 0x08, 0xb3, 0xb4, 0x72, 0xef, 0xec, 0xa4, 0xf8, 0xa9, 0xa4, 0xad, 0xf9, 0xce, 0xe5 }, - // 53 - { 0x9b, 0xc8, 0xdb, 0x4a, 0x2a, 0x43, 0x22, 0xfe, 0x50, 0x52, 0xf5, 0x07, 0x55, 0xd2, 0xce, 0x18, 0x30, 0xef, 0xbd, 0x9a, 0xdc, 0xba, 0x37, 0xe2, 0x68, 0x0a, 0x37, 0x4e, 0x7f, 0xf2, 0xfb, 0x4e }, - // 54 - { 0x68, 0x88, 0x0c, 0x43, 0x40, 0xea, 0x93, 0xbd, 0x3e, 0x7d, 0x67, 0x33, 0x9d, 0x61, 0xfe, 0xa4, 0x82, 0x0d, 0x9a, 0x46, 0xa9, 0x4e, 0xc0, 0x40, 0x65, 0x48, 0x91, 0xa0, 0x98, 0x17, 0x1b, 0x95 }, - // 55 - { 0x8a, 0xaf, 0x20, 0xa8, 0x6a, 0x94, 0xda, 0xc0, 0x54, 0x74, 0x1f, 0x68, 0x1f, 0x60, 0xee, 0x47, 0xe3, 0xda, 0x8f, 0x67, 0x23, 0xea, 0x07, 0x4f, 0x51, 0x59, 0x46, 0xa6, 0x89, 0x31, 0x4d, 0x4d }, - // 56 - { 0x7b, 0xe0, 0xd2, 0x2f, 0xd6, 0xbc, 0xcd, 0x54, 0x10, 0xd4, 0xcb, 0xc9, 0xeb, 0x55, 0x4f, 0x73, 0xcd, 0xbd, 0x83, 0xd1, 0x53, 0xfb, 0x2b, 0x82, 0x38, 0x3f, 0x38, 0x49, 0xfe, 0xdd, 0x3f, 0x07 }, - // 57 - { 0x56, 0xcd, 0x01, 0x32, 0x3c, 0x7e, 0x07, 0x3c, 0x40, 0xcb, 0x7e, 0x8a, 0x80, 0xf1, 0xdf, 0x15, 0xdf, 0x79, 0xc8, 0x59, 0xc1, 0x91, 0x37, 0xb3, 0xf0, 0xc8, 0xa4, 0x01, 0xe2, 0x6a, 0x97, 0x91 }, - // 58 - { 0x17, 0x2e, 0x6e, 0x3b, 0xc8, 0x1e, 0x5f, 0x15, 0xdd, 0x56, 0xa8, 0xc1, 0x2c, 0xed, 0xb7, 0xd3, 0x8e, 0x1e, 0xbb, 0x84, 0x32, 0xef, 0xee, 0x0f, 0x31, 0xba, 0xbb, 0xc8, 0xc6, 0xc1, 0xcc, 0xad }, - // 59 - { 0xbf, 0xca, 0xef, 0x58, 0x3f, 0xfe, 0x4d, 0x1f, 0x12, 0x84, 0xda, 0xb9, 0x93, 0xcb, 0xfd, 0x23, 0xba, 0x55, 0x9c, 0x9c, 0x9b, 0x4c, 0xf7, 0x01, 0xde, 0x05, 0xf6, 0x60, 0xaa, 0xef, 0xb9, 0x03 }, - // 60 - { 0xf1, 0xaf, 0x7b, 0x0a, 0xd9, 0xfa, 0x3b, 0x04, 0xb5, 0x09, 0x56, 0x2e, 0x59, 0x6b, 0x47, 0x73, 0x72, 0x09, 0xf5, 0x72, 0x9d, 0x89, 0xfa, 0xa9, 0xe9, 0x9f, 0xbd, 0xe1, 0x73, 0xd6, 0xaa, 0xb7 }, - // 61 - { 0x8b, 0xf0, 0xeb, 0xa2, 0xf2, 0x58, 0x0e, 0xfc, 0xaa, 0xdc, 0x2b, 0x02, 0xc0, 0x3a, 0x95, 0x7e, 0x03, 0x19, 0x1a, 0x82, 0xed, 0x68, 0x0c, 0xce, 0x87, 0x5e, 0x57, 0x5a, 0xa9, 0x24, 0x34, 0x60 }, - // 62 - { 0x16, 0xcd, 0xc9, 0x38, 0x54, 0x7e, 0x66, 0x1f, 0x9d, 0xde, 0xb5, 0xea, 0x29, 0x16, 0x86, 0x9c, 0x12, 0xc2, 0x04, 0xe7, 0x70, 0x87, 0x77, 0x90, 0x8b, 0x17, 0x23, 0x33, 0x72, 0x3a, 0x10, 0x38 }, - // 63 - { 0xc8, 0xb5, 0xca, 0x98, 0x82, 0x11, 0x71, 0x05, 0xe2, 0x40, 0x41, 0xa3, 0xd5, 0xce, 0x90, 0xa6, 0xb4, 0x5c, 0xe4, 0xdc, 0x5d, 0x1a, 0x5e, 0x60, 0x70, 0xb4, 0x75, 0x89, 0xa9, 0x5e, 0x88, 0x8a }, - // 64 - { 0xbd, 0x37, 0x91, 0xa7, 0x43, 0xee, 0x8e, 0x71, 0x66, 0x7f, 0xa7, 0xa1, 0x7f, 0x9a, 0xde, 0x86, 0x45, 0xd8, 0x8e, 0xd1, 0xa2, 0x45, 0x31, 0x17, 0xc9, 0x48, 0x69, 0x40, 0xa8, 0x28, 0x48, 0x67 }, - // 65 - { 0xdc, 0x08, 0x75, 0xd9, 0xb1, 0xb8, 0xe8, 0xa3, 0x9a, 0x94, 0x00, 0xf3, 0x07, 0x8a, 0x34, 0xdd, 0xa1, 0xcb, 0xf5, 0x06, 0x3e, 0x14, 0xf6, 0x05, 0xaf, 0xa1, 0xb7, 0x3b, 0x19, 0xc2, 0x19, 0x68 }, - // 66 - { 0x09, 0x5b, 0x03, 0xf6, 0x90, 0x1b, 0x78, 0x2a, 0x01, 0x1c, 0x92, 0x63, 0xfc, 0x5b, 0x48, 0x9b, 0x5b, 0x16, 0xba, 0xc7, 0x73, 0xe6, 0x8c, 0x80, 0x78, 0x3d, 0x12, 0x86, 0x25, 0xb7, 0xd6, 0x3b }, - // 67 - { 0xa1, 0x77, 0x95, 0x5d, 0x67, 0x98, 0x26, 0x12, 0xae, 0x67, 0xc8, 0x7a, 0xe0, 0x8f, 0x42, 0x6a, 0x23, 0xef, 0x69, 0x26, 0x8e, 0xb1, 0x29, 0x44, 0x83, 0xdd, 0xa0, 0x64, 0xe6, 0x9c, 0xda, 0x18 }, - // 68 - { 0xb3, 0x81, 0xae, 0xf4, 0x11, 0xf8, 0x22, 0x25, 0xa8, 0xa9, 0x6f, 0xf1, 0xdf, 0x49, 0xf2, 0xa5, 0xd0, 0x84, 0xfd, 0xe5, 0x8b, 0x87, 0x7f, 0x04, 0x4e, 0xf4, 0x69, 0x6f, 0x90, 0xac, 0x0c, 0x9e }, - // 69 - { 0x2f, 0x86, 0x5e, 0xd6, 0x08, 0xd4, 0x27, 0x18, 0xfb, 0x9f, 0xe6, 0x8e, 0xaa, 0x13, 0x68, 0x28, 0x3b, 0x62, 0x2c, 0x1a, 0xeb, 0x5b, 0x03, 0x78, 0x16, 0x7a, 0x87, 0xa1, 0xd0, 0x73, 0x3d, 0xf7 }, - // 70 - { 0x35, 0x3b, 0xe9, 0x81, 0xf8, 0xc7, 0x7a, 0x2a, 0x78, 0x91, 0xef, 0xad, 0x34, 0xf7, 0x93, 0x91, 0xd1, 0x96, 0x3b, 0xfb, 0xb0, 0x37, 0x56, 0x0f, 0x51, 0x0b, 0x74, 0xea, 0x7e, 0xc3, 0x12, 0xcd }, - // 71 - { 0x6f, 0x17, 0x2f, 0x10, 0x31, 0x9d, 0xa2, 0xeb, 0x79, 0xd9, 0x89, 0xc6, 0x16, 0x9a, 0x69, 0xfd, 0x24, 0xbd, 0xd0, 0x03, 0x25, 0x90, 0x8f, 0x16, 0x83, 0x0f, 0x2f, 0x25, 0x23, 0x2f, 0xcc, 0x0e }, - // 72 - { 0x17, 0x89, 0x4b, 0x34, 0x63, 0x88, 0x1a, 0xfa, 0x90, 0x85, 0x21, 0x74, 0xfe, 0x41, 0x1d, 0x3b, 0x10, 0xf6, 0xf1, 0x6a, 0x15, 0x3a, 0x85, 0x35, 0x0d, 0x94, 0xe7, 0xf8, 0xb9, 0x9d, 0xd0, 0xe6 }, - // 73 - { 0xfa, 0xe5, 0x95, 0x85, 0x72, 0x0a, 0x79, 0x83, 0x5b, 0x25, 0x52, 0x66, 0x47, 0xcb, 0x9c, 0x31, 0x5b, 0x62, 0xe8, 0x1d, 0x75, 0x62, 0xf9, 0xfd, 0xc8, 0x2a, 0x77, 0x92, 0xad, 0x35, 0x6d, 0x6c }, - // 74 - { 0x14, 0x39, 0x47, 0x13, 0x4d, 0x14, 0x01, 0x85, 0x39, 0xaf, 0xde, 0xf3, 0x3e, 0x51, 0xc4, 0x19, 0x6b, 0x29, 0x5f, 0xa7, 0xda, 0x46, 0x0a, 0x81, 0xa6, 0x31, 0xd8, 0x29, 0xdc, 0xd7, 0x86, 0xca }, - // 75 - { 0x4e, 0x99, 0xa0, 0x4b, 0x08, 0xaa, 0x14, 0x60, 0x2f, 0x39, 0xdf, 0x6c, 0x6f, 0x68, 0xa2, 0x95, 0xee, 0x5c, 0x84, 0x51, 0x7b, 0x06, 0x76, 0xdc, 0xda, 0xa7, 0x3e, 0x0b, 0x17, 0xaf, 0x34, 0x4d }, - // 76 - { 0xa7, 0x0e, 0x23, 0xb3, 0x00, 0x6d, 0x50, 0x2f, 0x0a, 0x3f, 0x4b, 0xcb, 0x93, 0x30, 0xc4, 0x9b, 0x7e, 0xb3, 0x05, 0x2a, 0xae, 0x31, 0x9d, 0xcf, 0xad, 0x92, 0x22, 0xa9, 0xd5, 0xc7, 0x94, 0xad }, - // 77 - { 0x4e, 0x45, 0x02, 0xfb, 0xf8, 0x95, 0x67, 0x23, 0x82, 0x58, 0x79, 0x52, 0x08, 0x2e, 0x5d, 0xb8, 0x8b, 0x17, 0x62, 0xc3, 0x9d, 0x18, 0xd0, 0xec, 0xfc, 0x46, 0x1d, 0xbb, 0x64, 0x13, 0xba, 0xfd }, - // 78 - { 0x74, 0xd5, 0x5f, 0x5f, 0xe6, 0xc5, 0x60, 0x7e, 0x74, 0xbb, 0x7e, 0xbb, 0xdc, 0x47, 0x94, 0xe6, 0x30, 0x31, 0x80, 0x55, 0x14, 0x6c, 0x2b, 0x71, 0xc7, 0x53, 0x4c, 0x5f, 0x76, 0x7e, 0x3f, 0x76 }, - // 79 - { 0xa0, 0x09, 0x98, 0xf4, 0x5e, 0xf1, 0x0e, 0xc8, 0x9f, 0x84, 0xa6, 0xbe, 0xfe, 0x15, 0xba, 0x5a, 0x2f, 0x40, 0x35, 0xcf, 0x13, 0x1f, 0x6c, 0xbb, 0xbb, 0xd2, 0xdb, 0x53, 0xf2, 0x95, 0x13, 0x9a }, - // 80 - { 0x24, 0x94, 0xf9, 0xfb, 0xd5, 0x6f, 0x25, 0x1d, 0x5b, 0xff, 0xf1, 0x07, 0xed, 0x9f, 0x37, 0x08, 0x60, 0xd9, 0x8d, 0x70, 0x7b, 0xfd, 0xab, 0x92, 0xfc, 0x15, 0x67, 0x3f, 0xd1, 0x4c, 0x0a, 0x94 }, - // 81 - { 0x94, 0xca, 0xc7, 0xbc, 0x48, 0x18, 0x29, 0xf8, 0x7d, 0x47, 0xd3, 0x01, 0x4b, 0x21, 0xce, 0xed, 0xbb, 0x58, 0x1d, 0x74, 0x68, 0x87, 0x94, 0xf6, 0x12, 0x93, 0x1a, 0x0d, 0xd9, 0xd5, 0x22, 0xc9 }, - // 82 - { 0xb4, 0x3e, 0xa1, 0xf6, 0xd7, 0x76, 0xaf, 0x3b, 0x84, 0xe3, 0x81, 0x6e, 0x29, 0x26, 0x44, 0xcf, 0x2b, 0xdd, 0x37, 0x0d, 0x21, 0x41, 0x27, 0x82, 0x98, 0x81, 0x55, 0x70, 0x1f, 0x35, 0x09, 0x98 }, - // 83 - { 0xa2, 0x20, 0xe3, 0xdd, 0xcb, 0xed, 0xec, 0xf3, 0xb5, 0xf0, 0xe7, 0x97, 0x85, 0x9e, 0x14, 0x21, 0xd1, 0xde, 0x9b, 0x51, 0xea, 0xb4, 0xd1, 0x5c, 0xbd, 0xd4, 0xd7, 0xe4, 0xe7, 0x18, 0xef, 0x5b }, - // 84 - { 0x67, 0xb9, 0xc9, 0x28, 0x22, 0x9a, 0x1c, 0x57, 0x29, 0x7e, 0x81, 0xcb, 0xb8, 0x7b, 0x0c, 0xe0, 0x1e, 0x2d, 0xe7, 0xa1, 0x86, 0x92, 0xc1, 0x94, 0x8d, 0x9f, 0x12, 0xed, 0xbe, 0x3e, 0xb2, 0xc5 }, - // 85 - { 0x45, 0xc6, 0xdf, 0xf3, 0xd2, 0x17, 0x5a, 0x48, 0xce, 0x25, 0x85, 0x7d, 0x29, 0x7e, 0x9c, 0xc0, 0x39, 0x8a, 0x23, 0xcb, 0x4b, 0x8e, 0x81, 0x15, 0x4b, 0x6a, 0x59, 0xcb, 0x62, 0x5c, 0x64, 0xa9 }, - // 86 - { 0xdb, 0x3c, 0x05, 0x9f, 0xef, 0x5f, 0x16, 0x61, 0x2f, 0x73, 0xfe, 0x9e, 0xe1, 0xb7, 0x49, 0x74, 0x9d, 0x93, 0xf5, 0x50, 0x9f, 0xd5, 0xc4, 0xfc, 0xbb, 0xc8, 0x8c, 0x1f, 0x74, 0x41, 0x9d, 0x79 }, - // 87 - { 0x76, 0xe3, 0xf9, 0x6a, 0x0d, 0x6d, 0x95, 0x79, 0xf6, 0xf8, 0x34, 0x6e, 0x55, 0xcd, 0x2d, 0x84, 0x26, 0xc8, 0xc4, 0xfb, 0x83, 0x1e, 0x3b, 0xd5, 0x51, 0x44, 0x11, 0x41, 0x36, 0xd4, 0x4c, 0x93 }, - // 88 - { 0x79, 0xfa, 0x5f, 0xf0, 0x47, 0x87, 0xda, 0xef, 0x23, 0x89, 0x46, 0x08, 0x90, 0xba, 0xfd, 0x2a, 0x62, 0x13, 0x36, 0xc6, 0xc8, 0x38, 0xd4, 0xc8, 0x7f, 0xdd, 0x91, 0x7a, 0x20, 0x32, 0x2c, 0x16 }, - // 89 - { 0xda, 0xfe, 0x80, 0x2f, 0x02, 0x95, 0x2d, 0xca, 0x70, 0x4a, 0x85, 0x51, 0x64, 0xfa, 0x7e, 0xfd, 0xb5, 0xcb, 0xce, 0x48, 0xe9, 0xe0, 0xb4, 0x53, 0xd0, 0xb0, 0x18, 0xc5, 0x5d, 0x3a, 0x3f, 0xe2 }, - // 90 - { 0x34, 0x48, 0xa3, 0x40, 0xba, 0x2a, 0x13, 0x57, 0xcc, 0xe2, 0xdf, 0x8d, 0xb0, 0x0f, 0x60, 0x1c, 0x70, 0x00, 0xaf, 0xc1, 0xb9, 0x99, 0xc9, 0xc5, 0xab, 0x23, 0xf2, 0x86, 0x24, 0xf6, 0xe7, 0xfe }, - // 91 - { 0x0e, 0x21, 0x66, 0xcc, 0x61, 0x82, 0x08, 0xf4, 0x70, 0x6c, 0x02, 0xcf, 0x73, 0x09, 0xab, 0x2f, 0xd5, 0x97, 0xbf, 0x42, 0x01, 0x91, 0xab, 0xb2, 0x67, 0x4d, 0xd5, 0xd3, 0xaf, 0xc9, 0x14, 0x30 }, - // 92 - { 0x77, 0x7e, 0xa2, 0xac, 0xc9, 0x7b, 0x5a, 0x08, 0xa5, 0x06, 0x69, 0x8f, 0xdd, 0xf2, 0xfb, 0x42, 0xda, 0x37, 0xd5, 0x03, 0x62, 0x1e, 0x5e, 0x90, 0xee, 0xf3, 0xed, 0x62, 0x7a, 0xb5, 0x2e, 0x50 }, - // 93 - { 0x4c, 0x2e, 0x2a, 0x25, 0xb7, 0x17, 0xcc, 0xfd, 0xda, 0xf1, 0xe6, 0x0e, 0xb1, 0x87, 0x45, 0x1b, 0xf7, 0x67, 0xe6, 0x7c, 0xe4, 0x6c, 0x59, 0xf0, 0x64, 0x98, 0x8b, 0xd4, 0xf7, 0x6d, 0x46, 0x6b }, - // 94 - { 0xda, 0x42, 0xbd, 0x90, 0xad, 0xb6, 0x5e, 0x14, 0x3d, 0x48, 0x09, 0x65, 0xdb, 0x72, 0x38, 0x46, 0x35, 0x06, 0xc6, 0xd1, 0x42, 0xf5, 0xca, 0xa3, 0x13, 0x6b, 0xad, 0x11, 0xb3, 0x6f, 0x5e, 0x9f }, - // 95 - { 0x45, 0xc6, 0xb8, 0x9a, 0x0e, 0x4b, 0x8a, 0xcb, 0x18, 0x69, 0x57, 0x43, 0x90, 0x30, 0x54, 0x54, 0x1d, 0x4f, 0xfe, 0x13, 0x31, 0x97, 0x94, 0x45, 0xf0, 0xff, 0xc8, 0xe9, 0x52, 0x2f, 0x25, 0x0c }, - // 96 - { 0x4c, 0x85, 0x95, 0xe0, 0x0b, 0x57, 0xa5, 0x9e, 0x57, 0xd8, 0x85, 0x15, 0xe8, 0xcf, 0xe5, 0x52, 0xab, 0x7d, 0xd7, 0xe8, 0x71, 0x9c, 0x1b, 0x71, 0x1b, 0x8f, 0xa3, 0x92, 0xcc, 0x36, 0x37, 0x90 }, - // 97 - { 0xc3, 0xdc, 0xdb, 0x87, 0xad, 0xee, 0xc1, 0x5b, 0xd1, 0x90, 0xa8, 0x8b, 0x21, 0xf6, 0x2f, 0xe5, 0x2e, 0xbf, 0x18, 0xed, 0xc0, 0x6e, 0x5a, 0xe9, 0xb6, 0x02, 0xf9, 0xbe, 0x56, 0x49, 0x20, 0x10 }, - // 98 - { 0xed, 0x58, 0xcb, 0x0a, 0x82, 0xc2, 0xb3, 0xf1, 0xc1, 0xff, 0xf0, 0x9a, 0x22, 0xa1, 0x2b, 0x74, 0x80, 0xe6, 0x1f, 0xac, 0x5a, 0xa3, 0x90, 0xeb, 0x33, 0xdd, 0x73, 0x63, 0x12, 0x9d, 0x09, 0xdc }, - // 99 - { 0xcf, 0x7d, 0xdb, 0x1b, 0x76, 0xe7, 0xa6, 0x27, 0xf9, 0x5e, 0x32, 0x59, 0x74, 0x16, 0x06, 0xb2, 0xfb, 0x9d, 0x88, 0x72, 0x0d, 0x6e, 0xf0, 0xe5, 0xe5, 0xad, 0xbf, 0x26, 0xe5, 0xde, 0x88, 0xc5 }, - // 100 - { 0x3e, 0xef, 0xd3, 0x0f, 0xc5, 0x20, 0xa2, 0xd0, 0xae, 0x28, 0xca, 0x37, 0x14, 0xfb, 0x5e, 0xfd, 0x62, 0xc2, 0xec, 0xea, 0x47, 0x59, 0xfb, 0x4c, 0x25, 0xbf, 0x28, 0x2b, 0xd4, 0x2f, 0x60, 0x65 }, - // 101 - { 0x88, 0x52, 0x26, 0x4d, 0x4d, 0x34, 0x95, 0xca, 0xd7, 0x83, 0x30, 0xb3, 0x4e, 0x4e, 0xfa, 0x1a, 0x5d, 0x28, 0x22, 0xb5, 0x8b, 0x45, 0x0f, 0x47, 0x50, 0xb8, 0x90, 0xbf, 0xe5, 0x83, 0xbe, 0x41 }, - // 102 - { 0x09, 0x6f, 0x8d, 0x55, 0x5d, 0x5e, 0x3a, 0x7f, 0x07, 0x3e, 0x96, 0xa1, 0x34, 0xb4, 0xc8, 0xde, 0x08, 0x71, 0x30, 0x03, 0x73, 0x5d, 0x11, 0x90, 0x74, 0x51, 0x06, 0x78, 0x44, 0x5d, 0xb9, 0x28 }, - // 103 - { 0x97, 0x27, 0xe4, 0x65, 0xc3, 0x47, 0x4f, 0xfa, 0x85, 0x02, 0x99, 0xf8, 0x18, 0x05, 0x8d, 0x96, 0xc4, 0xf5, 0xd0, 0x56, 0x5c, 0x4d, 0xf0, 0x66, 0xba, 0x60, 0x19, 0x78, 0x54, 0xa1, 0x7b, 0x96 }, - // 104 - { 0x58, 0x7b, 0x5b, 0x7c, 0xaa, 0x11, 0x68, 0xbd, 0xe4, 0x74, 0x0a, 0x2d, 0xec, 0x64, 0x20, 0xe3, 0x9e, 0xa7, 0x60, 0x5c, 0x02, 0xcd, 0x76, 0x68, 0xe4, 0x6a, 0x56, 0x92, 0xcb, 0x25, 0xfc, 0xbe }, - // 105 - { 0xda, 0x78, 0x04, 0x16, 0x5a, 0x91, 0x5e, 0x9e, 0xf5, 0x4b, 0xd6, 0x59, 0x32, 0xf5, 0xea, 0xba, 0xf9, 0x77, 0x5c, 0xe0, 0xa3, 0x3e, 0xf4, 0xaa, 0x12, 0xa5, 0xf4, 0xf3, 0x80, 0x2d, 0xac, 0x4a }, - // 106 - { 0x80, 0xda, 0x72, 0x59, 0x5b, 0x0b, 0xc0, 0x13, 0x62, 0x11, 0xab, 0x44, 0xf4, 0xa3, 0xeb, 0xff, 0xac, 0xf6, 0x9c, 0x5d, 0x75, 0xe2, 0x6c, 0xde, 0xf8, 0x6a, 0x06, 0xb5, 0x24, 0xf8, 0xec, 0xd8 }, - // 107 - { 0xa3, 0x2c, 0xf1, 0x24, 0xe0, 0x1a, 0x55, 0x97, 0x5c, 0x95, 0x30, 0x6c, 0xdd, 0x5a, 0xf6, 0x44, 0x16, 0x50, 0x9a, 0x14, 0x18, 0xba, 0x27, 0x95, 0x9c, 0xdb, 0x5a, 0xd5, 0xb7, 0xf7, 0x51, 0x3d }, - // 108 - { 0x5b, 0x69, 0xf8, 0x14, 0xb7, 0xe6, 0x4a, 0xf1, 0xaf, 0x79, 0xa8, 0xe5, 0x1a, 0x4f, 0x0f, 0x72, 0x90, 0x0a, 0xb2, 0x60, 0xa2, 0xaf, 0xda, 0x69, 0xa9, 0x98, 0x32, 0x61, 0x38, 0xce, 0xb0, 0x23 }, - // 109 - { 0xf5, 0x30, 0x48, 0x01, 0x51, 0x4f, 0x7b, 0x60, 0x7e, 0x9d, 0x91, 0x60, 0x88, 0x84, 0xb0, 0x48, 0x31, 0x7e, 0x37, 0xe0, 0x5b, 0xe9, 0xde, 0x01, 0x17, 0x91, 0x50, 0x65, 0x66, 0x72, 0xb4, 0x6d }, - // 110 - { 0xc8, 0x0f, 0x51, 0x38, 0xc2, 0x1c, 0x99, 0x45, 0x96, 0xf9, 0x60, 0xa8, 0x25, 0x67, 0x2a, 0x69, 0x20, 0x75, 0x1f, 0x85, 0xb8, 0xd5, 0xd5, 0x4b, 0x74, 0x4c, 0x07, 0x0a, 0x16, 0x16, 0xb8, 0xf4 }, - // 111 - { 0xb4, 0xd1, 0x09, 0x9d, 0xcc, 0x5b, 0x62, 0x96, 0xad, 0x9e, 0x20, 0x34, 0x6c, 0x25, 0x78, 0xaf, 0x80, 0x70, 0xb3, 0x90, 0x1d, 0xda, 0x78, 0x4c, 0x9d, 0xf7, 0xdb, 0xb7, 0xe6, 0xcb, 0x15, 0x64 }, - // 112 - { 0x00, 0xc8, 0x89, 0x72, 0xb7, 0x30, 0xf5, 0xdd, 0xaf, 0x3a, 0x78, 0x0e, 0x9d, 0x57, 0x8a, 0xf1, 0x0a, 0xcc, 0x14, 0x48, 0xc8, 0xb2, 0x59, 0x84, 0x8a, 0xf9, 0x37, 0xa2, 0x08, 0x4a, 0x53, 0x27 }, - // 113 - { 0xc8, 0x04, 0x8c, 0xaf, 0x2b, 0xa6, 0x01, 0x91, 0x9e, 0xe4, 0x42, 0x01, 0x87, 0x0b, 0xbf, 0xec, 0x2b, 0x18, 0xfa, 0xf3, 0xb4, 0x03, 0x73, 0x29, 0x96, 0x82, 0xcf, 0xae, 0xf6, 0x90, 0xee, 0x9e }, - // 114 - { 0x44, 0x2d, 0xc9, 0x0e, 0x4e, 0xe3, 0x68, 0x07, 0x95, 0x1e, 0x4e, 0x5e, 0x66, 0x80, 0xab, 0x35, 0x43, 0x54, 0x53, 0x33, 0x0a, 0x04, 0xdc, 0x22, 0x3c, 0xbb, 0x03, 0x6c, 0x13, 0x27, 0x68, 0xd7 }, - // 115 - { 0x68, 0xdd, 0x32, 0xa3, 0x6a, 0xb1, 0x95, 0x91, 0x52, 0xb0, 0xb1, 0x90, 0x78, 0xca, 0x5d, 0x63, 0x7d, 0x4d, 0xe9, 0xa0, 0xa9, 0x7f, 0x2c, 0xeb, 0x9c, 0x05, 0xcd, 0xa0, 0xe3, 0xe5, 0xd5, 0x7f }, - // 116 - { 0x9c, 0xd4, 0xf4, 0x15, 0x01, 0xdc, 0x7a, 0xe4, 0x26, 0x13, 0x39, 0xa9, 0x72, 0x83, 0x5a, 0x80, 0xa4, 0x08, 0xf1, 0x60, 0x5c, 0x77, 0x70, 0xba, 0xfe, 0x04, 0xc5, 0xdf, 0x13, 0x92, 0x27, 0x3d }, - // 117 - { 0x62, 0x82, 0xbf, 0xb6, 0x95, 0x87, 0xeb, 0xde, 0x24, 0x7e, 0x10, 0x58, 0x27, 0x74, 0xea, 0x30, 0x23, 0x8b, 0x2f, 0xd5, 0x85, 0x44, 0xa0, 0xb3, 0xf4, 0xac, 0x86, 0x18, 0x03, 0x8f, 0x8b, 0x5f }, - // 118 - { 0xbb, 0x34, 0x47, 0x38, 0x29, 0x24, 0x46, 0xe2, 0xba, 0x2f, 0x62, 0x03, 0x13, 0x29, 0xc3, 0xec, 0xce, 0x3b, 0xc6, 0x08, 0xca, 0xeb, 0xc8, 0xac, 0x13, 0x64, 0x1f, 0xe7, 0x02, 0x25, 0x33, 0x58 }, - // 119 - { 0x2e, 0xd0, 0x98, 0xff, 0x9e, 0xd5, 0x34, 0x8e, 0xeb, 0xbb, 0x17, 0x33, 0xd5, 0x0a, 0x0e, 0xeb, 0x32, 0x77, 0xa3, 0x0a, 0xce, 0x12, 0x00, 0x6e, 0x94, 0x7b, 0x40, 0x58, 0xb1, 0x7b, 0x73, 0x4f }, - // 120 - { 0xc9, 0x5a, 0xe5, 0xdd, 0x38, 0x1c, 0xa8, 0x6b, 0xec, 0xb3, 0x87, 0x8a, 0xbf, 0xfc, 0xec, 0x4c, 0xfc, 0xd9, 0xf3, 0xa9, 0xed, 0xb5, 0x23, 0xba, 0xfc, 0xea, 0xd7, 0xb6, 0xcc, 0x9f, 0xc2, 0xcf }, - // 121 - { 0xa9, 0xf8, 0xe1, 0x65, 0xc1, 0xd0, 0x63, 0x90, 0x8b, 0x9f, 0xe4, 0xae, 0x37, 0x45, 0x0c, 0xba, 0x5f, 0x3c, 0x82, 0x61, 0x61, 0x80, 0x52, 0x93, 0x78, 0x66, 0xbf, 0x7e, 0x0e, 0xda, 0x55, 0xed }, - // 122 - { 0x1a, 0x55, 0x54, 0x55, 0x4e, 0x31, 0x4c, 0x95, 0x36, 0xec, 0x11, 0x2c, 0xb4, 0xd2, 0x66, 0x78, 0xe7, 0x4a, 0xdd, 0xd0, 0xbf, 0x91, 0xe1, 0x3b, 0xba, 0x8d, 0x92, 0x90, 0x8c, 0x62, 0x16, 0x1c }, - // 123 - { 0xe8, 0x36, 0xfb, 0x83, 0xd4, 0x80, 0x83, 0xd5, 0xc1, 0x3f, 0x13, 0x2b, 0x03, 0x37, 0x12, 0x4e, 0x83, 0x9f, 0xf1, 0xfd, 0x38, 0xde, 0xc0, 0x9d, 0xce, 0x2f, 0xba, 0xdc, 0x52, 0x93, 0x9b, 0x35 }, - // 124 - { 0x04, 0x68, 0xed, 0x5f, 0xe3, 0x58, 0x17, 0x35, 0x77, 0x4a, 0x96, 0x2c, 0x27, 0xc2, 0x26, 0x7f, 0xb8, 0xee, 0x59, 0xa9, 0x5d, 0x00, 0xc0, 0x8c, 0x92, 0x4b, 0x52, 0xa4, 0xc7, 0x68, 0x80, 0x50 }, - // 125 - { 0x03, 0xc9, 0xfc, 0xce, 0x9c, 0x7c, 0x07, 0x6a, 0x84, 0xfd, 0xeb, 0x51, 0x3c, 0x02, 0xf4, 0x88, 0x13, 0xeb, 0x06, 0x6e, 0x08, 0xc6, 0x0f, 0x8f, 0xca, 0xf6, 0x2f, 0x38, 0xfb, 0xf3, 0x92, 0x68 }, - // 126 - { 0xf8, 0x47, 0xa7, 0x26, 0x89, 0x06, 0xd8, 0x6b, 0x4d, 0xbb, 0x29, 0xfb, 0xcd, 0x2e, 0x30, 0x1a, 0xbb, 0xf1, 0x38, 0x3e, 0x54, 0xbd, 0xf6, 0x04, 0x82, 0x77, 0x9f, 0x0e, 0xec, 0x93, 0xae, 0x01 }, - // 127 - { 0xa6, 0xd5, 0x1c, 0x7e, 0xd9, 0x58, 0x2c, 0xfe, 0x77, 0x5d, 0x7f, 0x24, 0x2a, 0x7b, 0x47, 0x09, 0x07, 0x12, 0xd6, 0x83, 0x08, 0xa2, 0x5d, 0x1e, 0xda, 0x51, 0xa2, 0x30, 0x41, 0xce, 0x33, 0x30 }, - // 128 - { 0x78, 0x01, 0x38, 0xa5, 0xbd, 0x9e, 0xd6, 0x7e, 0x12, 0x46, 0x4b, 0x52, 0xa7, 0xfb, 0xea, 0xe5, 0xf0, 0xcc, 0xce, 0xba, 0x83, 0xcb, 0xb9, 0xb0, 0xc0, 0xcf, 0x28, 0xba, 0x1b, 0xde, 0x47, 0x43 }, - // 129 - { 0xe1, 0x1a, 0x06, 0x8e, 0x7b, 0x9d, 0xd1, 0xa1, 0xb7, 0xea, 0x91, 0x12, 0xf8, 0x90, 0x89, 0x23, 0x50, 0xec, 0xe6, 0xd9, 0xbe, 0x35, 0xfe, 0x30, 0x5e, 0x74, 0x00, 0x1a, 0x19, 0xd1, 0xa4, 0x81 }, - // 130 - { 0xb5, 0x98, 0x40, 0x7d, 0x03, 0xb1, 0x23, 0x47, 0x44, 0x86, 0x06, 0x16, 0xb1, 0xbe, 0xa4, 0x9b, 0x89, 0x11, 0xb3, 0x5c, 0x16, 0xac, 0x69, 0x17, 0x39, 0x35, 0xca, 0x8a, 0xda, 0x26, 0x90, 0x88 }, - // 131 - { 0xf4, 0x9c, 0x65, 0x98, 0xc9, 0xbc, 0x44, 0xd5, 0xd3, 0xb5, 0x18, 0x4d, 0xeb, 0x99, 0xfd, 0xee, 0x0e, 0x86, 0x78, 0x2d, 0x80, 0x0b, 0x4e, 0x69, 0x05, 0x71, 0x4c, 0x51, 0x15, 0x24, 0x26, 0xec }, - // 132 - { 0x0c, 0xcf, 0xcf, 0x4a, 0x6b, 0xe2, 0x03, 0x1b, 0xf6, 0x04, 0xd4, 0x92, 0x95, 0x20, 0xd6, 0xf7, 0x51, 0xc6, 0x44, 0x4c, 0x05, 0xdd, 0x2b, 0x68, 0x9e, 0x66, 0x01, 0x47, 0xed, 0xc4, 0xa7, 0x0d }, - // 133 - { 0x8b, 0x91, 0xbc, 0x5f, 0xae, 0xc9, 0x02, 0x81, 0xde, 0x18, 0x54, 0xcb, 0x58, 0x86, 0xdd, 0x30, 0x72, 0x15, 0x97, 0xac, 0x38, 0x91, 0x0e, 0xec, 0x1d, 0x20, 0x49, 0x41, 0xb2, 0x7e, 0xa7, 0xef }, - // 134 - { 0x5d, 0xff, 0xb0, 0xdf, 0x96, 0xc5, 0x3e, 0xd1, 0xb9, 0x40, 0x04, 0xe2, 0xa6, 0xb5, 0x4f, 0x09, 0x00, 0x9b, 0xa2, 0x93, 0x03, 0xa7, 0xe8, 0x36, 0x72, 0x2c, 0xc9, 0x74, 0x70, 0x2b, 0xc0, 0xed }, - // 135 - { 0xc5, 0x57, 0x03, 0xe3, 0xf4, 0xc2, 0xef, 0x3b, 0xfe, 0x97, 0x85, 0xe1, 0x47, 0xe1, 0x13, 0x98, 0x3b, 0x25, 0x15, 0x1b, 0x97, 0x86, 0x9a, 0x0f, 0xd5, 0x52, 0xfa, 0xb9, 0x90, 0x5d, 0x1d, 0x46 }, - // 136 - { 0xb2, 0x36, 0x80, 0x94, 0xb0, 0xf2, 0x20, 0xff, 0x7d, 0xd4, 0x4d, 0xf3, 0xd1, 0x50, 0x03, 0xcf, 0x36, 0x79, 0xb1, 0x73, 0x43, 0xeb, 0x7f, 0x0e, 0x21, 0x6c, 0x55, 0xc9, 0x26, 0xbe, 0x91, 0x6f }, - // 137 - { 0x5d, 0x54, 0x4b, 0x39, 0xc5, 0xfe, 0x1f, 0x38, 0xcd, 0xac, 0xc8, 0xaf, 0xc8, 0x25, 0x23, 0x35, 0x71, 0x58, 0x04, 0x72, 0x86, 0xcf, 0xeb, 0xca, 0x2a, 0x77, 0xac, 0x8f, 0x1f, 0xf7, 0x86, 0x9c }, - // 138 - { 0xf3, 0x03, 0x24, 0x9d, 0xfc, 0xdd, 0x40, 0x55, 0xa8, 0x77, 0x22, 0xbe, 0x63, 0xda, 0x44, 0x6e, 0xff, 0x0d, 0x1e, 0xa3, 0x7e, 0x6f, 0xbe, 0x68, 0x84, 0x0b, 0xc0, 0x67, 0x4e, 0x80, 0x3b, 0xf2 }, - // 139 - { 0x3f, 0xf7, 0xa7, 0xb0, 0x41, 0x2f, 0xa6, 0xee, 0x33, 0xd0, 0x64, 0x27, 0xf7, 0x7d, 0xb2, 0xd1, 0xf7, 0x60, 0xb6, 0xe8, 0xe7, 0x73, 0x88, 0x64, 0xa5, 0x52, 0x04, 0xfc, 0xd4, 0x19, 0x71, 0x22 }, - // 140 - { 0x30, 0x08, 0x27, 0x60, 0xae, 0x65, 0x90, 0x74, 0xb6, 0x42, 0x40, 0xf4, 0xcb, 0x75, 0x33, 0xf3, 0x9d, 0x62, 0x79, 0x81, 0x09, 0xfd, 0xcf, 0xdd, 0x0d, 0xe5, 0xbc, 0xdd, 0x42, 0x8d, 0xc7, 0xf6 }, - // 141 - { 0xa3, 0x4b, 0xb2, 0x62, 0x84, 0x36, 0x51, 0xb2, 0x9d, 0xe0, 0xff, 0xd3, 0x96, 0xb7, 0x81, 0x52, 0x00, 0x28, 0x5c, 0x91, 0x40, 0x48, 0x69, 0xf5, 0x5f, 0x89, 0x8c, 0xe2, 0x91, 0x23, 0xf3, 0xf9 }, - // 142 - { 0x15, 0x23, 0x64, 0x72, 0x47, 0xaa, 0x95, 0x48, 0x54, 0xc6, 0x93, 0x84, 0x96, 0xa8, 0x97, 0x6f, 0x2a, 0xe7, 0x0b, 0x70, 0xc6, 0x33, 0x77, 0x6a, 0x07, 0x51, 0x23, 0x24, 0x4d, 0x01, 0x53, 0xff }, - // 143 - { 0x54, 0x63, 0x03, 0x6b, 0x1a, 0xd8, 0x85, 0x19, 0x72, 0x2e, 0x63, 0x65, 0x98, 0x4e, 0x30, 0xa3, 0xb7, 0x58, 0xfe, 0x18, 0x98, 0x08, 0xd6, 0x7b, 0xed, 0xd8, 0xc4, 0xc4, 0xc9, 0x8f, 0x23, 0x7a }, - // 144 - { 0x60, 0x09, 0x8e, 0xd2, 0xa3, 0x10, 0x8a, 0xcd, 0x5b, 0xaa, 0x0e, 0x91, 0xb3, 0x18, 0xea, 0x08, 0x0f, 0x28, 0x26, 0x2f, 0xce, 0xfb, 0x5a, 0x36, 0x3f, 0x00, 0xe0, 0x23, 0xb2, 0xc9, 0x6e, 0x95 }, - // 145 - { 0x3e, 0x71, 0xfc, 0xbf, 0x19, 0xd9, 0xab, 0x2a, 0x6a, 0xf9, 0xe4, 0xcc, 0xdb, 0x1c, 0x5f, 0xdd, 0xe5, 0x19, 0x2d, 0x6a, 0xc9, 0xd1, 0x5e, 0x2d, 0x62, 0xad, 0x98, 0xca, 0x8c, 0x29, 0x13, 0x10 }, - // 146 - { 0x7f, 0x0a, 0x34, 0xda, 0xe7, 0x17, 0xcb, 0x8a, 0xb1, 0x69, 0xb9, 0xf0, 0x7e, 0xea, 0x05, 0x2a, 0x4a, 0x78, 0xe6, 0xc2, 0x60, 0x4d, 0x8b, 0x8d, 0xaf, 0x88, 0x9a, 0x5d, 0x64, 0x42, 0x8a, 0x1d }, - // 147 - { 0x16, 0xaa, 0xa8, 0x4d, 0x80, 0xe0, 0x5e, 0x60, 0xec, 0x08, 0x6d, 0x39, 0x8e, 0xb8, 0x5c, 0x24, 0x55, 0x4c, 0xac, 0x8d, 0x18, 0x6a, 0x5d, 0xcc, 0x98, 0xef, 0xe6, 0x77, 0x2f, 0xc7, 0x3a, 0x7a }, - // 148 - { 0x46, 0x6c, 0xfc, 0x50, 0x85, 0x6b, 0xbd, 0xd8, 0xb8, 0x65, 0xec, 0xd0, 0xcc, 0x49, 0x3e, 0x97, 0x5c, 0xd6, 0x39, 0x74, 0x6a, 0xe3, 0x14, 0x87, 0x8e, 0x84, 0x31, 0xa0, 0x72, 0x27, 0x67, 0x5a }, - // 149 - { 0xfa, 0x14, 0xaf, 0x2f, 0xc8, 0x74, 0xea, 0x85, 0xe7, 0x54, 0xee, 0x0d, 0xb0, 0x59, 0x0c, 0x61, 0xc2, 0xa5, 0x1a, 0xe0, 0x9f, 0xde, 0x55, 0xa9, 0x9b, 0xe4, 0x1a, 0x88, 0x3b, 0x18, 0x6d, 0x68 }, - // 150 - { 0xfb, 0xa2, 0x63, 0x2a, 0xe8, 0x5d, 0xf4, 0xf0, 0xa3, 0x7e, 0xb0, 0x5c, 0xeb, 0xf0, 0x20, 0xad, 0x9d, 0x8e, 0x17, 0x2b, 0x4d, 0x01, 0xaf, 0xea, 0xaf, 0xc6, 0xcc, 0x65, 0x42, 0x25, 0xef, 0x2f }, - // 151 - { 0x05, 0xb9, 0x29, 0x91, 0xd4, 0x95, 0xb0, 0xea, 0x99, 0xf0, 0x29, 0xa2, 0xc6, 0xbf, 0x2a, 0x2a, 0x38, 0x47, 0x79, 0xd5, 0x10, 0xf3, 0x4a, 0xd8, 0x32, 0x15, 0x32, 0x04, 0x1e, 0xef, 0x49, 0x01 }, - // 152 - { 0xf9, 0x5f, 0x06, 0xe3, 0x92, 0x6f, 0xb6, 0x52, 0x35, 0xf2, 0xdf, 0xbc, 0x2d, 0x7b, 0x2c, 0xae, 0x37, 0x4c, 0x33, 0x00, 0x7a, 0xf3, 0xa6, 0xf3, 0x0a, 0xd9, 0xb9, 0x59, 0xf6, 0x0b, 0xa5, 0x9c }, - // 153 - { 0x41, 0xe5, 0xcc, 0x0f, 0x82, 0x70, 0x2f, 0xa8, 0xc0, 0x72, 0xb7, 0xf5, 0xfe, 0x45, 0xa1, 0x7b, 0xae, 0x17, 0x63, 0x12, 0xee, 0x83, 0x1d, 0xbe, 0x24, 0x69, 0xa2, 0x3e, 0x16, 0xa2, 0x2d, 0xe0 }, - // 154 - { 0xfe, 0xc5, 0x29, 0x21, 0x63, 0x7b, 0x16, 0x81, 0xb9, 0x09, 0x5d, 0x0e, 0xa5, 0xa7, 0x51, 0x9b, 0x11, 0xf8, 0x71, 0x81, 0xb5, 0x9e, 0x0c, 0x03, 0xa0, 0xd1, 0x98, 0x0a, 0x97, 0xb7, 0x1e, 0xef }, - // 155 - { 0x1f, 0xcb, 0x5c, 0xbd, 0x45, 0xc1, 0xd7, 0xea, 0x77, 0x5d, 0x0d, 0xf9, 0x3d, 0x2d, 0xf2, 0xe8, 0x43, 0x35, 0x56, 0x3c, 0x9a, 0x5c, 0x42, 0x17, 0x2f, 0x17, 0x89, 0xde, 0x02, 0x53, 0x2e, 0xb9 }, - // 156 - { 0xdb, 0x14, 0x4d, 0xd9, 0x9b, 0xdb, 0x52, 0x3b, 0xcc, 0xf0, 0x3e, 0x19, 0xb0, 0x8b, 0x3c, 0x18, 0xa1, 0xe7, 0x5f, 0x44, 0x45, 0xda, 0x7b, 0xeb, 0x19, 0xde, 0x29, 0xaa, 0x78, 0xa8, 0x40, 0xcb }, - // 157 - { 0x94, 0x57, 0x65, 0x8b, 0x6d, 0xaf, 0x3f, 0x0c, 0xf8, 0x31, 0x66, 0x0f, 0xfb, 0x49, 0x85, 0x13, 0xa7, 0x70, 0x61, 0x80, 0x6a, 0xfe, 0x18, 0x7e, 0x59, 0xdf, 0x9d, 0x0c, 0x46, 0xc6, 0x73, 0xcd }, - // 158 - { 0xa0, 0xc2, 0x22, 0x51, 0x09, 0x52, 0xaa, 0x1d, 0x5c, 0x2e, 0x05, 0xb9, 0x8c, 0x24, 0xa9, 0x40, 0x4f, 0x57, 0xc7, 0xf5, 0xab, 0x24, 0xbd, 0x50, 0xf9, 0x2d, 0x1b, 0xd8, 0x7b, 0x47, 0x7e, 0xf6 }, - // 159 - { 0x6d, 0xd0, 0xba, 0xde, 0x12, 0x9a, 0x01, 0x01, 0xb5, 0x7f, 0x11, 0xa3, 0x9e, 0x59, 0x29, 0x96, 0x4e, 0xd8, 0x64, 0x15, 0x86, 0xbb, 0x81, 0xfb, 0x8c, 0x37, 0x63, 0x8c, 0x6f, 0x0d, 0x94, 0x0c }, - // 160 - { 0x27, 0x52, 0x31, 0x20, 0x50, 0x27, 0x8d, 0xdd, 0x74, 0xe8, 0x6c, 0x7d, 0xf7, 0x0e, 0xd1, 0x12, 0x3d, 0x89, 0x9f, 0x2d, 0x2e, 0xbe, 0x03, 0x45, 0x20, 0x10, 0xc4, 0x45, 0x90, 0xf9, 0xc9, 0x60 }, - // 161 - { 0xbf, 0x7e, 0xc7, 0xdf, 0xf4, 0xa6, 0x6e, 0x96, 0xf4, 0x55, 0xb7, 0x08, 0x2a, 0x41, 0xfb, 0x58, 0xae, 0x29, 0xa9, 0x06, 0x99, 0xdf, 0x02, 0x8e, 0x2a, 0x4f, 0x36, 0xb5, 0xeb, 0x9a, 0xa4, 0xbf }, - // 162 - { 0xc8, 0xad, 0x0c, 0xa3, 0xf5, 0x9a, 0x57, 0x32, 0xf7, 0xad, 0x4f, 0xd4, 0xdf, 0x4e, 0xec, 0x58, 0xdb, 0xc2, 0x8c, 0x14, 0x79, 0x3a, 0xb3, 0x08, 0xce, 0x3b, 0xaf, 0x01, 0xdf, 0x9f, 0xe4, 0x21 }, - // 163 - { 0xe7, 0xa2, 0x92, 0x35, 0xb6, 0x86, 0xe9, 0x34, 0x82, 0x7d, 0x54, 0xbe, 0x48, 0xc8, 0x40, 0xfb, 0x33, 0xff, 0x58, 0x3c, 0x8b, 0x6a, 0xcd, 0x68, 0xc7, 0x46, 0x56, 0xdb, 0xad, 0xfb, 0x9a, 0x9f }, - // 164 - { 0x21, 0x1d, 0xbe, 0x8a, 0x12, 0xe3, 0x93, 0x19, 0x7d, 0x25, 0x75, 0x7b, 0x44, 0x45, 0x94, 0x56, 0xf6, 0x3e, 0xfc, 0x4c, 0x82, 0xf5, 0x7e, 0x1f, 0x66, 0x9d, 0x28, 0x3c, 0x78, 0x12, 0x41, 0x80 }, - // 165 - { 0x50, 0x54, 0x8b, 0x91, 0x59, 0xf9, 0x98, 0x2a, 0x9c, 0x8b, 0x50, 0x64, 0x1e, 0x58, 0x03, 0x45, 0x14, 0x0f, 0x7c, 0xa6, 0xbb, 0x37, 0x91, 0x75, 0x03, 0x90, 0xb7, 0x7f, 0x40, 0x49, 0x3a, 0x15 }, - // 166 - { 0x65, 0xda, 0x83, 0x93, 0xa1, 0xb7, 0x58, 0x1c, 0xc5, 0x98, 0x76, 0x50, 0x2f, 0x55, 0x96, 0x90, 0xbc, 0x90, 0xc8, 0x6c, 0x0c, 0x7d, 0xd9, 0xaa, 0xdb, 0xa0, 0xb0, 0xd3, 0xe4, 0x3d, 0x31, 0xc7 }, - // 167 - { 0xf2, 0x80, 0xad, 0x5c, 0xac, 0x65, 0x52, 0x7d, 0xef, 0xee, 0x90, 0xe4, 0xe9, 0xe5, 0x48, 0x83, 0x37, 0x58, 0xe1, 0x6e, 0xa3, 0x79, 0x2a, 0x31, 0x09, 0x79, 0x80, 0xeb, 0xbf, 0x2d, 0xce, 0xfa }, - // 168 - { 0x19, 0xe4, 0x21, 0x35, 0x0f, 0x81, 0xc1, 0xba, 0x14, 0xd2, 0xd3, 0x6b, 0xe8, 0x31, 0x8c, 0x74, 0xde, 0x61, 0xe6, 0x25, 0x9b, 0xa5, 0x8e, 0x9a, 0x3f, 0xf2, 0xed, 0xc9, 0x27, 0xe5, 0xbb, 0xfc }, - // 169 - { 0x16, 0x5a, 0x59, 0x15, 0x6e, 0x5e, 0xa1, 0xc9, 0xe5, 0x5a, 0x95, 0xc0, 0x8c, 0x7c, 0x2f, 0x54, 0xcd, 0x2b, 0xc5, 0x3d, 0x32, 0xbe, 0x9d, 0x51, 0x07, 0x8c, 0x8d, 0x6e, 0xcd, 0x73, 0x39, 0x96 }, - // 170 - { 0x4f, 0x55, 0x4e, 0xed, 0xfa, 0x74, 0x27, 0x0f, 0xd3, 0xd9, 0xe7, 0xaa, 0xc5, 0xa6, 0x47, 0xc5, 0x97, 0xd2, 0x63, 0x63, 0x80, 0xf3, 0x40, 0xa1, 0x0d, 0xd1, 0x18, 0xfa, 0x40, 0x3b, 0xdc, 0x92 }, - // 171 - { 0xb0, 0xd6, 0x7f, 0x9a, 0x90, 0xc4, 0x77, 0xf5, 0x0c, 0xbc, 0x78, 0x9a, 0x11, 0x94, 0x9e, 0xdf, 0x29, 0x50, 0x86, 0x1a, 0xaa, 0x7e, 0x01, 0xcd, 0xc0, 0x85, 0xba, 0x8d, 0x22, 0xf0, 0x00, 0xbb }, - // 172 - { 0x67, 0x4b, 0x05, 0x21, 0xd5, 0x63, 0x37, 0xee, 0x8b, 0x69, 0xba, 0x1f, 0xb8, 0xa1, 0xe3, 0x6e, 0x47, 0xf0, 0x2d, 0x4d, 0x58, 0x54, 0xaa, 0x4d, 0xf8, 0x7f, 0xf3, 0xec, 0x45, 0x38, 0x87, 0x72 }, - // 173 - { 0xde, 0x81, 0x0a, 0xea, 0xf7, 0xa6, 0x63, 0x93, 0x54, 0x31, 0xb8, 0x1f, 0x57, 0x6a, 0x74, 0x6a, 0xb3, 0xbc, 0x49, 0xd0, 0x22, 0x53, 0xe0, 0x8d, 0x8d, 0x36, 0x2e, 0x40, 0x4e, 0x1f, 0x42, 0xbe }, - // 174 - { 0xdc, 0xb0, 0x28, 0x4e, 0x8c, 0xc6, 0xf1, 0x59, 0x41, 0xff, 0xc3, 0x6d, 0xf7, 0x7d, 0x1e, 0xfa, 0x90, 0xea, 0x8f, 0x8a, 0x6c, 0x5a, 0x37, 0x9e, 0xe6, 0x87, 0x65, 0x36, 0x1a, 0x9a, 0xb4, 0xbe }, - // 175 - { 0x40, 0xf8, 0xbe, 0x21, 0x39, 0xf0, 0xaf, 0xf0, 0x57, 0x1f, 0x68, 0x09, 0xfb, 0x48, 0x1b, 0xf3, 0x2e, 0x5f, 0x03, 0x8f, 0xc5, 0x4c, 0x82, 0x2b, 0x4b, 0x21, 0x29, 0x32, 0xab, 0xbd, 0x6e, 0xc5 }, - // 176 - { 0xf0, 0xed, 0xa1, 0xc5, 0xce, 0xd8, 0x11, 0xaf, 0x5a, 0x0d, 0x84, 0xec, 0x62, 0xb3, 0xb5, 0xa8, 0x6d, 0xb0, 0xaa, 0x94, 0x2f, 0x17, 0x58, 0xd8, 0xe4, 0x87, 0x6b, 0x1c, 0x38, 0xf0, 0x2e, 0x9a }, - // 177 - { 0xf5, 0xc5, 0xc5, 0x22, 0xd1, 0x4a, 0x4c, 0xee, 0xa3, 0xa2, 0x76, 0x4a, 0x88, 0x3e, 0xdb, 0x75, 0xf8, 0x9b, 0x2c, 0xe8, 0xb6, 0xf4, 0xd9, 0x71, 0x95, 0x1d, 0xd2, 0xae, 0x9d, 0x5a, 0x4d, 0x6f }, - // 178 - { 0x0a, 0x73, 0xc7, 0x11, 0x0a, 0x6d, 0xa1, 0x0e, 0x38, 0x70, 0xe5, 0x17, 0x3c, 0x9b, 0x62, 0xe3, 0x49, 0xcf, 0x36, 0xc4, 0xf6, 0x83, 0x3b, 0xab, 0x56, 0xb4, 0xb4, 0x06, 0x49, 0x59, 0x27, 0x85 }, - // 179 - { 0x8c, 0x27, 0xeb, 0xbb, 0xee, 0x4b, 0x48, 0x17, 0x98, 0x5c, 0x0c, 0xd1, 0xf8, 0xc3, 0xaf, 0x72, 0x9a, 0xd0, 0x4d, 0x0e, 0xea, 0xa3, 0x0b, 0xb0, 0x53, 0x3c, 0x5e, 0x41, 0x96, 0x86, 0xde, 0x17 }, - // 180 - { 0x19, 0x4a, 0x23, 0x38, 0x93, 0x23, 0x86, 0x43, 0x5e, 0x45, 0x77, 0x35, 0x0b, 0x1e, 0x8b, 0x7f, 0xe5, 0xfb, 0x4a, 0xa4, 0x2c, 0xf0, 0x59, 0x75, 0x7e, 0x81, 0xd4, 0x90, 0xc7, 0x93, 0x73, 0xbc }, - // 181 - { 0x95, 0xa6, 0xb2, 0x20, 0x6e, 0xa8, 0x75, 0xbd, 0xd5, 0x7c, 0xe0, 0xa6, 0xae, 0x0a, 0x7b, 0x77, 0x24, 0xef, 0xe2, 0x63, 0x5b, 0xdb, 0x21, 0xa3, 0xdf, 0xca, 0x0f, 0xde, 0x23, 0x9c, 0x46, 0x9b }, - // 182 - { 0xbf, 0x80, 0x60, 0xc7, 0x1a, 0xaa, 0xd7, 0x74, 0xd3, 0x56, 0xd5, 0x0f, 0x48, 0x9a, 0x51, 0x84, 0xd3, 0xd2, 0xf7, 0x45, 0x10, 0x53, 0x40, 0xd3, 0x86, 0xe0, 0x9a, 0x25, 0xcf, 0x59, 0xb8, 0xf3 }, - // 183 - { 0x67, 0xbe, 0xcd, 0x70, 0x10, 0x9e, 0x2b, 0x70, 0xee, 0xfd, 0x86, 0xdf, 0x9a, 0x30, 0x72, 0xfd, 0xaa, 0x9b, 0x30, 0xd6, 0x02, 0x7c, 0xdd, 0x84, 0x6f, 0x44, 0x63, 0x28, 0x63, 0xb1, 0xbb, 0x02 }, - // 184 - { 0x07, 0x4a, 0x1b, 0xb9, 0xf3, 0x09, 0x02, 0xeb, 0x65, 0xed, 0xa7, 0x06, 0x62, 0x85, 0x38, 0x1f, 0x92, 0x95, 0x27, 0x3a, 0x17, 0xbc, 0xab, 0xb0, 0x57, 0x8c, 0xc4, 0xca, 0x40, 0x4c, 0xc8, 0x5e }, - // 185 - { 0x0c, 0x52, 0x02, 0x72, 0xc2, 0x5c, 0xa8, 0x70, 0xac, 0x1e, 0x96, 0xe8, 0xc8, 0x0c, 0x2b, 0xc8, 0xa9, 0x59, 0x35, 0x8c, 0xad, 0x72, 0x38, 0xc6, 0xf0, 0xf1, 0x48, 0x92, 0x8e, 0x5a, 0xd3, 0xea }, - // 186 - { 0x86, 0xc8, 0x8c, 0x18, 0x4f, 0xb6, 0x6f, 0xf7, 0xfa, 0x38, 0x9e, 0xa8, 0x1f, 0xfd, 0x15, 0xf4, 0x39, 0x27, 0x6a, 0x3e, 0x46, 0x37, 0x0c, 0x43, 0x94, 0x6a, 0x2d, 0x1d, 0x36, 0xe9, 0x3c, 0xb5 }, - // 187 - { 0x4a, 0xe6, 0x3d, 0x00, 0xe6, 0xda, 0x51, 0xb9, 0xba, 0x7b, 0xdb, 0xf7, 0x09, 0x6b, 0xbc, 0xd2, 0x91, 0xae, 0x94, 0xbd, 0x86, 0xed, 0x69, 0x8d, 0x25, 0x01, 0x33, 0xde, 0x41, 0xa5, 0xd2, 0x1f }, - // 188 - { 0x2d, 0x13, 0x87, 0xa3, 0x00, 0xd7, 0x03, 0x97, 0x77, 0x59, 0x47, 0xe7, 0x1b, 0x76, 0x3d, 0x4a, 0x5d, 0x36, 0x3d, 0x1a, 0xf2, 0x67, 0x61, 0x31, 0x3f, 0x8a, 0xf8, 0x58, 0x25, 0xb4, 0x6b, 0x40 }, - // 189 - { 0xbd, 0x75, 0x4e, 0x74, 0x38, 0xf2, 0xfd, 0x8a, 0xc1, 0x53, 0x70, 0xe7, 0x3f, 0xaf, 0xd5, 0x5c, 0xa3, 0xc7, 0xdc, 0x40, 0xc7, 0x80, 0xe4, 0x58, 0x1f, 0x17, 0x18, 0xb1, 0x30, 0x1b, 0xf6, 0x26 }, - // 190 - { 0xb3, 0x51, 0xfd, 0x0d, 0xc1, 0x44, 0xb7, 0xa2, 0x03, 0xdc, 0xea, 0x73, 0x2b, 0xac, 0xfe, 0xc6, 0xc3, 0x42, 0x53, 0x3f, 0x72, 0x84, 0xf6, 0xbd, 0x49, 0x19, 0xa7, 0x83, 0xb3, 0xe6, 0xdd, 0xbc }, - // 191 - { 0xe3, 0x7b, 0x56, 0xeb, 0x7a, 0x35, 0x87, 0x8c, 0x86, 0xaa, 0x1e, 0x31, 0x5c, 0xe1, 0x6f, 0x13, 0xe6, 0x34, 0xc8, 0xf5, 0x77, 0xd4, 0x96, 0x85, 0xec, 0x5a, 0x2c, 0x91, 0x0f, 0xcd, 0x4a, 0x66 }, - // 192 - { 0xf3, 0xef, 0xf1, 0x7e, 0x9d, 0xc2, 0xdc, 0x16, 0xd7, 0xd9, 0x66, 0xf7, 0x55, 0xfa, 0x24, 0x0f, 0xde, 0x18, 0x98, 0x4e, 0xe5, 0x58, 0x5a, 0x44, 0xa5, 0x86, 0xa4, 0x08, 0xff, 0x2c, 0xd9, 0x26 }, - // 193 - { 0xd2, 0x56, 0x88, 0x56, 0x0a, 0x17, 0x19, 0xe2, 0x1d, 0x0f, 0xad, 0xd5, 0x70, 0xf0, 0xf9, 0x38, 0xca, 0xb5, 0x49, 0x88, 0xdb, 0xff, 0x9f, 0xc8, 0x31, 0xbc, 0xe5, 0x80, 0xbb, 0x8a, 0xb0, 0x3f }, - // 194 - { 0x14, 0xb9, 0x6c, 0x51, 0xb1, 0x55, 0x8b, 0xb1, 0x4b, 0x01, 0x0c, 0x63, 0x66, 0xf0, 0x77, 0x07, 0x07, 0xd1, 0xcd, 0x1f, 0xdb, 0xf0, 0xa1, 0x97, 0x03, 0x8a, 0xe3, 0x6f, 0x22, 0x15, 0x36, 0x3d }, - // 195 - { 0x08, 0x7e, 0x0f, 0xe6, 0xb3, 0x9f, 0x40, 0xcd, 0x85, 0x2d, 0xff, 0x0d, 0xc4, 0xf4, 0x8b, 0x2a, 0xf0, 0x35, 0x23, 0xd1, 0x5e, 0x5b, 0xa0, 0xec, 0xd4, 0x03, 0x9e, 0x20, 0x07, 0x47, 0x9d, 0x5e }, - // 196 - { 0x95, 0x45, 0x53, 0xd2, 0x73, 0x38, 0xae, 0xc7, 0x34, 0xd3, 0x87, 0xe7, 0xba, 0xeb, 0xa5, 0xe7, 0x0d, 0xbd, 0x62, 0xa8, 0xed, 0x5e, 0x91, 0x67, 0x3c, 0x23, 0x42, 0xd5, 0x7c, 0x43, 0x44, 0x1c }, - // 197 - { 0x84, 0xfc, 0x7f, 0x19, 0xd8, 0x72, 0xf9, 0x89, 0xbf, 0xa0, 0x9d, 0x9e, 0x85, 0x03, 0x5e, 0xdb, 0x82, 0x23, 0xfc, 0x13, 0xfd, 0x66, 0x35, 0xcb, 0x7c, 0x47, 0xbb, 0xdd, 0x10, 0xa8, 0x5d, 0x13 }, - // 198 - { 0x23, 0x08, 0x9f, 0x31, 0xc4, 0xaf, 0x0e, 0xe5, 0xc6, 0x98, 0xc3, 0x55, 0x1c, 0x77, 0x59, 0x10, 0x66, 0xc2, 0x3c, 0x27, 0xdd, 0xae, 0xd3, 0x60, 0x0a, 0x3a, 0x92, 0x19, 0xea, 0x93, 0x03, 0x2a }, - // 199 - { 0x31, 0x62, 0x66, 0xb9, 0xc0, 0xf4, 0x5a, 0x25, 0xf5, 0x2d, 0x36, 0x2b, 0x7a, 0xdf, 0xdb, 0x1a, 0xec, 0xd1, 0x04, 0xc2, 0x96, 0xf9, 0x38, 0x04, 0x05, 0x80, 0xff, 0xf7, 0x4a, 0x33, 0xdf, 0x02 }, - // 200 - { 0xae, 0x62, 0x4c, 0x17, 0xfb, 0xd9, 0x62, 0x0b, 0x88, 0x11, 0xf0, 0x2e, 0x1e, 0x4d, 0x00, 0x6c, 0xb8, 0xf0, 0xdc, 0xa5, 0xf9, 0x6a, 0x14, 0xbe, 0xb5, 0xea, 0x13, 0x5d, 0x1d, 0xf5, 0xc9, 0xef }, - // 201 - { 0x3f, 0xa4, 0xe6, 0x42, 0xb7, 0xf6, 0xaa, 0x9f, 0x63, 0x57, 0x16, 0x8d, 0xd7, 0x5f, 0x5e, 0x3e, 0x11, 0x4e, 0x02, 0x6b, 0x46, 0xa3, 0xd7, 0x5d, 0xe2, 0xf3, 0xd5, 0xa0, 0xe2, 0x31, 0x7e, 0x54 }, - // 202 - { 0x68, 0xd3, 0xe6, 0xea, 0x92, 0x83, 0xc6, 0xe4, 0x77, 0x97, 0x9d, 0x32, 0x22, 0xfb, 0x15, 0x31, 0x18, 0x55, 0x33, 0xa8, 0x9f, 0x43, 0x3e, 0xd4, 0x1a, 0x0f, 0xa0, 0xbc, 0xec, 0x9e, 0x0d, 0x15 }, - // 203 - { 0x39, 0xee, 0x8d, 0x4e, 0xab, 0x74, 0x22, 0x24, 0x71, 0x6b, 0x2e, 0x66, 0xc9, 0xf9, 0x85, 0x32, 0xb4, 0x39, 0xb0, 0x27, 0x3c, 0xfd, 0xbe, 0x02, 0x0b, 0xe6, 0x4c, 0x04, 0x87, 0x9e, 0x67, 0x87 }, - // 204 - { 0xda, 0x77, 0x3c, 0x43, 0x56, 0x15, 0xf0, 0x51, 0xa1, 0x37, 0xc2, 0xb1, 0x56, 0x0f, 0x15, 0xc3, 0x63, 0xe8, 0xbc, 0x5a, 0x9b, 0x7b, 0x96, 0x30, 0xb8, 0xad, 0x81, 0x4a, 0x0b, 0x13, 0x24, 0x80 }, - // 205 - { 0xcc, 0xf5, 0x94, 0x15, 0x5a, 0xff, 0x2f, 0xb0, 0xfe, 0x76, 0xf7, 0x15, 0xe6, 0xaa, 0x76, 0x1b, 0x6d, 0xe3, 0x19, 0xd3, 0xcc, 0x52, 0xf9, 0xb3, 0x4a, 0xad, 0x04, 0xdc, 0x41, 0xeb, 0x2f, 0xeb }, - // 206 - { 0x24, 0xcb, 0x9a, 0xda, 0x6c, 0x3b, 0xff, 0x8e, 0x91, 0xc3, 0x98, 0x3b, 0xc5, 0x9d, 0x66, 0xf0, 0x59, 0xb6, 0xe2, 0x4f, 0xe2, 0x5e, 0x57, 0x72, 0xb8, 0x92, 0x90, 0xb5, 0x25, 0x0f, 0x23, 0x2d }, - // 207 - { 0x6d, 0x02, 0xcd, 0x3d, 0x1f, 0xe2, 0xd2, 0xfb, 0xa9, 0x23, 0x27, 0xb3, 0x6b, 0x53, 0x8f, 0x49, 0xa4, 0xb0, 0x47, 0x37, 0x5e, 0xc4, 0x44, 0x77, 0x02, 0x3f, 0xea, 0xdd, 0x40, 0x59, 0xd5, 0x6e }, - // 208 - { 0x4e, 0xf1, 0x9b, 0x67, 0x70, 0x3e, 0xc8, 0xae, 0xa4, 0xbb, 0x73, 0x94, 0xee, 0xca, 0x0d, 0xa2, 0x81, 0x50, 0xad, 0x9b, 0xb3, 0x00, 0x36, 0x38, 0x73, 0x40, 0x63, 0xb5, 0xae, 0x93, 0x21, 0x86 }, - // 209 - { 0x9f, 0x76, 0x1e, 0xce, 0xd1, 0x3c, 0xa4, 0x5a, 0xdd, 0x32, 0x70, 0x3f, 0x76, 0xd9, 0x2a, 0x75, 0xc2, 0x72, 0x2e, 0x5a, 0x4e, 0x87, 0x68, 0xa8, 0x54, 0xcf, 0x87, 0x61, 0xc9, 0x51, 0xc6, 0xc6 }, - // 210 - { 0xef, 0x97, 0x1b, 0x56, 0xa9, 0x79, 0x3c, 0x99, 0x62, 0x17, 0x8c, 0x8d, 0x73, 0x51, 0x9d, 0x2c, 0x98, 0xba, 0x4f, 0x4e, 0x3a, 0x6e, 0xab, 0xc8, 0x6a, 0xc1, 0x71, 0xee, 0xbe, 0x71, 0xc5, 0xd5 }, - // 211 - { 0x58, 0x08, 0x1a, 0x13, 0xe6, 0xe0, 0xc4, 0x97, 0x57, 0x2f, 0xf7, 0xeb, 0x1f, 0xa6, 0x5c, 0x80, 0x32, 0x19, 0x8c, 0x83, 0x44, 0xeb, 0x68, 0x60, 0x6e, 0x3a, 0x61, 0x83, 0xcb, 0x43, 0x63, 0xe0 }, - // 212 - { 0x18, 0xd7, 0x2c, 0xaa, 0x3e, 0xe3, 0x7b, 0x0a, 0x36, 0xaa, 0xd8, 0x35, 0x22, 0x8d, 0x98, 0xa0, 0x3d, 0xcb, 0xf4, 0x82, 0x94, 0xff, 0x65, 0xae, 0x9c, 0xb2, 0xb5, 0xaa, 0x1e, 0x93, 0x53, 0xa8 }, - // 213 - { 0xc3, 0x48, 0x5b, 0xa6, 0xe1, 0x47, 0x01, 0x0d, 0xc3, 0x2c, 0x00, 0xfc, 0x83, 0xf5, 0xd3, 0xa3, 0xdd, 0x0b, 0xc2, 0xea, 0x72, 0x9b, 0xb1, 0x5a, 0x8f, 0x09, 0x6f, 0x48, 0xd9, 0xe6, 0x0c, 0x21 }, - // 214 - { 0x78, 0xdb, 0x66, 0xcd, 0x0c, 0x43, 0x9e, 0xf8, 0xfd, 0x1f, 0xf5, 0x38, 0x33, 0xec, 0x74, 0xf9, 0xf2, 0x79, 0x5c, 0x63, 0xba, 0x73, 0x6b, 0xee, 0xc6, 0xae, 0x2d, 0xa9, 0xf6, 0x3a, 0x18, 0x3f }, - // 215 - { 0xfe, 0x5a, 0xf5, 0xe1, 0x2b, 0xe3, 0xf4, 0x51, 0xab, 0x5d, 0x20, 0x6b, 0xee, 0xbc, 0x83, 0xaf, 0x1a, 0xe7, 0xc9, 0xc1, 0x2f, 0xac, 0xc3, 0x73, 0xc8, 0x49, 0x99, 0x69, 0xc2, 0x34, 0x1e, 0xa1 }, - // 216 - { 0xcc, 0x01, 0x0f, 0xc7, 0xd8, 0x55, 0x19, 0x22, 0x18, 0x90, 0x64, 0xc5, 0x80, 0x5c, 0x4b, 0xd7, 0xee, 0xf0, 0xe1, 0x24, 0xe0, 0x04, 0xf9, 0x09, 0x91, 0x9d, 0xb3, 0x85, 0xd8, 0xbb, 0xa2, 0x83 }, - // 217 - { 0x54, 0xe7, 0x92, 0xcb, 0x3d, 0x39, 0x35, 0xa9, 0x1b, 0x5d, 0xb6, 0xf8, 0x85, 0xf1, 0xc3, 0x4e, 0x3f, 0x71, 0xdf, 0xa4, 0xc6, 0xb6, 0x68, 0xe2, 0xe5, 0x38, 0xc4, 0x0c, 0x0e, 0x1d, 0xa2, 0xe2 }, - // 218 - { 0x96, 0x63, 0x15, 0x3b, 0xe2, 0x52, 0x03, 0xa7, 0xf2, 0xc1, 0x17, 0x9a, 0x38, 0x74, 0xc7, 0x62, 0x42, 0x77, 0x4e, 0xf4, 0x4b, 0xce, 0x90, 0x51, 0x1d, 0x1d, 0x78, 0x42, 0xf7, 0xde, 0x58, 0xab }, - // 219 - { 0xfa, 0x78, 0x6d, 0x04, 0x8c, 0x43, 0xde, 0xbc, 0xf5, 0x54, 0xb8, 0x53, 0xce, 0x5d, 0xc7, 0x97, 0xb0, 0x20, 0xa2, 0x4b, 0x88, 0x8c, 0xa9, 0x79, 0x33, 0x7e, 0xfa, 0xb4, 0x73, 0xef, 0x86, 0xdf }, - // 220 - { 0xe9, 0x83, 0x25, 0x91, 0xbc, 0x85, 0x0d, 0xe9, 0x9a, 0xc1, 0x24, 0x9f, 0xd7, 0xc8, 0x93, 0x63, 0xcf, 0x44, 0x4e, 0xce, 0xe7, 0xcb, 0xf3, 0xa8, 0x91, 0x92, 0xd9, 0xa1, 0xb4, 0xae, 0xa0, 0xbd }, - // 221 - { 0x10, 0xa9, 0x4e, 0x35, 0x03, 0xcc, 0xe7, 0x67, 0x75, 0x74, 0x1c, 0x2a, 0x82, 0xaf, 0x43, 0xee, 0x06, 0x42, 0x20, 0x75, 0xc5, 0xb3, 0xb6, 0x51, 0xe4, 0x2d, 0xe8, 0xd8, 0x2f, 0xc5, 0xc9, 0x38 }, - // 222 - { 0xc9, 0x7a, 0x23, 0x5d, 0xe0, 0xb6, 0x21, 0x5c, 0xdf, 0xd9, 0xb5, 0xff, 0xe7, 0xad, 0x45, 0x77, 0x55, 0x30, 0xb7, 0x18, 0xcb, 0x54, 0x89, 0xa3, 0x61, 0x88, 0x83, 0x26, 0x83, 0x3c, 0xac, 0x13 }, - // 223 - { 0xe5, 0x6f, 0x66, 0x7d, 0xb8, 0xc7, 0xd2, 0x71, 0xda, 0x7c, 0x0f, 0x11, 0xd2, 0xc7, 0x5b, 0xc7, 0x06, 0xbe, 0xd2, 0xb2, 0xf8, 0x66, 0x1a, 0x1f, 0xb6, 0xf2, 0x9d, 0xeb, 0x78, 0xc2, 0xcd, 0x5f }, - // 224 - { 0xe0, 0xdc, 0xa7, 0xc4, 0x48, 0xe4, 0x6a, 0x50, 0x6b, 0x16, 0x75, 0x06, 0x41, 0x46, 0x89, 0xef, 0x2d, 0xc8, 0x50, 0xd2, 0xee, 0x0b, 0x57, 0x67, 0xdb, 0x7a, 0xeb, 0xa6, 0xcf, 0xb9, 0xe8, 0x50 }, - // 225 - { 0x81, 0xef, 0x43, 0x64, 0x2d, 0xf9, 0x2f, 0x91, 0xa0, 0x51, 0xf0, 0xa4, 0x9d, 0xe5, 0x65, 0x31, 0x9a, 0xaa, 0x03, 0x50, 0x13, 0x44, 0xaf, 0x3c, 0xd0, 0x51, 0x83, 0x40, 0xa4, 0x76, 0x99, 0x75 }, - // 226 - { 0xb1, 0x1c, 0x25, 0xc1, 0x85, 0x08, 0xdb, 0x61, 0x7e, 0x00, 0x7f, 0xd6, 0xda, 0x1f, 0x52, 0x6a, 0x8a, 0x4c, 0x35, 0x1b, 0xa7, 0x8a, 0x09, 0xcf, 0xc0, 0xbf, 0xd1, 0x75, 0xc2, 0x4d, 0xbb, 0xc9 }, - // 227 - { 0x65, 0x7d, 0xc9, 0x98, 0x1d, 0xc1, 0x6f, 0xca, 0x11, 0x70, 0xed, 0x35, 0xa5, 0xb2, 0x7e, 0x96, 0x0c, 0x53, 0x95, 0x52, 0x1d, 0x7d, 0x9d, 0xf3, 0x25, 0x57, 0x63, 0xe2, 0xfb, 0xf2, 0x2a, 0xd7 }, - // 228 - { 0x29, 0x34, 0xc5, 0xf6, 0xe7, 0x1f, 0x6e, 0x39, 0x04, 0x81, 0x88, 0x39, 0x27, 0xa0, 0xd9, 0xd6, 0xeb, 0x93, 0xc5, 0xba, 0xd4, 0xf1, 0xa5, 0xff, 0x5b, 0x09, 0x7c, 0xff, 0x5e, 0x08, 0x1d, 0x67 }, - // 229 - { 0x1b, 0xc4, 0x7f, 0xac, 0xbd, 0x45, 0xfd, 0x59, 0xc7, 0x00, 0x31, 0x94, 0x96, 0xa0, 0x23, 0x14, 0xf3, 0x8a, 0xef, 0x86, 0xb9, 0x1c, 0x37, 0xac, 0x47, 0xbc, 0x7d, 0x2a, 0x17, 0xcc, 0x2a, 0x0f }, - // 230 - { 0x7c, 0x04, 0x49, 0xae, 0xe6, 0x69, 0x06, 0x44, 0xeb, 0x9a, 0x67, 0x3e, 0xda, 0x8d, 0xfa, 0xd6, 0x5d, 0x1f, 0xef, 0x8d, 0xab, 0x2c, 0xc4, 0x1d, 0x8e, 0x52, 0xe6, 0xf7, 0xaa, 0xbd, 0xda, 0x36 }, - // 231 - { 0x19, 0x75, 0x61, 0xfb, 0x26, 0x0b, 0x09, 0xfd, 0x29, 0xe7, 0x74, 0x44, 0x42, 0x27, 0x40, 0xa5, 0xfa, 0x8d, 0x17, 0xbc, 0xf6, 0x0a, 0x34, 0xd7, 0x4b, 0x63, 0x49, 0x2d, 0xc3, 0xd4, 0x54, 0x14 }, - // 232 - { 0xc9, 0xf0, 0xed, 0x80, 0x1e, 0xfc, 0xd0, 0x01, 0xf0, 0x0b, 0xcc, 0x4e, 0xd2, 0xff, 0x2e, 0x76, 0xfb, 0xd6, 0xac, 0x91, 0xd3, 0x89, 0x92, 0x0d, 0xab, 0x9e, 0x12, 0xd5, 0xeb, 0x63, 0x60, 0x18 }, - // 233 - { 0x46, 0x5e, 0x55, 0x03, 0x02, 0x92, 0xd0, 0x21, 0x53, 0xbf, 0xe3, 0xc5, 0x2f, 0x67, 0x36, 0x91, 0x27, 0xd8, 0xae, 0xc5, 0xb5, 0x77, 0x8a, 0x0b, 0x06, 0x43, 0x00, 0x08, 0xbb, 0xa0, 0xc5, 0xda }, - // 234 - { 0x0e, 0x44, 0x3f, 0x10, 0x30, 0xdc, 0xbc, 0x18, 0xd8, 0xf2, 0x99, 0x7a, 0xe2, 0x1d, 0x29, 0xe8, 0x91, 0xd0, 0x48, 0x7a, 0x79, 0x09, 0x89, 0x67, 0x72, 0x9e, 0xd3, 0xe5, 0xef, 0x61, 0x93, 0xfe }, - // 235 - { 0x61, 0xda, 0xf8, 0x42, 0x13, 0xc2, 0xe7, 0xa5, 0x5f, 0x8d, 0xbb, 0xcd, 0x3c, 0x87, 0x23, 0xf6, 0xef, 0xdc, 0x7e, 0x81, 0xfc, 0x8b, 0x79, 0x8a, 0xcc, 0x4c, 0xa5, 0xc8, 0x25, 0xf9, 0x1c, 0x6d }, - // 236 - { 0x2c, 0x1b, 0x5b, 0x64, 0xe9, 0x9a, 0x37, 0xee, 0x1c, 0xa8, 0xdc, 0xd4, 0x49, 0xa4, 0x77, 0x88, 0x29, 0x60, 0x88, 0x74, 0xaf, 0xae, 0x35, 0x2a, 0xe9, 0xa3, 0xb0, 0xaa, 0xfb, 0xab, 0x2b, 0x65 }, - // 237 - { 0x68, 0x4f, 0xca, 0x80, 0x09, 0x53, 0x1a, 0x9d, 0xa1, 0xed, 0x81, 0xb3, 0xda, 0x96, 0xa3, 0x9e, 0x86, 0x2f, 0x1a, 0xd7, 0x31, 0x0e, 0x18, 0xf5, 0xf9, 0x60, 0xc5, 0xb0, 0xff, 0xd6, 0x36, 0x5d }, - // 238 - { 0xda, 0x78, 0x5f, 0x50, 0x37, 0xe5, 0x91, 0x89, 0x72, 0x90, 0xec, 0x30, 0x6e, 0x5b, 0x5c, 0x3a, 0xd7, 0x1a, 0x68, 0x7f, 0x58, 0xd7, 0x2e, 0xe9, 0xb0, 0xa1, 0xfb, 0x92, 0xe8, 0xf6, 0xfa, 0xb6 }, - // 239 - { 0xa9, 0xc5, 0xc7, 0x66, 0x49, 0x0a, 0xaf, 0xd6, 0x2e, 0x4d, 0x28, 0x14, 0x82, 0x85, 0xcf, 0x91, 0x41, 0x82, 0xbc, 0x78, 0x33, 0x13, 0x90, 0xf8, 0xd1, 0x2a, 0xa2, 0xe2, 0xcd, 0xcf, 0xe2, 0x85 }, - // 240 - { 0x24, 0x91, 0xdd, 0xa5, 0xef, 0x34, 0x97, 0xf3, 0x17, 0x2d, 0x9a, 0xd6, 0xb9, 0x43, 0x38, 0xdd, 0x9b, 0x00, 0x33, 0x30, 0xeb, 0xdc, 0xf3, 0xd2, 0xd2, 0xef, 0x93, 0x4b, 0x56, 0x87, 0x2a, 0xc2 }, - // 241 - { 0x77, 0x5a, 0xc5, 0x10, 0x4a, 0x23, 0x49, 0x57, 0xa5, 0xd9, 0x5b, 0x3f, 0x6a, 0x66, 0xc9, 0x55, 0x4c, 0x72, 0xeb, 0xb8, 0x1d, 0x79, 0x05, 0xe0, 0x22, 0x97, 0x5d, 0x1c, 0xea, 0x4b, 0xfb, 0x1b }, - // 242 - { 0x5d, 0x53, 0x12, 0x8c, 0xa0, 0x64, 0x60, 0x6e, 0xb9, 0x5a, 0x49, 0x6d, 0x67, 0x4b, 0x20, 0x5c, 0x23, 0xa3, 0x07, 0xcc, 0x0d, 0x49, 0xf0, 0x2e, 0xfc, 0xc3, 0x00, 0xcd, 0x5c, 0x74, 0xac, 0x38 }, - // 243 - { 0x30, 0x4f, 0xa6, 0xbc, 0x45, 0x5d, 0xee, 0x95, 0x77, 0xca, 0x55, 0x5d, 0xe5, 0x5c, 0xf0, 0xeb, 0xd9, 0x38, 0xaf, 0xbe, 0xed, 0x8e, 0x7e, 0xd8, 0x57, 0x2a, 0xb7, 0x07, 0xff, 0x4e, 0x56, 0x23 }, - // 244 - { 0xa8, 0x7c, 0xca, 0x54, 0x3b, 0xcc, 0xe9, 0x80, 0xac, 0xce, 0x17, 0x62, 0x00, 0xd2, 0xc1, 0x71, 0x95, 0xc0, 0xc9, 0x0c, 0xd5, 0x0b, 0xaf, 0x0a, 0x46, 0x99, 0xc8, 0xc4, 0x5a, 0xb1, 0x18, 0x20 }, - // 245 - { 0x5c, 0xd2, 0x7f, 0x0e, 0x3b, 0x80, 0xeb, 0x1a, 0xcd, 0x65, 0x14, 0xd5, 0x4e, 0x03, 0x95, 0x40, 0x99, 0x52, 0xd2, 0xe1, 0xed, 0xf9, 0xb1, 0x88, 0x11, 0x37, 0xed, 0x01, 0x47, 0xa9, 0xa1, 0xc1 }, - // 246 - { 0xc2, 0x44, 0xcd, 0xe0, 0x2f, 0x02, 0x12, 0xf0, 0xb6, 0x37, 0x9a, 0x91, 0x23, 0x16, 0x77, 0x36, 0x7d, 0x6c, 0xfd, 0xaf, 0x25, 0x60, 0xd5, 0x98, 0x63, 0xa1, 0x85, 0xf8, 0xaf, 0x3d, 0x56, 0x7b }, - // 247 - { 0xa7, 0x87, 0x64, 0x76, 0x7e, 0xda, 0x2b, 0xd4, 0xac, 0x8c, 0xd5, 0x91, 0xa0, 0xf9, 0xf2, 0xf2, 0x41, 0x83, 0x38, 0xda, 0xa9, 0x63, 0xe3, 0x91, 0xe0, 0x34, 0xfd, 0x87, 0xbe, 0xf5, 0x39, 0x58 }, - // 248 - { 0x4f, 0x8f, 0x58, 0xd9, 0xa4, 0xe8, 0xbf, 0x0a, 0x23, 0x48, 0x0c, 0xc0, 0x06, 0x0a, 0x54, 0x82, 0x2d, 0x04, 0x78, 0xd2, 0x63, 0x13, 0x9b, 0x75, 0x3d, 0x47, 0x41, 0xd1, 0xe6, 0x65, 0xfe, 0xb7 }, - // 249 - { 0xb8, 0x5f, 0xd3, 0x4e, 0x1c, 0x1a, 0x8c, 0x06, 0x9b, 0x47, 0x4d, 0x67, 0x06, 0xbe, 0x56, 0xe5, 0xfd, 0x66, 0xe4, 0x7a, 0x31, 0x6d, 0x4f, 0x05, 0x20, 0xf4, 0x4a, 0x6a, 0xc4, 0xf8, 0x69, 0x88 }, - // 250 - { 0x03, 0xe6, 0x91, 0x51, 0x38, 0xa2, 0x2f, 0x5a, 0x97, 0x0b, 0x2c, 0xdb, 0xa5, 0x0a, 0x55, 0x17, 0x19, 0xf9, 0x13, 0x6f, 0x1c, 0x18, 0xc4, 0xce, 0x2b, 0x73, 0x8e, 0x2a, 0xe1, 0x86, 0x8b, 0xee }, - // 251 - { 0xd3, 0xed, 0xa9, 0xd6, 0xdc, 0x8b, 0xe0, 0xad, 0xb5, 0x13, 0x43, 0xb8, 0xb3, 0x00, 0x3d, 0xb5, 0x9c, 0xb0, 0x28, 0x4b, 0xbc, 0x50, 0x4e, 0x74, 0xbf, 0xf3, 0xc0, 0x49, 0x63, 0x6a, 0x0b, 0xb7 }, - // 252 - { 0x21, 0x13, 0x71, 0x98, 0xb5, 0x06, 0x06, 0x03, 0x22, 0x4a, 0x74, 0x94, 0x9b, 0x1d, 0x42, 0x91, 0x32, 0x13, 0xb2, 0xb6, 0x49, 0xb2, 0x8a, 0xaf, 0xb8, 0xc0, 0xca, 0x18, 0xe2, 0x7f, 0x94, 0xf0 }, - // 253 - { 0xd5, 0x25, 0x71, 0x5b, 0x56, 0xa6, 0xc3, 0xb6, 0x8d, 0xd6, 0xb9, 0xf3, 0x13, 0x1e, 0x41, 0x2d, 0xfb, 0x1f, 0x83, 0x20, 0xd1, 0x3f, 0x47, 0x30, 0x72, 0xc7, 0xa2, 0xf7, 0x23, 0xc3, 0xad, 0x08 }, - // 254 - { 0x87, 0x1a, 0x9e, 0x83, 0x8a, 0xbd, 0x11, 0x24, 0x22, 0xa5, 0x20, 0x1f, 0x6c, 0x5b, 0xb8, 0x53, 0x6a, 0x57, 0x57, 0x1a, 0x5c, 0xc2, 0x61, 0x1e, 0x5f, 0x03, 0x53, 0x2b, 0x81, 0xaf, 0x4b, 0x92 }, - // 255 - { 0xeb, 0xe8, 0x11, 0x0a, 0x3d, 0x2d, 0x07, 0x4b, 0x85, 0x49, 0x56, 0x76, 0xbb, 0x0d, 0x98, 0x16, 0x16, 0x07, 0xb5, 0x5d, 0xb6, 0x19, 0x15, 0x40, 0xfe, 0x4d, 0x53, 0x5a, 0xc3, 0x8a, 0xaf, 0xb1 }, -}; diff --git a/lib/blake2/tests/blake2s_selftest.cc b/lib/blake2/tests/blake2s_selftest.cc deleted file mode 100644 index 420544d..0000000 --- a/lib/blake2/tests/blake2s_selftest.cc +++ /dev/null @@ -1,113 +0,0 @@ -// Self test Modules for BLAKE2s -#include "blake2s_kat.h" -#include - -extern "C" { -#include "blake2s.h" -} - -static_assert(sizeof(BLAKE2s_param) == (8 * sizeof(uint32_t)), "sizeof struct BLAKE2s_param"); - -// Deterministic sequences (Fibonacci generator). -static void -selftest_seq(uint8_t *out, size_t len, uint32_t seed) -{ - size_t i; - uint32_t t, a, b; - - a = 0xDEAD4BAD * seed; // prime - b = 1; - - for (i = 0; i < len; i++) { // fill the buf - t = a + b; - a = b; - b = t; - out[i] = (t >> 24) & 0xFF; - } -} - -// BLAKE2s self-test validation. Return 0 when OK. -int -blake2s_selftest() -{ - // Grand hash of hash results. - const uint8_t blake2s_res[32] = {0x6A, 0x41, 0x1F, 0x08, 0xCE, 0x25, 0xAD, 0xCD, 0xFB, 0x02, 0xAB, - 0xA6, 0x41, 0x45, 0x1C, 0xEC, 0x53, 0xC5, 0x98, 0xB2, 0x4F, 0x4F, - 0xC7, 0x87, 0xFB, 0xDC, 0x88, 0x79, 0x7F, 0x4C, 0x1D, 0xFE}; - // Parameter sets. - const size_t b2s_md_len[4] = {16, 20, 28, 32}; - const size_t b2s_in_len[6] = {0, 3, 64, 65, 255, 1024}; - - size_t i, j, outlen, inlen; - uint8_t in[1024], md[32], key[32]; - struct BLAKE2s_ctx ctx; - - // 256-bit hash for testing. - if (BLAKE2s_init(&ctx, 32, NULL, 0)) return -1; - - for (i = 0; i < 4; i++) { - outlen = b2s_md_len[i]; - for (j = 0; j < 6; j++) { - inlen = b2s_in_len[j]; - - selftest_seq(in, inlen, inlen); // unkeyed hash - BLAKE2s(md, outlen, NULL, 0, in, inlen); - BLAKE2s_update(&ctx, md, outlen); // hash the hash - - selftest_seq(key, outlen, outlen); // keyed hash - BLAKE2s(md, outlen, key, outlen, in, inlen); - BLAKE2s_update(&ctx, md, outlen); // hash the hash - } - } - - // Compute and compare the hash of hashes. - BLAKE2s_final(&ctx, md); - for (i = 0; i < 32; i++) { - if (md[i] != blake2s_res[i]) return -1; - } - - return 0; -} - -TEST(blake2s, selftest) { EXPECT_EQ(blake2s_selftest(), 0); } - -TEST(blake2s, selftestAllInOne) -{ - const char *in = "abc"; - size_t inlen = 3; - - uint8_t out[32]; - BLAKE2s(out, 32, NULL, 0, in, inlen); - - const uint8_t blake2s_res[32] = {0x50, 0x8C, 0x5E, 0x8C, 0x32, 0x7C, 0x14, 0xE2, 0xE1, 0xA7, 0x2B, - 0xA3, 0x4E, 0xEB, 0x45, 0x2F, 0x37, 0x45, 0x8B, 0x20, 0x9E, 0xD6, - 0x3A, 0x29, 0x4D, 0x99, 0x9B, 0x4C, 0x86, 0x67, 0x59, 0x82}; - - for (unsigned i = 0; i < 32; i++) { - EXPECT_EQ(out[i], blake2s_res[i]) << "position=" << i; - } -} - -TEST(blake2s, KnownAnswerTest) -{ - uint8_t in[256]; - for (int i = 0; i < 256; ++i) in[i] = i; - uint8_t out[32]; - - for (unsigned i = 0; i < KATs_len; ++i) { - EXPECT_EQ(BLAKE2s(out, 32, NULL, 0, in, i), 0); - for (unsigned j = 0; j < 32; ++j) EXPECT_EQ(out[j], KATs[i][j]) << "on test=" << i << " pos=" << j; - } -} - -TEST(blake2s, KnownAnswerTestKeyed) -{ - uint8_t in[256]; - for (int i = 0; i < 256; ++i) in[i] = i; - uint8_t out[32]; - - for (unsigned i = 0; i < KATs_len; ++i) { - EXPECT_EQ(BLAKE2s(out, 32, KAT_secret, 32, in, i), 0); - for (unsigned j = 0; j < 32; ++j) EXPECT_EQ(out[j], secret_KATs[i][j]) << "on test=" << i << " pos=" << j; - } -} diff --git a/lib/libk/BUILD.bazel b/lib/libk/BUILD.bazel new file mode 100644 index 0000000..51b4c1b --- /dev/null +++ b/lib/libk/BUILD.bazel @@ -0,0 +1,80 @@ +filegroup( + name = "k_srcs", + srcs = [ + "endian/little.c", + "stdio/fprintf.c", + "stdio/printf.c", + "stdio/vfprintf.c", + "stdlib/linked_list_allocator.c", + "stdlib/memcpy.c", + "stdlib/memset.c", + "string/itoa.c", + ], +) + +cc_library( + name = "k", + srcs = [":k_srcs"], + hdrs = glob(["include/*.h"]), + includes = ["include"], + target_compatible_with = [ + "@platforms//os:none", + ], + visibility = ["//visibility:public"], +) + +# tests +cc_library( + name = "k_sut", + includes = ["."], + target_compatible_with = select({ + "@platforms//os:none": ["@platforms//:incompatible"], + "//conditions:default": [], + }), + textual_hdrs = [":k_srcs"], +) + +cc_test( + name = "test_endian_little", + srcs = [ + "endian/test_endian_little.cc", + ], + deps = [ + ":k_sut", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "test_linked_list_allocator", + srcs = [ + "stdlib/test_allocator.hh", + "stdlib/test_linked_list_allocator.cc", + ], + deps = [ + ":k_sut", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "test_mem", + srcs = [ + "stdlib/test_mem.cc", + ], + deps = [ + ":k_sut", + "@googletest//:gtest_main", + ], +) + +cc_test( + name = "test_string", + srcs = [ + "string/test_string.cc", + ], + deps = [ + ":k_sut", + "@googletest//:gtest_main", + ], +) diff --git a/lib/libk/meson.build b/lib/libk/meson.build deleted file mode 100644 index 669780b..0000000 --- a/lib/libk/meson.build +++ /dev/null @@ -1,41 +0,0 @@ - -libk_srcs = files( - 'endian/little.c', - 'stdio/printf.c', 'stdio/fprintf.c', 'stdio/vfprintf.c', - 'stdlib/memcpy.c', 'stdlib/memset.c', 'stdlib/linked_list_allocator.c', - 'string/itoa.c') -libk_incl = include_directories('include') - -libk = declare_dependency( - link_with: static_library('k', libk_srcs, include_directories: libk_incl), - include_directories: libk_incl, -) - -# tests -test('endian little', - executable('test_endian_little', 'endian/test_endian_little.cc', - dependencies: [ gtest ], - native: true), - suite: 'libk' -) - -test('linked list allocator', - executable('test_linked_list_allocator', 'stdlib/test_linked_list_allocator.cc', - dependencies: [ gtest ], - native: true), - suite: 'libk' -) - -test('mem', - executable('test_mem', 'stdlib/test_mem.cc', - dependencies: [ gtest ], - native: true), - suite: 'libk' -) - -test('string', - executable('test_string', 'string/test_string.cc', - dependencies: [ gtest ], - native: true), - suite: 'libk' -) diff --git a/meson.build b/meson.build deleted file mode 100644 index b5c6763..0000000 --- a/meson.build +++ /dev/null @@ -1,39 +0,0 @@ -project('glitch', ['c', 'cpp'], - version: '0.1.0', - default_options: { - 'c_std': 'c89', - 'cpp_std': 'c++20', - 'warning_level': '3', - 'buildtype': 'plain', - 'b_staticpic': false, - } -) - -# meson includes -subdir('meson/compiler_flags') - -# common dependencies -pymod = import('python') -python = pymod.find_installation() -qemu_i386 = find_program('qemu-system-i386') -gtest = dependency('gtest', main: true, native: true, disabler: true) -gmock = dependency('gmock', native: true, disabler: true) - -# components -subdir('grub') -subdir('lib/libk') -subdir('lib/blake2') -subdir('i686') -subdir('devices') -subdir('src') - -glitch_iso = custom_target('glitch.iso', - input: ['tools/make_iso.py', 'grub/grub.cfg', glitch_elf], - output: 'glitch.iso', - command: [python, '@INPUT0@', '-c=@INPUT1@', '-k=@INPUT2@', '-o=@OUTPUT@'], -) - -run_target('run_i686', - command: [qemu_i386, '-accel', 'kvm', '-machine', 'pc', '-cdrom', glitch_iso, - '-d', 'cpu_reset', '-display', 'gtk,zoom-to-fit=on'], -) diff --git a/meson/compiler_flags/meson.build b/meson/compiler_flags/meson.build deleted file mode 100644 index f159eb4..0000000 --- a/meson/compiler_flags/meson.build +++ /dev/null @@ -1,34 +0,0 @@ -# global compiler settings -common_compiler_flags = [ - '-Wshadow', - '-Wunused', '-Wunused-parameter', - '-Wmisleading-indentation', - '-Wundef', - '-Wuninitialized', - # casts - '-Wcast-align', # performance problem casts - '-Wcast-qual', - # conversion - '-Wconversion', # type conversion may lose data - '-Wsign-conversion', # sign conversion - '-Wdouble-promotion', # implicit float to double - # pointers - '-Wpointer-arith', - '-Wnull-dereference', -] -c_compiler_flags = [ - '-fanalyzer', -] -cpp_compiler_flags = [ - '-Weffc++', - # inheritance - '-Wnon-virtual-dtor', # class with virtual functions has non-virt dtor - '-Woverloaded-virtual', # overloaded (not override) virtual function - # casts - '-Wold-style-cast', # C-style casts -] -add_project_arguments(common_compiler_flags, c_compiler_flags, language: 'c') -add_project_arguments(common_compiler_flags, cpp_compiler_flags, language: 'cpp') -add_project_arguments('-D__ARCH__=i686', language: 'c', native: false) - -subdir_done() diff --git a/platforms/BUILD.bazel b/platforms/BUILD.bazel new file mode 100644 index 0000000..1f13594 --- /dev/null +++ b/platforms/BUILD.bazel @@ -0,0 +1,7 @@ +platform( + name = "i386", + constraint_values = [ + "@platforms//cpu:i386", + "@platforms//os:none", + ], +) diff --git a/project_config.bzl b/project_config.bzl new file mode 100644 index 0000000..a4c58fb --- /dev/null +++ b/project_config.bzl @@ -0,0 +1,2 @@ +def version(): + return "0.1.0" diff --git a/src/boot.h b/src/boot.h deleted file mode 100644 index 646fb4c..0000000 --- a/src/boot.h +++ /dev/null @@ -1,21 +0,0 @@ -/* *** glitch kernel *** - * spdx-license-identifier: ISC - * description: kernel boot information - * */ - -#pragma once - -typedef struct { - /* kernel command line */ - char cmdline[64]; - - /* memory map */ - unsigned bitmap[1024 * 32]; - - /* module */ - unsigned module_start; - unsigned module_end; - char module_cmdline[64]; -} boot_info_t; - -/* TODO _Static_assert((1024 * 32 * sizeof(unsigned) * 8) == (1024 * 1024), "bitmap size check"); */ diff --git a/src/kernel.c b/src/kernel.c deleted file mode 100644 index 98269c1..0000000 --- a/src/kernel.c +++ /dev/null @@ -1,57 +0,0 @@ -/* *** glitch kernel *** - * spdx-license-identifier: ISC - * description: kernel entry point - * */ - -#include "conf.h" -#include "mem.h" -#include -#include -#include -#include -#include -#include -#include -#include - -FILE *stdin; -FILE *stdout; -FILE *stderr; - -void -kmain(void) -{ - stderr = uart_init(COM1); - vmm_map(0xb8000, 0xc03ff000); - stdout = vga_init((void *)0xc03ff000); - - printf("glitch [version " VERSION "] [" CC "]\n"); - fprintf(stderr, "glitch [version " VERSION "] [" CC "]\n"); - { - struct CPUVersion v; - - char vendor[13] = {'\0'}; - unsigned int eax; - __get_cpuid(0, &eax, (unsigned int *)vendor, (unsigned int *)(vendor + 8), (unsigned int *)(vendor + 4)); - __get_cpuid(1, (unsigned int *)&v, &eax, &eax, &eax); - printf("cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); - fprintf(stderr, "cpuid: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); - } - - pic_init(); - - ps2_ctrl_init(); - ps2_keyboard_init(); - mouse_init(); - - pic_enable(); - fprintf(stderr, "interrupts enabled\n"); - - /* - alloc4M(); - char *c = (char *)0xc0700000; - if (*c == 0) printf("c is 0\r\n"); - */ - - while (1) {} -} diff --git a/src/mem.h b/src/mem.h deleted file mode 100644 index e06dd21..0000000 --- a/src/mem.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -unsigned int vmm_map(unsigned int paddr, unsigned int vaddr); -void alloc4M(); diff --git a/src/mem/vmm.c b/src/mem/vmm.c deleted file mode 100644 index a07dd72..0000000 --- a/src/mem/vmm.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "../mem.h" -#include - -extern struct DirectoryEntry k_pagedir[1024]; -extern struct TableEntry k_ptable0x300[1024]; - -extern const unsigned MULTIBOOT_SIZE; -extern const unsigned VADDR_BASE; - -unsigned -to_vaddr(unsigned paddr) -{ - return paddr + (unsigned)&VADDR_BASE - (unsigned)&MULTIBOOT_SIZE; -} - -unsigned int -vmm_map(unsigned int paddr, unsigned int vaddr) -{ - struct TableEntry *table; - const unsigned table_idx = vaddr >> 22; /* high 10 bits */ - const unsigned entry_idx = (vaddr >> 12) & 0x3ff; /* low 10 bits */ - - if (paddr & 0xfff || vaddr & 0xfff) return 0; - - if (k_pagedir[table_idx].present == 0) return 0; - table = (struct TableEntry *)to_vaddr(k_pagedir[table_idx].address << 12); - table[entry_idx].address = (paddr >> 12) & 0xfffff; - table[entry_idx].present = 1; - table[entry_idx].writeable = 1; - - return vaddr; -} - -void -alloc4M() -{ - struct DirectoryEntry4MB *directory; - - /* enable pse in cr4 */ - __asm__("movl %cr4, %eax; orl $0x10, %eax; movl %eax, %cr4"); - - directory = (struct DirectoryEntry4MB *)&k_pagedir[0x301]; - directory->address_low = 0x1; - directory->present = 1; - directory->writeable = 1; - directory->pagesize = 1; -} diff --git a/src/meson.build b/src/meson.build deleted file mode 100644 index 881dffa..0000000 --- a/src/meson.build +++ /dev/null @@ -1,36 +0,0 @@ - -# generated files -conf_h = configure_file( - #input: 'conf.h.in', - output: 'conf.h', - configuration: { - 'VERSION': '"@0@"'.format(meson.project_version()), - 'CC': '"@0@-@1@"'.format(meson.get_compiler('c').version(), - meson.get_compiler('c').get_id()), - } -) - -kernel_srcs = files('multiboot2.c', 'mmap.c', 'kernel.c', 'mem/vmm.c') -kernel_incl = include_directories('.') - -glitch_elf = executable('glitch.elf', kernel_srcs, - include_directories: [ kernel_incl, grub_incl ], - dependencies: [ libk, devs, i686 ], - link_args: [ '-static', '-nostdlib', '-T', '../i686/linker.ld' ], -) - -# tests -test('taskqueue', - executable('test_taskqueue', 'sched/test_taskqueue.cc', - dependencies: [ gtest ], - native: true), - suite: 'kernel' -) - -test('roundrobin', - executable('test_roundrobin', 'sched/test_roundrobin.cc', - dependencies: [ gtest ], - native: true), - suite: 'kernel' -) - diff --git a/src/mmap.c b/src/mmap.c deleted file mode 100644 index e5d4be6..0000000 --- a/src/mmap.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "mmap.h" -#include - -#ifdef DEBUG -#include -#endif - -__attribute__((section(".multiboot.text"))) unsigned -multiboot2_mmap(const struct multiboot_mmap_entry entries[], unsigned entry_count, unsigned bitmap[1024 * 32]) -{ - unsigned i, l; - multiboot_uint64_t avail_frames = 0; - multiboot_uint64_t n_frames; - multiboot_uint64_t table_idx; - - /* clear out the bitmap */ - for (i = 0; i < 1024 * 32; ++i) bitmap[i] = 0; - - /* loop through all the mmap_entry structures where type is MULTIBOOT_MEMORY_AVAILABLE */ - for (i = 0; i < entry_count; ++i) { - if (entries[i].type != MULTIBOOT_MEMORY_AVAILABLE) continue; - - /* number of frames in this entry */ - n_frames = entries[i].len / 4096; - avail_frames += n_frames; - -#ifdef DEBUG - printf("mmap_entry: 0x%16llx\tlen=%12llu\t%d frames (%d blocks + %d)\n", entries[i].addr, entries[i].len, n_frames, - n_frames / 32, n_frames % 32); -#endif - - /* the bitmap is an array of blocks, each holding 32 (2^5) values */ - table_idx = (entries[i].addr >> 17); /* get the upper 15 bits */ - - while (n_frames != 0) { - if (n_frames >= 32) { - bitmap[table_idx] = 0xffffffff; - table_idx++; - n_frames -= 32; - } - else { - unsigned block = bitmap[table_idx]; - for (l = 0; l < n_frames; ++l) block |= (1 << l); - bitmap[table_idx] = block; - n_frames = 0; - } - } - } - - return avail_frames; -} diff --git a/src/mmap.h b/src/mmap.h deleted file mode 100644 index 13f40f2..0000000 --- a/src/mmap.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include "boot.h" -#include - -__attribute__((section(".multiboot.text"))) unsigned multiboot2_mmap(const struct multiboot_mmap_entry entries[], - unsigned entry_count, unsigned bitmap[1024 * 32]); diff --git a/src/multiboot2.c b/src/multiboot2.c deleted file mode 100644 index bd6250f..0000000 --- a/src/multiboot2.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "mmap.h" - -#define ADDR(x) ((unsigned)&x - 0xc0000000 + 0x2000) - -boot_info_t info __attribute__((section(".init"))); - -__attribute__((section(".multiboot.text"))) void -multiboot_strncpy(char *dest, const char *src, unsigned n) -{ - unsigned i; - for (i = 0; i < n && src[i] != '\0'; ++i) dest[i] = src[i]; -} - -__attribute__((section(".multiboot.text"))) void -multiboot2_module(struct multiboot_tag_module *tag, boot_info_t *tag_info) -{ - tag_info->module_start = tag->mod_start; - tag_info->module_end = tag->mod_end; - multiboot_strncpy(tag_info->module_cmdline, tag->cmdline, 64); -} - -/** - * parse multiboot2 structures - */ -__attribute__((section(".multiboot.text"))) void -__multiboot2(multiboot_uint32_t addr) -{ - boot_info_t *__info = (boot_info_t *)ADDR(info); - - struct multiboot_tag *tag; - for (tag = (struct multiboot_tag *)(addr + 8); tag->type != MULTIBOOT_TAG_TYPE_END; - tag = (struct multiboot_tag *)((multiboot_uint8_t *)tag + ((tag->size + 7u) & ~7u))) { - - switch (tag->type) { - case MULTIBOOT_TAG_TYPE_CMDLINE: - multiboot_strncpy(__info->cmdline, ((struct multiboot_tag_string *)tag)->string, 64); - break; - case MULTIBOOT_TAG_TYPE_MODULE: - multiboot2_module((struct multiboot_tag_module *)tag, __info); - break; - case MULTIBOOT_TAG_TYPE_MMAP: - multiboot2_mmap(((struct multiboot_tag_mmap *)tag)->entries, - ((struct multiboot_tag_mmap *)tag)->size / ((struct multiboot_tag_mmap *)tag)->entry_size, - __info->bitmap); - break; - default: - break; - } - } -} diff --git a/src/sched.hpp b/src/sched.hpp deleted file mode 100644 index cfa3ff0..0000000 --- a/src/sched.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include "task.h" - -class RoundRobinQueue : public Queue { -public: - [[nodiscard]] Task *next(int slice); -}; diff --git a/src/sched/roundrobin.cpp b/src/sched/roundrobin.cpp deleted file mode 100644 index c3d6cb6..0000000 --- a/src/sched/roundrobin.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "../sched.hpp" - -/// Each task is run for a time quantum or the remainder of its cpu burst -Task * -RoundRobinQueue::next(int slice) -{ - if (head == nullptr) return nullptr; - if (head->node->burst <= 0) { - delete head->node; - remove(head->node); - return next(slice); - } - - auto *it = head; - it->node->burst -= slice; - if (head->next) head = head->next; - it->next = nullptr; - tail->next = it; - tail = it; - return it->node; -} diff --git a/src/sched/test_roundrobin.cc b/src/sched/test_roundrobin.cc deleted file mode 100644 index 89f60bf..0000000 --- a/src/sched/test_roundrobin.cc +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include - -#include "../sched/roundrobin.cpp" - -void -run(Task *task, int slice) -{ - std::cout << "Running task " << task->name << " id=" << std::setw(2) << task->id << " prio=" << std::setw(2) - << task->priority << " burst=" << std::setw(2) << task->burst << " slice=" << slice << " "; -} - -struct DebugRoundRobinQueue : public RoundRobinQueue { -public: - void - print() const - { - for (auto *it = head; it != nullptr; it = it->next) { - std::cout << it->node->name << '(' << std::setw(2) << it->node->burst << ") "; - } - std::cout << std::endl; - } -}; - -TEST(roundrobin, RoundRobinQueue) -{ - DebugRoundRobinQueue queue; - queue.insert(new Task{"P1", 1, 1, 50}); - queue.insert(new Task{"P2", 2, 1, 40}); - queue.insert(new Task{"P3", 3, 1, 50}); - queue.insert(new Task{"P4", 4, 1, 40}); - - const auto begin = std::chrono::system_clock::now(); - for (auto *t = queue.next(10); t != nullptr; t = queue.next(10)) { - run(t, 10); - queue.print(); - } - const auto end = std::chrono::system_clock::now(); - const auto duration = std::chrono::duration_cast(end - begin).count(); - - std::cout << "Completed in (us): " << duration << std::endl; - // test should complete in 250us unless running on valgrind - if (!RUNNING_ON_VALGRIND) { EXPECT_LE(duration, 250); } - - EXPECT_EQ(queue.head, nullptr); - EXPECT_EQ(queue.tail, nullptr); -} diff --git a/src/sched/test_taskqueue.cc b/src/sched/test_taskqueue.cc deleted file mode 100644 index 217c44d..0000000 --- a/src/sched/test_taskqueue.cc +++ /dev/null @@ -1,122 +0,0 @@ -#include - -#include "../sched.hpp" - -struct DebugQueue : public Queue { -public: - void - expect_ordered() const - { - int id = 1; - for (auto *it = head; it != nullptr; it = it->next) { - // std::cout << it->node->name << std::endl; - EXPECT_EQ(it->node->id, id++); - } - } -}; - -TEST(taskqueue, insert) -{ - DebugQueue queue; - auto *p1 = new Task{"P1", 1, 1, 10}; - queue.insert(p1); - queue.insert(new Task{"P2", 2, 1, 10}); - queue.insert(new Task{"P3", 3, 1, 10}); - auto *p4 = new Task{"P4", 4, 1, 10}; - queue.insert(p4); - queue.expect_ordered(); - - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p4); -} - -TEST(taskqueue, removeHead) -{ - DebugQueue queue; - auto *p0 = new Task{"P0", 0, 1, 10}; - queue.insert(p0); - auto *p1 = new Task{"P1", 1, 1, 10}; - queue.insert(p1); - queue.insert(new Task{"P2", 2, 1, 10}); - queue.insert(new Task{"P3", 3, 1, 10}); - auto *p4 = new Task{"P4", 4, 1, 10}; - queue.insert(p4); - queue.remove(p0); - delete p0; - - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p4); - queue.expect_ordered(); -} - -TEST(taskqueue, removeTail) -{ - DebugQueue queue; - auto *p1 = new Task{"P1", 1, 1, 10}; - queue.insert(p1); - queue.insert(new Task{"P2", 2, 1, 10}); - queue.insert(new Task{"P3", 3, 1, 10}); - auto *p4 = new Task{"P4", 4, 1, 10}; - queue.insert(p4); - auto *p5 = new Task{"P5", 5, 1, 10}; - queue.insert(p5); - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p5); - - queue.remove(p5); - delete p5; - - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p4); - queue.expect_ordered(); -} - -TEST(taskqueue, removeLast) -{ - DebugQueue queue; - - auto *p0 = new Task{"P0", 0, 1, 10}; - queue.insert(p0); - EXPECT_EQ(queue.head->node, p0); - EXPECT_EQ(queue.tail->node, p0); - - queue.remove(p0); - delete p0; - - EXPECT_EQ(queue.head, nullptr); - EXPECT_EQ(queue.tail, nullptr); -} - -TEST(taskqueue, removeNullptr) -{ - DebugQueue queue; - queue.insert(new Task{"P1", 1, 1, 10}); - queue.insert(new Task{"P2", 2, 1, 10}); - queue.insert(new Task{"P3", 3, 1, 10}); - queue.insert(new Task{"P4", 4, 1, 10}); - queue.remove(nullptr); - queue.expect_ordered(); -} - -TEST(taskqueue, remove) -{ - DebugQueue queue; - auto *p1 = new Task{"P1", 1, 1, 10}; - queue.insert(p1); - queue.insert(new Task{"P2", 2, 1, 10}); - auto *p0 = new Task{"P0", 0, 1, 10}; - queue.insert(p0); - queue.insert(new Task{"P3", 3, 1, 10}); - auto *p4 = new Task{"P4", 4, 1, 10}; - queue.insert(p4); - - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p4); - - queue.remove(p0); - delete p0; - - EXPECT_EQ(queue.head->node, p1); - EXPECT_EQ(queue.tail->node, p4); - queue.expect_ordered(); -} diff --git a/src/task.h b/src/task.h deleted file mode 100644 index 0d59bb1..0000000 --- a/src/task.h +++ /dev/null @@ -1,78 +0,0 @@ -#pragma once - -/** - * Representation of a task in the system - */ -struct Task { - const char *name; - int id; - int priority; - int burst; -}; - -#ifdef __cplusplus -template struct Queue { - struct Item { - Item(T *p_node) : node(p_node) {} - T *node; - Item *next = nullptr; - - [[nodiscard]] bool - operator==(const T *other) const - { - return node == other; - } - }; - - ~Queue() noexcept - { - for (auto *it = head; it != nullptr;) { - auto *current = it; - it = it->next; - delete current->node; - delete current; - } - } - - /// Insert item at the end of the queue - void - insert(T *item) - { - if (head == nullptr) { - head = new Item(item); - tail = head; - } - else { - tail->next = new Item(item); - tail = tail->next; - } - } - - void - remove(T *item) - { - if (head == nullptr) return; - if (item == head->node) { - auto *it = head; - head = head->next; - if (*tail == item) tail = nullptr; - delete it; - return; - } - - Item *prev = nullptr; - for (auto *it = head; it != nullptr; it = it->next) { - if (it->node == item) { - if (prev) { prev->next = it->next; } - if (tail == it) { tail = prev; } - delete it; - return; - } - prev = it; - } - } - - Item *head = nullptr; - Item *tail = nullptr; -}; -#endif diff --git a/toolchains/BUILD.bazel b/toolchains/BUILD.bazel new file mode 100644 index 0000000..d46f812 --- /dev/null +++ b/toolchains/BUILD.bazel @@ -0,0 +1,34 @@ +load(":i386_elf_gcc.bzl", "cc_toolchain_config") + +package(default_visibility = ["//visibility:public"]) + +filegroup(name = "empty") + +cc_toolchain_config(name = "i386_elf_gcc_toolchain_config") + +cc_toolchain( + name = "i386_elf_gcc_toolchain", + all_files = ":empty", + compiler_files = ":empty", + dwp_files = ":empty", + linker_files = ":empty", + objcopy_files = ":empty", + strip_files = ":empty", + supports_param_files = 0, + toolchain_config = ":i386_elf_gcc_toolchain_config", + toolchain_identifier = "none_i386-toolchain", +) + +toolchain( + name = "i386_elf_gcc", + exec_compatible_with = [ + "@platforms//cpu:x86_64", + "@platforms//os:linux", + ], + target_compatible_with = [ + "@platforms//cpu:i386", + "@platforms//os:none", + ], + toolchain = ":i386_elf_gcc_toolchain", + toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", +) diff --git a/toolchains/i386_elf_gcc.bzl b/toolchains/i386_elf_gcc.bzl new file mode 100644 index 0000000..ad933d2 --- /dev/null +++ b/toolchains/i386_elf_gcc.bzl @@ -0,0 +1,123 @@ +load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") +load( + "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", + "feature", + "flag_group", + "flag_set", + "tool_path", +) + +all_link_actions = [ + ACTION_NAMES.cpp_link_executable, + ACTION_NAMES.cpp_link_dynamic_library, + ACTION_NAMES.cpp_link_nodeps_dynamic_library, +] + +all_compile_actions = [ + ACTION_NAMES.assemble, + ACTION_NAMES.c_compile, + ACTION_NAMES.clif_match, + ACTION_NAMES.cpp_compile, + ACTION_NAMES.cpp_header_parsing, + ACTION_NAMES.cpp_module_codegen, + ACTION_NAMES.cpp_module_compile, + ACTION_NAMES.linkstamp_compile, + ACTION_NAMES.lto_backend, + ACTION_NAMES.preprocess_assemble, +] + +def _impl(ctx): + tool_paths = [ + tool_path( + name = "gcc", + path = "/usr/bin/i686-elf-gcc", + ), + tool_path( + name = "ld", + path = "/usr/bin/i686-elf-ld", + ), + tool_path( + name = "ar", + path = "/usr/bin/i686-elf-ar", + ), + tool_path( + name = "cpp", + path = "/usr/bin/i686-elf-cpp", + ), + tool_path( + name = "gcov", + path = "/bin/false", + ), + tool_path( + name = "nm", + path = "/usr/bin/i686-elf-nm", + ), + tool_path( + name = "objdump", + path = "/usr/bin/i686-elf-objdump", + ), + tool_path( + name = "strip", + path = "/usr/bin/i686-elf-strip", + ), + ] + + features = [ + feature( + name = "default_compiler_flags", + enabled = True, + flag_sets = [ + flag_set( + actions = all_compile_actions, + flag_groups = [ + flag_group( + flags = [ + "-fanalyzer", + "-ffreestanding", + "-mgeneral-regs-only", + ], + ), + ], + ), + ], + ), + feature( + name = "default_linker_flags", + enabled = True, + flag_sets = [ + flag_set( + actions = all_link_actions, + flag_groups = ([ + flag_group( + flags = [ + "-nostdlib", + ], + ), + ]), + ), + ], + ), + ] + + return cc_common.create_cc_toolchain_config_info( + ctx = ctx, + features = features, + cxx_builtin_include_directories = [ + "/usr/lib/gcc/i686-elf", + ], + toolchain_identifier = "local", + host_system_name = "local", + target_system_name = "local", + target_cpu = "i686", + target_libc = "unknown", + compiler = "gcc", + abi_version = "unknown", + abi_libc_version = "unknown", + tool_paths = tool_paths, + ) + +cc_toolchain_config = rule( + implementation = _impl, + attrs = {}, + provides = [CcToolchainConfigInfo], +) diff --git a/toolchains/i386_qemu.bzl b/toolchains/i386_qemu.bzl new file mode 100644 index 0000000..c9f8535 --- /dev/null +++ b/toolchains/i386_qemu.bzl @@ -0,0 +1,8 @@ +_wrapper_template = """\ +#!/bin/bash +qemu-system-i386 -accel kvm -machine pc -d cpu_reset -display gtk,zoom-to-fit=on -cdrom {cdrom} +""" + +def qemu_wrapper(): + return _wrapper_template + diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel new file mode 100644 index 0000000..fddb974 --- /dev/null +++ b/tools/BUILD.bazel @@ -0,0 +1,6 @@ +package(default_visibility = ["//visibility:public"]) + +py_binary( + name = "make_iso", + srcs = ["make_iso.py"], +) diff --git a/tools/configure_file.bzl b/tools/configure_file.bzl new file mode 100644 index 0000000..8fdd75c --- /dev/null +++ b/tools/configure_file.bzl @@ -0,0 +1,29 @@ +load("//:project_config.bzl", "version") +load("@rules_cc//cc:find_cc_toolchain.bzl", "find_cc_toolchain", "use_cc_toolchain") + +def configure_file(**kwargs): + _configure_file( + source_file = "{name}.h".format(**kwargs), + **kwargs + ) + +def _configure_file_impl(ctx): + cc_toolchain = find_cc_toolchain(ctx) + + ctx.actions.expand_template( + template = ctx.file.template, + output = ctx.outputs.source_file, + substitutions = { + "{VERSION}": '"{}"'.format(version()), + "{CC}": '"{} " __VERSION__'.format(cc_toolchain.compiler), + }, + ) + +_configure_file = rule( + attrs = { + "template": attr.label(allow_single_file = True), + "source_file": attr.output(mandatory = True), + }, + toolchains = use_cc_toolchain(), + implementation = _configure_file_impl, +) diff --git a/tools/make_iso.bzl b/tools/make_iso.bzl new file mode 100644 index 0000000..5ff20f5 --- /dev/null +++ b/tools/make_iso.bzl @@ -0,0 +1,41 @@ +def make_iso(**kwargs): + _make_iso( + image = "{name}.iso".format(**kwargs), + **kwargs + ) + +def _make_iso_impl(ctx): + inputs = [] + outputs = [] + args = ctx.actions.args() + + args.add("-c", ctx.file.bootloader.path) + inputs.append(ctx.file.bootloader) + args.add("-k", ctx.file.kernel.path) + inputs.append(ctx.file.kernel) + + args.add("-o", ctx.outputs.image.path) + outputs.append(ctx.outputs.image) + + ctx.actions.run( + inputs = inputs, + outputs = outputs, + arguments = [args], + executable = ctx.executable._generator, + progress_message = "Generating ISO image %s" % ctx.label.name, + ) + +_make_iso = rule( + attrs = { + "bootloader": attr.label(allow_single_file = True), + "kernel": attr.label(allow_single_file = True), + "image": attr.output(), + "_generator": attr.label( + default = Label(":make_iso"), + executable = True, + allow_files = True, + cfg = "exec", + ), + }, + implementation = _make_iso_impl, +) diff --git a/tools/qemu.bzl b/tools/qemu.bzl new file mode 100644 index 0000000..9493306 --- /dev/null +++ b/tools/qemu.bzl @@ -0,0 +1,33 @@ +load("//toolchains:i386_qemu.bzl", qemu_i386 = "qemu_wrapper") + +def qemu(**kwargs): + _qemu( + wrapper_content = select({ + "@platforms//cpu:i386": qemu_i386(), + "//conditions:default": "/bin/false", + }), + **kwargs + ) + +def _qemu_impl(ctx): + print(ctx) + print(ctx.attr) + + wrapper = ctx.actions.declare_file("%s_wrapper" % ctx.label.name) + wrapper_content = ctx.attr.wrapper_content.format( + cdrom = ctx.file.cdrom.basename, + ) + ctx.actions.write(wrapper, wrapper_content, is_executable = True) + + runfiles = ctx.runfiles(files = [ctx.file.cdrom]) + + return [DefaultInfo(executable = wrapper, runfiles = runfiles)] + +_qemu = rule( + implementation = _qemu_impl, + attrs = { + "cdrom": attr.label(allow_single_file = True), + "wrapper_content": attr.string(), + }, + executable = True, +) -- cgit v1.2.1